00001
00002
00003
00004
00005
00006 #include "userAdmin.h"
00007 #include "reGlobalsExtern.h"
00008 #include "icatHighLevelRoutines.h"
00009
00010 int
00011 rsUserAdmin (rsComm_t *rsComm, userAdminInp_t *userAdminInp )
00012 {
00013 rodsServerHost_t *rodsServerHost;
00014 int status;
00015
00016 rodsLog(LOG_DEBUG, "userAdmin");
00017
00018 status = getAndConnRcatHost(rsComm, MASTER_RCAT, NULL, &rodsServerHost);
00019 if (status < 0) {
00020 return(status);
00021 }
00022
00023 if (rodsServerHost->localFlag == LOCAL_HOST) {
00024 #ifdef RODS_CAT
00025 status = _rsUserAdmin (rsComm, userAdminInp);
00026 #else
00027 status = SYS_NO_RCAT_SERVER_ERR;
00028 #endif
00029 }
00030 else {
00031 status = rcUserAdmin(rodsServerHost->conn,
00032 userAdminInp);
00033 }
00034
00035 if (status < 0) {
00036 rodsLog (LOG_NOTICE,
00037 "rsUserAdmin: rcUserAdmin failed");
00038 }
00039 return (status);
00040 }
00041
00042 #ifdef RODS_CAT
00043 int
00044 _rsUserAdmin(rsComm_t *rsComm, userAdminInp_t *userAdminInp )
00045 {
00046 int status, status2;
00047
00048 char *args[MAX_NUM_OF_ARGS_IN_ACTION];
00049 char errString1[]=
00050 "rsUserAdmin:acPreProcForModifyUser error for %s and option %s,stat=%d";
00051 char errString2[]=
00052 "rsUserAdmin:acPreProcForModifyUserGroup error for %s and option %s,stat=%d";
00053 char errString3[]=
00054 "rsUserAdmin:acPostProcForModifyUserGroup error for %s and option %s,stat=%d";
00055
00056 int argc;
00057 ruleExecInfo_t rei2;
00058
00059 memset ((char*)&rei2, 0, sizeof (ruleExecInfo_t));
00060 rei2.rsComm = rsComm;
00061 if (rsComm != NULL) {
00062 rei2.uoic = &rsComm->clientUser;
00063 rei2.uoip = &rsComm->proxyUser;
00064 }
00065
00066 rodsLog (LOG_DEBUG,
00067 "_rsUserAdmin arg0=%s",
00068 userAdminInp->arg0);
00069
00070 if (strcmp(userAdminInp->arg0,"userpw")==0) {
00071 args[0] = userAdminInp->arg1;
00072 args[1] = userAdminInp->arg2;
00073 args[2] = userAdminInp->arg3;
00074 argc = 3;
00075 status2 = applyRuleArg("acPreProcForModifyUser",
00076 args,argc, &rei2, NO_SAVE_REI);
00077 if (status2 < 0) {
00078 if (rei2.status < 0) {
00079 status2 = rei2.status;
00080 }
00081 rodsLog (LOG_ERROR,
00082 userAdminInp->arg1,userAdminInp->arg2, status2);
00083 return status2;
00084 }
00085 status = chlModUser(rsComm,
00086 userAdminInp->arg1,
00087 userAdminInp->arg2,
00088 userAdminInp->arg3);
00089 if (status != 0) chlRollback(rsComm);
00090
00091 status2 = applyRuleArg("acPostProcForModifyUser",args,argc,
00092 &rei2,NO_SAVE_REI);
00093 if (status2 < 0) {
00094 if (rei2.status < 0) {
00095 status2 = rei2.status;
00096 }
00097 rodsLog (LOG_ERROR, errString1,
00098 userAdminInp->arg1,userAdminInp->arg2, status2);
00099 return status2;
00100 }
00101 return(status);
00102 }
00103 if (strcmp(userAdminInp->arg0,"modify")==0) {
00104 if (strcmp(userAdminInp->arg1,"group")==0) {
00105 args[0] = userAdminInp->arg2;
00106 args[1] = userAdminInp->arg3;
00107 args[2] = userAdminInp->arg4;
00108 args[3] = userAdminInp->arg5;
00109 argc = 4;
00110 status2 = applyRuleArg("acPreProcForModifyUserGroup",
00111 args,argc, &rei2, NO_SAVE_REI);
00112 if (status2 < 0) {
00113 if (rei2.status < 0) {
00114 status2 = rei2.status;
00115 }
00116 rodsLog (LOG_ERROR, errString2,args[0],args[1], status2);
00117 return status2;
00118 }
00119
00120 status = chlModGroup(rsComm, userAdminInp->arg2,
00121 userAdminInp->arg3, userAdminInp->arg4,
00122 userAdminInp->arg5);
00123 if (status == 0) {
00124 status2 = applyRuleArg("acPostProcForModifyUserGroup",args,argc,
00125 &rei2, NO_SAVE_REI);
00126 if (status2 < 0) {
00127 if (rei2.status < 0) {
00128 status2 = rei2.status;
00129 }
00130 rodsLog (LOG_ERROR, errString3, args[0],args[1], status2);
00131 return status2;
00132 }
00133 }
00134 return(status);
00135 }
00136 }
00137
00138
00139 if (strcmp(userAdminInp->arg0,"mkuser")==0) {
00140
00141 ruleExecInfo_t rei;
00142 char *args[2];
00143 userInfo_t userInfo;
00144 memset((char*)&rei,0,sizeof(rei));
00145 memset((char*)&userInfo,0,sizeof(userInfo));
00146 rei.rsComm = rsComm;
00147 strncpy(userInfo.userName, userAdminInp->arg1,
00148 sizeof userInfo.userName);
00149 strncpy(userInfo.userType, "rodsuser",
00150 sizeof userInfo.userType);
00151 rei.uoio = &userInfo;
00152 rei.uoic = &rsComm->clientUser;
00153 rei.uoip = &rsComm->proxyUser;
00154 status = applyRuleArg("acCreateUser", args, 0, &rei, SAVE_REI);
00155 if (status != 0) {
00156 chlRollback(rsComm);
00157 return(status);
00158 }
00159
00160 status = chlModUser(rsComm,
00161 userAdminInp->arg1,
00162 "password",
00163 userAdminInp->arg2);
00164 if (status != 0) chlRollback(rsComm);
00165 return(status);
00166 }
00167
00168 return(CAT_INVALID_ARGUMENT);
00169 }
00170 #endif