コード例 #1
0
int
rsModDataObjMeta( rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp ) {
    int status;
    rodsServerHost_t *rodsServerHost = NULL;
    dataObjInfo_t *dataObjInfo;

    dataObjInfo = modDataObjMetaInp->dataObjInfo;

    status = getAndConnRcatHost( rsComm, MASTER_RCAT, dataObjInfo->objPath,
                                 &rodsServerHost );
    if ( status < 0 || NULL == rodsServerHost ) { // JMC cppcheck - nullptr
        return( status );
    }
    if ( rodsServerHost->localFlag == LOCAL_HOST ) {
#ifdef RODS_CAT
        status = _rsModDataObjMeta( rsComm, modDataObjMetaInp );
#else
        status = SYS_NO_RCAT_SERVER_ERR;
#endif
    }
    else {
        status = rcModDataObjMeta( rodsServerHost->conn, modDataObjMetaInp );
    }

    if ( status >= 0 ) {
        status = _call_file_modified_for_modification( rsComm, modDataObjMetaInp );
    }

    return ( status );
}
コード例 #2
0
ファイル: isysmeta.c プロジェクト: DICE-UNC/iRODS-FUSE-Mod
/* perform the modify command to change the comment*/
int 
doModComment(rcComm_t *Conn, char *objPath, int numRepl, char *theComment) {
   int status;

   modDataObjMeta_t modDataObjMetaInp;
   keyValPair_t regParam;
   dataObjInfo_t dataObjInfo;

   memset (&regParam, 0, sizeof (regParam));
   addKeyVal (&regParam, DATA_COMMENTS_KW, theComment);

   memset(&dataObjInfo, 0, sizeof(dataObjInfo));
   rstrcpy(dataObjInfo.objPath, objPath, MAX_NAME_LEN);

   if (numRepl > 0) {
     dataObjInfo.replNum = numRepl;
   }
   else {
     addKeyVal(&regParam, ALL_KW, theComment);
   }

   modDataObjMetaInp.regParam = &regParam;
   modDataObjMetaInp.dataObjInfo = &dataObjInfo;

   status = rcModDataObjMeta(Conn, &modDataObjMetaInp);
   if (status) {
      rodsLogError(LOG_ERROR, status, "rcModDataObjMeta failure");
   }
   return(status);
}
コード例 #3
0
int
rsModDataObjMeta (rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp)
{
    int status;
    rodsServerHost_t *rodsServerHost = NULL;
    dataObjInfo_t *dataObjInfo;
    keyValPair_t *regParam;

    regParam = modDataObjMetaInp->regParam;
    dataObjInfo = modDataObjMetaInp->dataObjInfo;

    status = getAndConnRcatHost (rsComm, MASTER_RCAT, dataObjInfo->objPath,
      &rodsServerHost);
    if (status < 0) {
       return(status);
    }
    if (rodsServerHost->localFlag == LOCAL_HOST) {
#ifdef RODS_CAT
        status = _rsModDataObjMeta (rsComm, modDataObjMetaInp);
#else
        status = SYS_NO_RCAT_SERVER_ERR;
#endif
    } else {
        status = rcModDataObjMeta (rodsServerHost->conn, modDataObjMetaInp);
        if (getIrodsErrno (status) == SYS_HEADER_READ_LEN_ERR ||
          getIrodsErrno (status) == SYS_HEADER_WRITE_LEN_ERR) {
            /* this connection may be broken. try again */
            int status1 = svrToSvrReConnect (rsComm, rodsServerHost);
            if (status1 >= 0) {
                status = rcModDataObjMeta (rodsServerHost->conn, 
                  modDataObjMetaInp);
            }
        }

    }

    return (status);
}
コード例 #4
0
ファイル: isysmeta.c プロジェクト: DICE-UNC/iRODS-FUSE-Mod
/* perform the modify command to change the data_type*/
int 
doModDatatype(rcComm_t *Conn, char *objPath, char *dataType) {
   int status;

   modDataObjMeta_t modDataObjMetaInp;
   keyValPair_t regParam;
   dataObjInfo_t dataObjInfo;

   memset (&regParam, 0, sizeof (regParam));
   addKeyVal (&regParam, DATA_TYPE_KW, dataType);

   memset(&dataObjInfo, 0, sizeof(dataObjInfo));
   rstrcpy(dataObjInfo.objPath, objPath, MAX_NAME_LEN);

   modDataObjMetaInp.regParam = &regParam;
   modDataObjMetaInp.dataObjInfo = &dataObjInfo;

   status = rcModDataObjMeta(Conn, &modDataObjMetaInp);
   if (status) {
      rodsLogError(LOG_ERROR, status, "rcModDataObjMeta failure");
   }
   return(status);
}
コード例 #5
0
ファイル: iFuseOper.c プロジェクト: irods/irods-legacy
int
irodsChmod (const char *path, mode_t mode)
{
    int status;
    modDataObjMeta_t modDataObjMetaInp;
    keyValPair_t regParam;
    dataObjInfo_t dataObjInfo;
    char dataMode[SHORT_STR_LEN];
    pathCache_t *tmpPathCache;
    iFuseConn_t *iFuseConn = NULL;

    rodsLog (LOG_DEBUG, "irodsChmod: %s", path);

    matchAndLockPathCache((char *) path, &tmpPathCache);

    if (tmpPathCache->fileCache != NULL) {
        LOCK_STRUCT(*tmpPathCache->fileCache);
        if(tmpPathCache->fileCache->state == HAVE_NEWLY_CREATED_CACHE) {
            /* has not actually been created yet */
            tmpPathCache->fileCache->mode = mode;
            UNLOCK_STRUCT(*tmpPathCache->fileCache);
            UNLOCK_STRUCT(*tmpPathCache);
            return (0);
        }
        UNLOCK_STRUCT(*tmpPathCache->fileCache);
    }

    UNLOCK_STRUCT(*tmpPathCache);

    if(tmpPathCache->stbuf.st_nlink != 1) {
        rodsLog (LOG_NOTICE,
                 "irodsChmod: modification of the mode of non file object is currently not supported", path);

        return 0;
    }

    memset (&regParam, 0, sizeof (regParam));
    snprintf (dataMode, SHORT_STR_LEN, "%d", mode);
    addKeyVal (&regParam, DATA_MODE_KW, dataMode);
    addKeyVal (&regParam, ALL_KW, "");

    memset(&dataObjInfo, 0, sizeof(dataObjInfo));

    status = parseRodsPathStr ((char *) (path + 1) , &MyRodsEnv,
                               dataObjInfo.objPath);
    if (status < 0) {
        rodsLogError (LOG_ERROR, status,
                      "irodsChmod: parseRodsPathStr of %s error", path);
        /* use ENOTDIR for this type of error */
        return -ENOTDIR;
    }

    modDataObjMetaInp.regParam = &regParam;
    modDataObjMetaInp.dataObjInfo = &dataObjInfo;

    getAndUseIFuseConn (&iFuseConn, &MyRodsEnv);
    RECONNECT_IF_NECESSARY(status, iFuseConn, rcModDataObjMeta(iFuseConn->conn, &modDataObjMetaInp));
    if (status >= 0) {
#ifdef CACHE_FUSE_PATH
        pathCache_t *tmpPathCache;

        if (matchAndLockPathCache ((char *) path, &tmpPathCache) == 1) {
            tmpPathCache->stbuf.st_mode &= 0xfffffe00;
            tmpPathCache->stbuf.st_mode |= (mode & 0777);
            UNLOCK_STRUCT(*tmpPathCache);
        }
#endif
        status = 0;
    } else {
        rodsLogError(LOG_ERROR, status,
                     "irodsChmod: rcModDataObjMeta failure");
        status = -ENOENT;
    }

    unuseIFuseConn (iFuseConn);
    clearKeyVal (&regParam);

    return(status);
}