int irods_reli_md5( const char *host, const char *path, char *digest ) { dataObjInp_t request; int result; char *str = 0; struct irods_server *server = connect_to_host(host); if(!server) return -1; memset(&request,0,sizeof(request)); strcpy(request.objPath,path); debug(D_IRODS,"rcDataObjChksum %s %s",host,path); result = rcDataObjChksum(server->conn,&request,&str); debug(D_IRODS,"= %d",result); if(result<0) { errno = irods_reli_errno(result); return -1; } else { /* rcDataObjChecksum returns the checksum as ASCII */ /* but Parrot is expecting 16 bytes of binary data */ int i; for(i=0;i<16;i++) { digest[i] = hex_to_byte(&str[2*i]); } debug(D_IRODS,"%s",str); free(str); return 0; } }
int chksumDataObjUtil (rcComm_t *conn, char *srcPath, rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjInp) { int status; struct timeval startTime, endTime; char *chksumStr = NULL; char myDir[MAX_NAME_LEN], myFile[MAX_NAME_LEN]; if (srcPath == NULL) { rodsLog (LOG_ERROR, "chksumDataObjUtil: NULL srcPath input"); return (USER__NULL_INPUT_ERR); } if (rodsArgs->verbose == True) { (void) gettimeofday(&startTime, (struct timezone *)0); } rstrcpy (dataObjInp->objPath, srcPath, MAX_NAME_LEN); status = rcDataObjChksum (conn, dataObjInp, &chksumStr); if (status < 0) { #if 0 if (status == CAT_NO_ROWS_FOUND && rodsArgs->resource == True) { if (rodsArgs->verbose == True) { printf ("%s does not exist in resource %s\n", dataObjInp->objPath, rodsArgs->resourceString); } return 0; } else { #endif ChksumCnt++; FailedChksumCnt++; rodsLogError (LOG_ERROR, status, "chksumDataObjUtil: rcDataObjChksum error for %s", dataObjInp->objPath); return status; #if 0 } #endif } else { ChksumCnt++; } splitPathByKey (dataObjInp->objPath, myDir, myFile, '/'); if (rodsArgs->silent == False) { printf (" %-30.30s %s\n", myFile, chksumStr); free (chksumStr); if (rodsArgs->verbose == True) { (void) gettimeofday(&endTime, (struct timezone *)0); printTiming (conn, dataObjInp->objPath, -1, NULL, &startTime, &endTime); } } return (status); }