Enabled Digest calculations for data going to TSM - useful for verification
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user