コード例 #1
0
ファイル: fileOpr.c プロジェクト: DICE-UNC/iRODS-FUSE-Mod
int
matchVaultPath (rsComm_t *rsComm, char *filePath, 
rodsServerHost_t *rodsServerHost, char **outVaultPath)
{
    rescGrpInfo_t *tmpRescGrpInfo;
    rescInfo_t *tmpRescInfo;
    int len;

    if (isValidFilePath (filePath) < 0) {
        /* no match */
        return (0);
    }
    tmpRescGrpInfo = RescGrpInfo;

    while (tmpRescGrpInfo != NULL) {
	tmpRescInfo = tmpRescGrpInfo->rescInfo;
	/* match the rodsServerHost */
	if (tmpRescInfo->rodsServerHost == rodsServerHost) {
	    len = strlen (tmpRescInfo->rescVaultPath);
	    if (len > 0 && strncmp (tmpRescInfo->rescVaultPath, filePath, len) == 0 &&
	      (filePath[len] == '/' || filePath[len] == '\0')) {
		*outVaultPath = tmpRescInfo->rescVaultPath;
		return (len);
	    }
	}
	tmpRescGrpInfo = tmpRescGrpInfo->next;
    }

    /* no match */
    return (0);
}
コード例 #2
0
ファイル: fileOpr.cpp プロジェクト: 0x414A/irods
/* chkFilePathPerm - check the FilePath permission.
 * If rodsServerHost
 */
int
chkFilePathPerm( rsComm_t *rsComm, fileOpenInp_t *fileOpenInp,
                 rodsServerHost_t *rodsServerHost, int chkType ) { // JMC - backport 4774
    int status;

    if ( chkType == NO_CHK_PATH_PERM ) {
        return 0;
    }
    else if ( chkType == DISALLOW_PATH_REG ) {
        return PATH_REG_NOT_ALLOWED;
    }
    // =-=-=-=-=-=-=-

    status = isValidFilePath( fileOpenInp->fileName ); // JMC - backport 4766
    if ( status < 0 ) {
        return status;    // JMC - backport 4766
    }


    if ( rodsServerHost == NULL ) {
        rodsLog( LOG_NOTICE,
                 "chkFilePathPerm: NULL rodsServerHost" );
        return SYS_INTERNAL_NULL_INPUT_ERR;
    }

    // =-=-=-=-=-=-=-
    // JMC - backport 4774
    if ( chkType == CHK_NON_VAULT_PATH_PERM ) {
        status = matchCliVaultPath( rsComm, fileOpenInp->fileName, rodsServerHost );

        if ( status == 1 ) {
            /* a match in vault */
            return status;
        }
        else if ( status == -1 ) {
            /* in vault, but not in user's vault */
            return CANT_REG_IN_VAULT_FILE;
        }
    }
    else if ( chkType == DO_CHK_PATH_PERM ) {
        std::string out_path;
        irods::error ret = resc_mgr.validate_vault_path( fileOpenInp->fileName, rodsServerHost, out_path );
        if ( ret.ok() ) {
            /* a match */
            return CANT_REG_IN_VAULT_FILE;
        }
    }
    else {
        return SYS_INVALID_INPUT_PARAM;
        // =-=-=-=-=-=-=-
    }

    status = rsChkNVPathPermByHost( rsComm, fileOpenInp, rodsServerHost );

    return status;
}
コード例 #3
0
ファイル: fileOpr.c プロジェクト: DICE-UNC/iRODS-FUSE-Mod
/* chkFilePathPerm - check the FilePath permission.
 * If rodsServerHost
 */
int
chkFilePathPerm (rsComm_t *rsComm, fileOpenInp_t *fileOpenInp,
rodsServerHost_t *rodsServerHost, int chkType)
{
    int status;
    char *outVaultPath = NULL;

    if (chkType == NO_CHK_PATH_PERM) {
	return 0;
    } else if (chkType == DISALLOW_PATH_REG) {
	return PATH_REG_NOT_ALLOWED;
    }

    status = isValidFilePath (fileOpenInp->fileName); 
    if (status < 0) return status;

    if (rodsServerHost == NULL) {
	rodsLog (LOG_NOTICE,
	  "chkFilePathPerm: NULL rodsServerHost");
	return (SYS_INTERNAL_NULL_INPUT_ERR);
    }

    if (chkType == CHK_NON_VAULT_PATH_PERM) {
        status = matchCliVaultPath (rsComm, fileOpenInp->fileName, 
          rodsServerHost);

        if (status == 1) {
	    /* a match in vault */
	    return (status);
        } else if (status == -1) {
	    /* in vault, but not in user's vault */
	    return CANT_REG_IN_VAULT_FILE;
	}
    } else if (chkType == DO_CHK_PATH_PERM) {
        if (matchVaultPath (rsComm, fileOpenInp->fileName, rodsServerHost,
          &outVaultPath) > 0) {
            /* a match */
            return CANT_REG_IN_VAULT_FILE;
        }
    } else {
	return SYS_INVALID_INPUT_PARAM;
    }

    status = rsChkNVPathPermByHost (rsComm, fileOpenInp, rodsServerHost);
    
    return (status);
}
コード例 #4
0
ファイル: fileOpr.cpp プロジェクト: 0x414A/irods
// =-=-=-=-=-=-=-
// mk the directory recursively
int mkFileDirR(
    rsComm_t *          rsComm,
    size_t              startDirLen,
    const std::string&  destDir,
    const std::string&  hier,
    int                 mode ) {

    std::string physical_directory_prefix;
    if ( destDir.empty() ) {
        rodsLog( LOG_ERROR, "mkFileDirR called with empty dest directory" );
        return SYS_INVALID_INPUT_PARAM ;
    }
    if ( destDir.size() < startDirLen ) {
        rodsLog( LOG_ERROR, "mkFileDirR called with a destDir: [%s]"
                 "shorter than its startDirLen: [%ju]",
                 destDir.c_str(), ( uintmax_t )startDirLen );
        return SYS_INVALID_INPUT_PARAM;
    }
    if ( !rsComm ) {
        rodsLog( LOG_ERROR, "mkFileDirR called with null rsComm" );
        return SYS_INVALID_INPUT_PARAM;
    }
    if ( isValidFilePath( destDir ) ) {
        std::string vault_path;
        irods::error err = irods::get_vault_path_for_hier_string( hier, vault_path );
        if ( !err.ok() ) {
            rodsLog( LOG_ERROR, err.result().c_str() );
            return err.code();
        }

        if ( destDir.compare( 0, vault_path.size(), vault_path ) == 0 &&
                ( destDir[ vault_path.size() ] == '/' || destDir.size() == vault_path.size() ) ) {
            physical_directory_prefix = vault_path;
        }
    }

    std::vector< std::string > directories_to_create;

    std::string physical_directory = destDir;
    if ( physical_directory[ physical_directory.size() - 1 ] == '/' ) {
        physical_directory.erase( physical_directory.size() - 1 );
    }
    while ( physical_directory.size() > startDirLen ) {
        irods::collection_object_ptr tmp_coll_obj(
            new irods::collection_object(
                physical_directory,
                hier,
                0, 0 ) );
        struct stat statbuf;
        irods::error stat_err = fileStat(
                                    rsComm,
                                    tmp_coll_obj,
                                    &statbuf );
        if ( stat_err.code() >= 0 ) {
            if ( statbuf.st_mode & S_IFDIR ) {
                break;
            }
            else {
                rodsLog( LOG_NOTICE,
                         "mkFileDirR: A local non-directory %s already exists \n",
                         physical_directory.c_str() );
                return stat_err.code();
            }
        }
        else {
            directories_to_create.push_back( physical_directory.substr( physical_directory_prefix.size() ) );
        }

        /* Go backward */
        size_t index_of_last_slash = physical_directory.rfind( '/', physical_directory.size() - 1 );
        if ( std::string::npos != index_of_last_slash ) {
            physical_directory = physical_directory.substr( 0, index_of_last_slash );
        }
        else {
            break;
        }

    } // while

    std::string irods_directory_prefix = "/";
    irods_directory_prefix += getLocalZoneName();

    /* Now we go forward and make the required dir */
    while ( !directories_to_create.empty() ) {

        physical_directory = physical_directory_prefix;
        physical_directory += directories_to_create.back();

        std::string irods_directory = irods_directory_prefix;
        irods_directory += directories_to_create.back();

        directories_to_create.pop_back();

        irods::collection_object_ptr tmp_coll_obj(
            new irods::collection_object(
                physical_directory,
                hier,
                mode, 0 ) );

        irods::error mkdir_err = fileMkdir( rsComm, tmp_coll_obj );
        if ( !mkdir_err.ok() && ( getErrno( mkdir_err.code() ) != EEXIST ) ) { // JMC - backport 4834
            std::stringstream msg;
            msg << "fileMkdir for [";
            msg << physical_directory;
            msg << "]";
            irods::error ret_err = PASSMSG( msg.str(), mkdir_err );
            irods::log( ret_err );

            return  mkdir_err.code();
        }
    }
    return 0;
}
コード例 #5
0
 void VigenereDialog::update()
 {
     const bool enable = !keyEdit->text().isEmpty() && isValidFilePath(filePathEdit->text()) && isValidOutputPath(outputPathEdit->text());
     encryptButton->setEnabled(enable);
     decryptButton->setEnabled(enable);
 }