int initCondForGet (rcComm_t *conn, rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjOprInp, rodsRestart_t *rodsRestart) { #ifdef RBUDP_TRANSFER char *tmpStr; #endif /* RBUDP_TRANSFER */ if (dataObjOprInp == NULL) { rodsLog (LOG_ERROR, "initCondForGet: NULL dataObjOprInp input"); return (USER__NULL_INPUT_ERR); } memset (dataObjOprInp, 0, sizeof (dataObjInp_t)); if (rodsArgs == NULL) { return (0); } dataObjOprInp->oprType = GET_OPR; if (rodsArgs->force == True) { addKeyVal (&dataObjOprInp->condInput, FORCE_FLAG_KW, ""); } if (rodsArgs->verifyChecksum == True) { addKeyVal (&dataObjOprInp->condInput, VERIFY_CHKSUM_KW, ""); } #ifdef windows_platform dataObjOprInp->numThreads = NO_THREADING; #else if (rodsArgs->number == True) { if (rodsArgs->numberValue == 0) { dataObjOprInp->numThreads = NO_THREADING; } else { dataObjOprInp->numThreads = rodsArgs->numberValue; } } #endif if (rodsArgs->replNum == True) { addKeyVal (&dataObjOprInp->condInput, REPL_NUM_KW, rodsArgs->replNumValue); } if (rodsArgs->resource == True) { if (rodsArgs->resourceString == NULL) { rodsLog (LOG_ERROR, "initCondForPut: NULL resourceString error"); return (USER__NULL_INPUT_ERR); } else { addKeyVal (&dataObjOprInp->condInput, RESC_NAME_KW, rodsArgs->resourceString); } } if (rodsArgs->ticket == True) { if (rodsArgs->ticketString == NULL) { rodsLog (LOG_ERROR, "initCondForPut: NULL ticketString error"); return (USER__NULL_INPUT_ERR); } else { addKeyVal (&dataObjOprInp->condInput, TICKET_KW, rodsArgs->ticketString); } } #ifdef RBUDP_TRANSFER if (rodsArgs->rbudp == True) { /* use -Q for rbudp transfer */ addKeyVal (&dataObjOprInp->condInput, RBUDP_TRANSFER_KW, ""); } if (rodsArgs->veryVerbose == True) { addKeyVal (&dataObjOprInp->condInput, VERY_VERBOSE_KW, ""); } if ((tmpStr = getenv (RBUDP_SEND_RATE_KW)) != NULL) { addKeyVal (&dataObjOprInp->condInput, RBUDP_SEND_RATE_KW, tmpStr); } if ((tmpStr = getenv (RBUDP_PACK_SIZE_KW)) != NULL) { addKeyVal (&dataObjOprInp->condInput, RBUDP_PACK_SIZE_KW, tmpStr); } #else /* RBUDP_TRANSFER */ if (rodsArgs->rbudp == True) { rodsLog (LOG_NOTICE, "initCondForGet: RBUDP_TRANSFER (-d) not supported"); } #endif /* RBUDP_TRANSFER */ if (rodsArgs->purgeCache == True) { addKeyVal (&dataObjOprInp->condInput, PURGE_CACHE_KW, ""); } memset (rodsRestart, 0, sizeof (rodsRestart_t)); if (rodsArgs->restart == True) { int status; status = openRestartFile (rodsArgs->restartFileString, rodsRestart, rodsArgs); if (status < 0) { rodsLogError (LOG_ERROR, status, "initCondForPut: openRestartFile of %s errno", rodsArgs->restartFileString); return (status); } } if (rodsArgs->retries == True && rodsArgs->restart == False && rodsArgs->lfrestart == False) { rodsLog (LOG_ERROR, "initCondForGet: --retries must be used with -X option"); return USER_INPUT_OPTION_ERR; } if (rodsArgs->lfrestart == True) { if (rodsArgs->rbudp == True) { rodsLog (LOG_NOTICE, "initCondForPut: --lfrestart cannot be used with -Q option"); } else { conn->fileRestart.flags = FILE_RESTART_ON; rstrcpy (conn->fileRestart.infoFile, rodsArgs->lfrestartFileString, MAX_NAME_LEN); } } if (rodsArgs->rlock == True) { addKeyVal (&dataObjOprInp->condInput, LOCK_TYPE_KW, READ_LOCK_TYPE); } if (rodsArgs->wlock == True) { rodsLog (LOG_ERROR, "initCondForPut: --wlock not supported, changing it to --rlock"); addKeyVal (&dataObjOprInp->condInput, LOCK_TYPE_KW, READ_LOCK_TYPE); } dataObjOprInp->openFlags = O_RDONLY; return (0); }
int initCondForPut( rcComm_t *conn, rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjOprInp, bulkOprInp_t *bulkOprInp, rodsRestart_t *rodsRestart ) { char *tmpStr; if ( rodsArgs == NULL ) { // JMC cppcheck - nullptr rodsLog( LOG_ERROR, "initCondForPut :: NULL rodsArgs" ); return -1; } if ( dataObjOprInp == NULL ) { rodsLog( LOG_ERROR, "initCondForPut: NULL dataObjOprInp input" ); return USER__NULL_INPUT_ERR; } memset( dataObjOprInp, 0, sizeof( dataObjInp_t ) ); if ( rodsArgs->bulk == True ) { if ( bulkOprInp == NULL ) { rodsLog( LOG_ERROR, "initCondForPut: NULL bulkOprInp input" ); return USER__NULL_INPUT_ERR; } bzero( bulkOprInp, sizeof( bulkOprInp_t ) ); if ( rodsArgs->checksum == True ) { addKeyVal( &bulkOprInp->condInput, REG_CHKSUM_KW, "" ); } else if ( rodsArgs->verifyChecksum == True ) { addKeyVal( &bulkOprInp->condInput, VERIFY_CHKSUM_KW, "" ); } initAttriArrayOfBulkOprInp( bulkOprInp ); } dataObjOprInp->oprType = PUT_OPR; if ( rodsArgs->all == True ) { addKeyVal( &dataObjOprInp->condInput, ALL_KW, "" ); } if ( rodsArgs->dataType == True ) { if ( rodsArgs->dataTypeString == NULL ) { addKeyVal( &dataObjOprInp->condInput, DATA_TYPE_KW, "generic" ); } else { if ( strcmp( rodsArgs->dataTypeString, "t" ) == 0 || strcmp( rodsArgs->dataTypeString, "tar" ) == 0 ) { addKeyVal( &dataObjOprInp->condInput, DATA_TYPE_KW, "tar file" ); } else { addKeyVal( &dataObjOprInp->condInput, DATA_TYPE_KW, rodsArgs->dataTypeString ); } } } else { addKeyVal( &dataObjOprInp->condInput, DATA_TYPE_KW, "generic" ); } if ( rodsArgs->force == True ) { addKeyVal( &dataObjOprInp->condInput, FORCE_FLAG_KW, "" ); if ( rodsArgs->bulk == True ) { addKeyVal( &bulkOprInp->condInput, FORCE_FLAG_KW, "" ); } } #ifdef windows_platform dataObjOprInp->numThreads = NO_THREADING; #else if ( rodsArgs->number == True ) { if ( rodsArgs->numberValue == 0 ) { dataObjOprInp->numThreads = NO_THREADING; } else { dataObjOprInp->numThreads = rodsArgs->numberValue; } } #endif if ( rodsArgs->physicalPath == True ) { if ( rodsArgs->physicalPathString == NULL ) { rodsLog( LOG_ERROR, "initCondForPut: NULL physicalPathString error" ); return USER__NULL_INPUT_ERR; } else { boost::filesystem::path slash( "/" ); std::string preferred_slash = slash.make_preferred().native(); if ( preferred_slash[0] != rodsArgs->physicalPathString[0] ) { rodsLog( LOG_ERROR, "initCondForPut: physical path [%s] must be absolute, not relative", rodsArgs->physicalPathString ); return USER_INPUT_PATH_ERR; } addKeyVal( &dataObjOprInp->condInput, FILE_PATH_KW, rodsArgs->physicalPathString ); } } if ( rodsArgs->resource == True ) { if ( rodsArgs->resourceString == NULL ) { rodsLog( LOG_ERROR, "initCondForPut: NULL resourceString error" ); return USER__NULL_INPUT_ERR; } else { addKeyVal( &dataObjOprInp->condInput, DEST_RESC_NAME_KW, rodsArgs->resourceString ); if ( rodsArgs->bulk == True ) { addKeyVal( &bulkOprInp->condInput, DEST_RESC_NAME_KW, rodsArgs->resourceString ); } } } else if ( myRodsEnv != NULL && strlen( myRodsEnv->rodsDefResource ) > 0 ) { /* use rodsDefResource but set the DEF_RESC_NAME_KW instead. * Used by dataObjCreate. Will only make a new replica only if * DEST_RESC_NAME_KW is set */ addKeyVal( &dataObjOprInp->condInput, DEF_RESC_NAME_KW, myRodsEnv->rodsDefResource ); if ( rodsArgs->bulk == True ) { addKeyVal( &bulkOprInp->condInput, DEF_RESC_NAME_KW, myRodsEnv->rodsDefResource ); } } if ( rodsArgs->replNum == True ) { addKeyVal( &dataObjOprInp->condInput, REPL_NUM_KW, rodsArgs->replNumValue ); } if ( rodsArgs->purgeCache == True ) { // JMC - backport 4537 addKeyVal( &dataObjOprInp->condInput, PURGE_CACHE_KW, "" ); } if ( rodsArgs->rbudp == True ) { /* use -Q for rbudp transfer */ addKeyVal( &dataObjOprInp->condInput, RBUDP_TRANSFER_KW, "" ); } if ( rodsArgs->veryVerbose == True ) { addKeyVal( &dataObjOprInp->condInput, VERY_VERBOSE_KW, "" ); } if ( ( tmpStr = getenv( RBUDP_SEND_RATE_KW ) ) != NULL ) { addKeyVal( &dataObjOprInp->condInput, RBUDP_SEND_RATE_KW, tmpStr ); } if ( ( tmpStr = getenv( RBUDP_PACK_SIZE_KW ) ) != NULL ) { addKeyVal( &dataObjOprInp->condInput, RBUDP_PACK_SIZE_KW, tmpStr ); } memset( rodsRestart, 0, sizeof( rodsRestart_t ) ); if ( rodsArgs->restart == True ) { int status; status = openRestartFile( rodsArgs->restartFileString, rodsRestart ); if ( status < 0 ) { rodsLogError( LOG_ERROR, status, "initCondForPut: openRestartFile of %s error", rodsArgs->restartFileString ); return status; } if ( rodsRestart->doneCnt == 0 ) { /* brand new */ if ( rodsArgs->bulk == True ) { rstrcpy( rodsRestart->oprType, BULK_OPR_KW, NAME_LEN ); } else { rstrcpy( rodsRestart->oprType, NON_BULK_OPR_KW, NAME_LEN ); } } else { if ( rodsArgs->bulk == True ) { if ( strcmp( rodsRestart->oprType, BULK_OPR_KW ) != 0 ) { rodsLog( LOG_ERROR, "initCondForPut: -b cannot be used to restart this iput" ); return BULK_OPR_MISMATCH_FOR_RESTART; } } else { if ( strcmp( rodsRestart->oprType, NON_BULK_OPR_KW ) != 0 ) { rodsLog( LOG_ERROR, "initCondForPut: -b must be used to restart this iput" ); return BULK_OPR_MISMATCH_FOR_RESTART; } } } } if ( rodsArgs->retries == True && rodsArgs->restart == False && rodsArgs->lfrestart == False ) { rodsLog( LOG_ERROR, "initCondForPut: --retries must be used with -X or --lfrestart option" ); return USER_INPUT_OPTION_ERR; } /* Not needed - dataObjOprInp->createMode = 0700; */ /* mmap in rbudp needs O_RDWR */ dataObjOprInp->openFlags = O_RDWR; if ( rodsArgs->lfrestart == True ) { if ( rodsArgs->bulk == True ) { rodsLog( LOG_NOTICE, "initCondForPut: --lfrestart cannot be used with -b option" ); } else if ( rodsArgs->rbudp == True ) { rodsLog( LOG_NOTICE, "initCondForPut: --lfrestart cannot be used with -Q option" ); } else { conn->fileRestart.flags = FILE_RESTART_ON; rstrcpy( conn->fileRestart.infoFile, rodsArgs->lfrestartFileString, MAX_NAME_LEN ); } } if ( rodsArgs->wlock == True ) { // JMC - backport 4604 addKeyVal( &dataObjOprInp->condInput, LOCK_TYPE_KW, WRITE_LOCK_TYPE ); } if ( rodsArgs->rlock == True ) { // JMC - backport 4612 rodsLog( LOG_ERROR, "initCondForPut: --rlock not supported, changing it to --wlock" ); addKeyVal( &dataObjOprInp->condInput, LOCK_TYPE_KW, WRITE_LOCK_TYPE ); } return 0; }
int initCondForCp( rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjCopyInp_t *dataObjCopyInp, rodsRestart_t *rodsRestart ) { char *tmpStr; if ( dataObjCopyInp == NULL ) { rodsLog( LOG_ERROR, "initCondForCp: NULL dataObjCopyInp in cp" ); return USER__NULL_INPUT_ERR; } memset( dataObjCopyInp, 0, sizeof( dataObjCopyInp_t ) ); if ( rodsArgs == NULL ) { return 0; } if ( rodsArgs->dataType == True ) { if ( rodsArgs->dataTypeString != NULL ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, DATA_TYPE_KW, rodsArgs->dataTypeString ); } } if ( rodsArgs->force == True ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, FORCE_FLAG_KW, "" ); } if ( rodsArgs->checksum == True ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, REG_CHKSUM_KW, "" ); } if ( rodsArgs->verifyChecksum == True ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, VERIFY_CHKSUM_KW, "" ); } if ( rodsArgs->number == True ) { if ( rodsArgs->numberValue == 0 ) { dataObjCopyInp->destDataObjInp.numThreads = NO_THREADING; } else { dataObjCopyInp->destDataObjInp.numThreads = rodsArgs->numberValue; } } if ( rodsArgs->physicalPath == True ) { if ( rodsArgs->physicalPathString == NULL ) { rodsLog( LOG_ERROR, "initCondForCp: NULL physicalPathString error" ); return USER__NULL_INPUT_ERR; } else { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, FILE_PATH_KW, rodsArgs->physicalPathString ); } } if ( rodsArgs->resource == True ) { if ( rodsArgs->resourceString == NULL ) { rodsLog( LOG_ERROR, "initCondForCp: NULL resourceString error" ); return USER__NULL_INPUT_ERR; } else { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, DEST_RESC_NAME_KW, rodsArgs->resourceString ); } } else if ( myRodsEnv != NULL && strlen( myRodsEnv->rodsDefResource ) > 0 ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, DEST_RESC_NAME_KW, myRodsEnv->rodsDefResource ); } if ( rodsArgs->rbudp == True ) { /* use -Q for rbudp transfer */ addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, RBUDP_TRANSFER_KW, "" ); addKeyVal( &dataObjCopyInp->srcDataObjInp.condInput, RBUDP_TRANSFER_KW, "" ); } if ( rodsArgs->veryVerbose == True ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, VERY_VERBOSE_KW, "" ); addKeyVal( &dataObjCopyInp->srcDataObjInp.condInput, VERY_VERBOSE_KW, "" ); } if ( ( tmpStr = getenv( RBUDP_SEND_RATE_KW ) ) != NULL ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, RBUDP_SEND_RATE_KW, tmpStr ); addKeyVal( &dataObjCopyInp->srcDataObjInp.condInput, RBUDP_SEND_RATE_KW, tmpStr ); } if ( ( tmpStr = getenv( RBUDP_PACK_SIZE_KW ) ) != NULL ) { addKeyVal( &dataObjCopyInp->destDataObjInp.condInput, RBUDP_PACK_SIZE_KW, tmpStr ); addKeyVal( &dataObjCopyInp->srcDataObjInp.condInput, RBUDP_PACK_SIZE_KW, tmpStr ); } memset( rodsRestart, 0, sizeof( rodsRestart_t ) ); if ( rodsArgs->restart == True ) { int status; status = openRestartFile( rodsArgs->restartFileString, rodsRestart ); if ( status < 0 ) { rodsLogError( LOG_ERROR, status, "initCondForCp: openRestartFile of %s errno", rodsArgs->restartFileString ); return status; } } //dataObjCopyInp->destDataObjInp.createMode = 0600; // seems unused, and caused https://github.com/irods/irods/issues/2085 dataObjCopyInp->destDataObjInp.openFlags = O_WRONLY; return 0; }
int initCondForRepl( rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjInp, rodsRestart_t *rodsRestart ) { char *myResc = NULL; char *tmpStr; if ( dataObjInp == NULL ) { rodsLog( LOG_ERROR, "initCondForRepl: NULL dataObjInp input" ); return ( USER__NULL_INPUT_ERR ); } memset( dataObjInp, 0, sizeof( dataObjInp_t ) ); if ( rodsArgs == NULL ) { return ( 0 ); } if ( rodsArgs->replNum == True ) { addKeyVal( &dataObjInp->condInput, REPL_NUM_KW, rodsArgs->replNumValue ); } if ( rodsArgs->purgeCache == True ) { // JMC - backport 4549 addKeyVal( &dataObjInp->condInput, PURGE_CACHE_KW, "" ); } if ( rodsArgs->all == True ) { addKeyVal( &dataObjInp->condInput, ALL_KW, "" ); } if ( rodsArgs->admin == True ) { addKeyVal( &dataObjInp->condInput, ADMIN_KW, "" ); } if ( rodsArgs->srcResc == True ) { addKeyVal( &dataObjInp->condInput, RESC_NAME_KW, rodsArgs->srcRescString ); } if ( rodsArgs->rescGroup == True ) { addKeyVal( &dataObjInp->condInput, RESC_GROUP_NAME_KW, rodsArgs->rescGroupString ); } if ( rodsArgs->resource == True ) { if ( rodsArgs->resourceString == NULL ) { rodsLog( LOG_ERROR, "initCondForRepl: NULL resourceString error" ); return ( USER__NULL_INPUT_ERR ); } else { myResc = rodsArgs->resourceString; addKeyVal( &dataObjInp->condInput, DEST_RESC_NAME_KW, rodsArgs->resourceString ); } } else if ( myRodsEnv != NULL && strlen( myRodsEnv->rodsDefResource ) > 0 ) { myResc = myRodsEnv->rodsDefResource; addKeyVal( &dataObjInp->condInput, DEF_RESC_NAME_KW, myRodsEnv->rodsDefResource ); } if ( rodsArgs->backupMode == True ) { addKeyVal( &dataObjInp->condInput, BACKUP_RESC_NAME_KW, myResc ); } if ( rodsArgs->unmount == True ) { /* use unmount for update */ addKeyVal( &dataObjInp->condInput, UPDATE_REPL_KW, "" ); } if ( rodsArgs->rbudp == True ) { /* use -Q for rbudp transfer */ addKeyVal( &dataObjInp->condInput, RBUDP_TRANSFER_KW, "" ); } if ( rodsArgs->veryVerbose == True ) { addKeyVal( &dataObjInp->condInput, VERY_VERBOSE_KW, "" ); } if ( ( tmpStr = getenv( RBUDP_SEND_RATE_KW ) ) != NULL ) { addKeyVal( &dataObjInp->condInput, RBUDP_SEND_RATE_KW, tmpStr ); } if ( ( tmpStr = getenv( RBUDP_PACK_SIZE_KW ) ) != NULL ) { addKeyVal( &dataObjInp->condInput, RBUDP_PACK_SIZE_KW, tmpStr ); } memset( rodsRestart, 0, sizeof( rodsRestart_t ) ); if ( rodsArgs->restart == True ) { int status; status = openRestartFile( rodsArgs->restartFileString, rodsRestart, rodsArgs ); if ( status < 0 ) { rodsLogError( LOG_ERROR, status, "initCondForRepl: openRestartFile of %s errno", rodsArgs->restartFileString ); return ( status ); } } if ( rodsArgs->rlock == True ) { // JMC - backport 4609 addKeyVal( &dataObjInp->condInput, LOCK_TYPE_KW, READ_LOCK_TYPE ); } if ( rodsArgs->number == True ) { if ( rodsArgs->numberValue == 0 ) { dataObjInp->numThreads = NO_THREADING; } else { dataObjInp->numThreads = rodsArgs->numberValue; } } if ( rodsArgs->wlock == True ) { // JMC - backport 4612 rodsLog( LOG_ERROR, "initCondForPut: --wlock not supported, changing it to --rlock" ); addKeyVal( &dataObjInp->condInput, LOCK_TYPE_KW, READ_LOCK_TYPE ); } return ( 0 ); }