예제 #1
0
파일: iticket.cpp 프로젝트: cchapati/irods
/*
 Create, modify, or delete a ticket
 */
int
doTicketOp( char *arg1, char *arg2, char *arg3, char *arg4, char *arg5 ) {
    ticketAdminInp_t ticketAdminInp;
    int status;
    char *mySubName;
    char *myName;

    ticketAdminInp.arg1 = arg1;
    ticketAdminInp.arg2 = arg2;
    ticketAdminInp.arg3 = arg3;
    ticketAdminInp.arg4 = arg4;
    ticketAdminInp.arg5 = arg5;
    ticketAdminInp.arg6 = "";

    status = rcTicketAdmin( Conn, &ticketAdminInp );
    lastCommandStatus = status;

    if ( status < 0 ) {
        if ( Conn->rError ) {
            rError_t *Err;
            rErrMsg_t *ErrMsg;
            int i, len;
            Err = Conn->rError;
            len = Err->len;
            for ( i = 0; i < len; i++ ) {
                ErrMsg = Err->errMsg[i];
                rodsLog( LOG_ERROR, "Level %d: %s", i, ErrMsg->msg );
            }
        }
        myName = rodsErrorName( status, &mySubName );
        rodsLog( LOG_ERROR, "rcTicketAdmin failed with error %d %s %s",
                 status, myName, mySubName );
    }
    return status;
}
예제 #2
0
int
rsTicketAdmin (rsComm_t *rsComm, ticketAdminInp_t *ticketAdminInp )
{
    rodsServerHost_t *rodsServerHost;
    int status;

    rodsLog(LOG_DEBUG, "ticketAdmin");

    status = getAndConnRcatHost(rsComm, MASTER_RCAT, NULL, &rodsServerHost);
    if (status < 0) {
       return(status);
    }

    if (rodsServerHost->localFlag == LOCAL_HOST) {
#ifdef RODS_CAT
       status = _rsTicketAdmin (rsComm, ticketAdminInp);
#else
       status = SYS_NO_RCAT_SERVER_ERR;
#endif
    }
    else {
       if (strcmp(ticketAdminInp->arg1,"session")==0 ) {
	  ticketAdminInp->arg3 = rsComm->clientAddr;
       }
       status = rcTicketAdmin(rodsServerHost->conn,
                            ticketAdminInp);
    }

    if (status < 0) { 
       rodsLog (LOG_NOTICE,
                "rsTicketAdmin failed, error %d", status);
    }
    return (status);
}
예제 #3
0
int
setSessionTicket(rcComm_t *myConn, char *ticket) {
   ticketAdminInp_t ticketAdminInp;
   int status;

   ticketAdminInp.arg1 = "session";
   ticketAdminInp.arg2 = ticket;
   ticketAdminInp.arg3 = "";
   ticketAdminInp.arg4 = "";
   ticketAdminInp.arg5 = "";
   ticketAdminInp.arg6 = "";
   status = rcTicketAdmin(myConn, &ticketAdminInp);
   if (status != 0) {
      printf("set ticket error %d \n", status);
   }
   return(status);
}
예제 #4
0
int
rsTicketAdmin( rsComm_t *rsComm, ticketAdminInp_t *ticketAdminInp ) {
    rodsServerHost_t *rodsServerHost;
    int status;

    rodsLog( LOG_DEBUG, "ticketAdmin" );

    status = getAndConnRcatHost( rsComm, MASTER_RCAT, ( const char* )NULL, &rodsServerHost );
    if ( status < 0 ) {
        return status;
    }

    if ( rodsServerHost->localFlag == LOCAL_HOST ) {
        std::string svc_role;
        irods::error ret = get_catalog_service_role(svc_role);
        if(!ret.ok()) {
            irods::log(PASS(ret));
            return ret.code();
        }

        if( irods::CFG_SERVICE_ROLE_PROVIDER == svc_role ) {
            status = _rsTicketAdmin( rsComm, ticketAdminInp );
        } else if( irods::CFG_SERVICE_ROLE_CONSUMER == svc_role ) {
            status = SYS_NO_RCAT_SERVER_ERR;
        } else {
            rodsLog(
                LOG_ERROR,
                "role not supported [%s]",
                svc_role.c_str() );
            status = SYS_SERVICE_ROLE_NOT_SUPPORTED;
        }
    }
    else {
        if ( strcmp( ticketAdminInp->arg1, "session" ) == 0 ) {
            ticketAdminInp->arg3 = rsComm->clientAddr;
        }
        status = rcTicketAdmin( rodsServerHost->conn,
                                ticketAdminInp );
    }

    if ( status < 0 ) {
        rodsLog( LOG_NOTICE,
                 "rsTicketAdmin failed, error %d", status );
    }
    return status;
}