Enabled Digest calculations for data going to TSM - useful for verification

This commit is contained in:
Deon George
2013-11-07 18:06:56 +11:00
parent b3334a2401
commit 0046a593ab
5 changed files with 81 additions and 4 deletions

View File

@@ -28,6 +28,10 @@
#include "../tsmpipe.h"
#ifdef USE_DIGEST
#include <openssl/evp.h>
#endif
int tsm_matchone_cb(dsmQueryType qType, DataBlk *qResp, void *userdata) {
struct matchone_cb_data *cbdata = userdata;
@@ -118,7 +122,11 @@ int tsm_regfs(dsUint32_t dsmHandle, char *fsname) {
}
/* Send data to TSM for storage */
#ifdef USE_DIGEST
int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long length, char *description, dsmSendType sendtype, char *digest) {
#else
int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long length, char *description, dsmSendType sendtype) {
#endif
extern int verbose;
char *buffer;
dsInt16_t rc=0;
@@ -138,6 +146,24 @@ int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long l
exit(255);
}
#ifdef USE_DIGEST
EVP_MD_CTX mdctx;
const EVP_MD *md=NULL;
unsigned char md_value[EVP_MAX_MD_SIZE];
unsigned int md_len, i;
if (digest) {
OpenSSL_add_all_digests();
md = EVP_get_digestbyname(digest);
if (! md) {
printf("tsm_sendfile: Unknown message digest %s\n", digest);
return 0;
}
}
#endif
// Register our filespace
if (! tsm_regfs(dsmHandle,fsname))
exit(3);
@@ -210,6 +236,13 @@ int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long l
return(0);
}
#ifdef USE_DIGEST
if (digest) {
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
}
#endif
memset(&dataBlk,0x00,sizeof(DataBlk));
dataBlk.stVersion = DataBlkVersion;
@@ -224,6 +257,11 @@ int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long l
break;
}
#ifdef USE_DIGEST
if (digest)
EVP_DigestUpdate(&mdctx, buffer, nbytes);
#endif
dataBlk.bufferLen = nbytes;
dataBlk.numBytes = 0;
dataBlk.bufferPtr = buffer;
@@ -274,6 +312,17 @@ int tsm_sendfile(dsUint32_t dsmHandle, char *fsname, char *filename, long long l
}
}
#ifdef USE_DIGEST
if (digest) {
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);
fprintf(stderr,"%s: ",digest);
for(i=0; i<md_len; i++) fprintf(stderr,"%02x",md_value[i]);
fprintf(stderr,"\n");
}
#endif
return 1;
}