Exemplo n.º 1
0
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);
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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 );
}