00001
00002
00003
00004 #include "reGlobalsExtern.h"
00005 extern char *rmemmove (void *dest, void *src, int strLen, int maxLen);
00006
00007 static int staticVarNumber = 1;
00008
00009 int
00010 replaceArgVar( char *start, int size,
00011 char *args[MAX_NUM_OF_ARGS_IN_ACTION], int argc)
00012 {
00013 int i,j;
00014 char *t1, *t2;
00015
00016 t1 = start;
00017
00018 if (strstr(t1,"$ARG[") == t1) {
00019 t2 = t1+5;
00020 while (isdigit(*t2)) t2++;
00021 if (*t2 != ']')
00022 return(INPUT_ARG_NOT_WELL_FORMED_ERR);
00023 *t2 = '\0';
00024 j = atoi((char *)(t1+5));
00025 *t2 = ']';
00026 if (j >= argc)
00027 return(INPUT_ARG_OUT_OF_ARGC_RANGE_ERR);
00028 i = replaceStrValue(start,size,args[j], t2 - start + 1);
00029 return(i);
00030 }
00031 return(UNKNOWN_PARAM_IN_RULE_ERR);
00032 }
00033
00034 int
00035 replaceSessionVar(char *action, char *start, int size, ruleExecInfo_t *rei)
00036 {
00037 char varName[NAME_LEN];
00038 char *varMap;
00039 char *varValue;
00040 int i,nLen, vinx;
00041 char *t1;
00042
00043
00044
00045
00046
00047 varValue = NULL;
00048
00049 t1 = start + 1;
00050 while (isalnum(*t1) || *t1 == '_') t1++;
00051 nLen = t1 - (start + 1);
00052 if (nLen >= NAME_LEN )
00053 return(VARIABLE_NAME_TOO_LONG_ERR);
00054 strncpy(varName, (start + 1),nLen);
00055 varName[nLen] = '\0';
00056
00057 vinx = getVarMap(action,varName, &varMap, 0);
00058 while (vinx >= 0) {
00059 i = getVarValue(varMap, rei, &varValue);
00060 if (i >= 0) {
00061 i = replaceStrValue(start, size,varValue, nLen+1);
00062 free(varMap);
00063 if (varValue != NULL) free (varValue);
00064 return(i);
00065 }
00066 else if (i == NULL_VALUE_ERR) {
00067 free(varMap);
00068 vinx = getVarMap(action,varName, &varMap, vinx+1);
00069 }
00070 else {
00071 free(varMap);
00072 if (varValue != NULL) free (varValue);
00073 return(i);
00074 }
00075 }
00076 if (vinx < 0) {
00077 if (varValue != NULL) free (varValue);
00078 return(vinx);
00079 }
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 if (varValue != NULL) free (varValue);
00091 return(i);
00092 }
00093
00094 int
00095 replaceStarVar(char *action, char *start, int size, msParamArray_t *inMsParamArray)
00096 {
00097 char varName[NAME_LEN];
00098
00099 int i,nLen;
00100 char *t1;
00101 msParam_t *mP;
00102
00103 t1 = start + 1 ;
00104 while (isalnum(*t1) || *t1 == '_') t1++;
00105 nLen = t1 - start ;
00106 if (nLen >= NAME_LEN )
00107 return(VARIABLE_NAME_TOO_LONG_ERR);
00108 strncpy(varName, start ,nLen);
00109 varName[nLen] = '\0';
00110
00111 mP = getMsParamByLabel (inMsParamArray, varName);
00112 if (mP == NULL || mP->inOutStruct == NULL)
00113 return(0);
00114
00115
00116
00117 if (strcmp(mP->type, INT_MS_T) == 0)
00118 {
00119 i = replaceIntValue(start, size, *(int *)mP->inOutStruct, nLen);
00120 return (i);
00121 }
00122
00123
00124 if (strcmp(mP->type,STR_MS_T) != 0)
00125 return(0);
00126 i = replaceStrValue(start, size, (char *) mP->inOutStruct, nLen);
00127 return(i);
00128
00129 }
00130
00131 int
00132 replaceDataVar( char *start, int size, dataObjInfo_t *doi)
00133 {
00134 int i;
00135 char *t1;
00136
00137
00138 t1 = start + 1;
00139 if (strstr(t1,OBJ_PATH_KW) == t1) {
00140 if (doi->objPath == NULL)
00141 return(OBJPATH_EMPTY_IN_STRUCT_ERR);
00142 i = replaceStrValue(start,size,doi->objPath,strlen(OBJ_PATH_KW)+1);
00143 }
00144 else if (strstr(t1,RESC_NAME_KW) == t1) {
00145 if (doi->rescName == NULL)
00146 return(RESCNAME_EMPTY_IN_STRUCT_ERR);
00147 i = replaceStrValue(start,size,doi->rescName,strlen(RESC_NAME_KW)+1);
00148 }
00149 else if (strstr(t1,DEST_RESC_NAME_KW) == t1) {
00150 if (doi->destRescName == NULL)
00151 return(DESTRESCNAME_EMPTY_IN_STRUCT_ERR);
00152 i = replaceStrValue(start,size,doi->destRescName,strlen(DEST_RESC_NAME_KW)+1);
00153 }
00154 else if (strstr(t1,DEF_RESC_NAME_KW) == t1) {
00155 if (doi->destRescName == NULL)
00156 return(DESTRESCNAME_EMPTY_IN_STRUCT_ERR);
00157 i = replaceStrValue(start,size,doi->destRescName,strlen(DEF_RESC_NAME_KW)+1);
00158 }
00159 else if (strstr(t1,BACKUP_RESC_NAME_KW) == t1) {
00160 if (doi->backupRescName == NULL)
00161 return(BACKUPRESCNAME_EMPTY_IN_STRUCT_ERR);
00162 i = replaceStrValue(start,size,doi->backupRescName,strlen(BACKUP_RESC_NAME_KW)+1);
00163 }
00164 else if (strstr(t1,DATA_TYPE_KW) == t1) {
00165 if (doi->dataType == NULL)
00166 return(DATATYPE_EMPTY_IN_STRUCT_ERR);
00167 i = replaceStrValue(start,size,doi->dataType,strlen(DATA_TYPE_KW)+1);
00168 }
00169 else if (strstr(t1,DATA_SIZE_KW) == t1) {
00170 if (doi->dataSize == 0)
00171 return(DATASIZE_EMPTY_IN_STRUCT_ERR);
00172 i = replaceLongValue(start,size,doi->dataSize,strlen(DATA_SIZE_KW)+1);
00173 }
00174 else if (strstr(t1,CHKSUM_KW) == t1) {
00175 if (doi->chksum == NULL)
00176 return(CHKSUM_EMPTY_IN_STRUCT_ERR);
00177 i = replaceStrValue(start,size,doi->chksum,strlen(CHKSUM_KW)+1);
00178 }
00179 else if (strstr(t1,VERSION_KW) == t1) {
00180 if (doi->version == NULL)
00181 return(VERSION_EMPTY_IN_STRUCT_ERR);
00182 i = replaceStrValue(start,size,doi->version,strlen(VERSION_KW)+1);
00183 }
00184 else if (strstr(t1,FILE_PATH_KW) == t1) {
00185 if (doi->filePath == NULL)
00186 return(FILEPATH_EMPTY_IN_STRUCT_ERR);
00187 i = replaceStrValue(start,size,doi->filePath,strlen(FILE_PATH_KW)+1);
00188 }
00189 else if (strstr(t1,REPL_NUM_KW) == t1) {
00190 if (doi->replNum == 0)
00191 return(REPLNUM_EMPTY_IN_STRUCT_ERR);
00192 i = replaceIntValue(start,size,doi->replNum,strlen(REPL_NUM_KW)+1);
00193 }
00194 else if (strstr(t1,REPL_STATUS_KW) == t1) {
00195 if (doi->replStatus == 0)
00196 return(REPLSTATUS_EMPTY_IN_STRUCT_ERR);
00197 i = replaceIntValue(start,size,doi->replStatus,strlen(REPL_STATUS_KW)+1);
00198 }
00199 else if (strstr(t1,DATA_OWNER_KW) == t1) {
00200 if (doi->dataOwnerName == NULL)
00201 return(DATAOWNER_EMPTY_IN_STRUCT_ERR);
00202 i = replaceStrValue(start,size,doi->dataOwnerName,strlen(DATA_OWNER_KW)+1);
00203 }
00204 else if (strstr(t1,DATA_OWNER_ZONE_KW) == t1) {
00205 if (doi->dataOwnerZone == NULL)
00206 return(DATAOWNERZONE_EMPTY_IN_STRUCT_ERR);
00207 i = replaceStrValue(start,size,doi->dataOwnerZone,strlen(DATA_OWNER_ZONE_KW)+1);
00208 }
00209 else if (strstr(t1,DATA_EXPIRY_KW) == t1) {
00210 if (doi->dataExpiry == NULL)
00211 return(DATAEXPIRY_EMPTY_IN_STRUCT_ERR);
00212 i = replaceStrValue(start,size,doi->dataExpiry,strlen(DATA_EXPIRY_KW)+1);
00213 }
00214 else if (strstr(t1,DATA_COMMENTS_KW) == t1) {
00215 if (doi->dataComments == NULL)
00216 return(DATACOMMENTS_EMPTY_IN_STRUCT_ERR);
00217 i = replaceStrValue(start,size,doi->dataComments,strlen(DATA_COMMENTS_KW)+1);
00218 }
00219 else if (strstr(t1,DATA_CREATE_KW) == t1) {
00220 if (doi->dataCreate == NULL)
00221 return(DATACREATE_EMPTY_IN_STRUCT_ERR);
00222 i = replaceStrValue(start,size,doi->dataCreate,strlen(DATA_CREATE_KW)+1);
00223 }
00224 else if (strstr(t1,DATA_MODIFY_KW) == t1) {
00225 if (doi->dataModify == NULL)
00226 return(DATAMODIFY_EMPTY_IN_STRUCT_ERR);
00227 i = replaceStrValue(start,size,doi->dataModify,strlen(DATA_MODIFY_KW)+1);
00228 }
00229 else if (strstr(t1,DATA_ACCESS_KW) == t1) {
00230 if (doi->dataAccess == NULL)
00231 return(DATAACCESS_EMPTY_IN_STRUCT_ERR);
00232 i = replaceStrValue(start,size,doi->dataAccess,strlen(DATA_ACCESS_KW)+1);
00233 }
00234
00235 else if (strstr(t1,DATA_ACCESS_INX_KW) == t1) {
00236 if (doi->dataAccessInx == 0)
00237 return(DATAACCESSINX_EMPTY_IN_STRUCT_ERR);
00238 i = replaceIntValue(start,size,doi->dataAccessInx,strlen(DATA_ACCESS_INX_KW)+1);
00239 }
00240 else if (strstr(t1,DATA_ID_KW) == t1) {
00241 if (doi->dataId == 0)
00242 return(DATAID_EMPTY_IN_STRUCT_ERR);
00243 i = replaceIntValue(start,size,doi->dataId,strlen(DATA_ID_KW)+1);
00244 }
00245 else if (strstr(t1,COLL_ID_KW) == t1) {
00246 if (doi->collId == 0)
00247 return(COLLID_EMPTY_IN_STRUCT_ERR);
00248 #if 0
00249 i = replaceIntValue(start,size,doi->collId,strlen(COLL_ID_KW)+1);
00250 #endif
00251 i = replaceLongValue(start,size,doi->collId,strlen(COLL_ID_KW)+1);
00252 }
00253 else if (strstr(t1,RESC_GROUP_NAME_KW) == t1) {
00254 if (doi->rescGroupName == NULL)
00255 return(RESCGROUPNAME_EMPTY_IN_STRUCT_ERR);
00256 i = replaceStrValue(start,size,doi->rescGroupName,strlen(RESC_GROUP_NAME_KW)+1);
00257 }
00258 else if (strstr(t1,STATUS_STRING_KW) == t1) {
00259 if (doi->statusString == NULL)
00260 return(STATUSSTRING_EMPTY_IN_STRUCT_ERR);
00261 i = replaceStrValue(start,size,doi->statusString,strlen(STATUS_STRING_KW)+1);
00262 }
00263 else if (strstr(t1,DATA_MAP_ID_KW) == t1) {
00264 if (doi->dataMapId == 0)
00265 return(DATAMAPID_EMPTY_IN_STRUCT_ERR);
00266 i = replaceIntValue(start,size,doi->dataMapId,strlen(DATA_MAP_ID_KW)+1);
00267 }
00268 else
00269 return(UNKNOWN_PARAM_IN_RULE_ERR);
00270 return(i);
00271 }
00272
00273 int
00274 replaceUserVar( char *start, int size, userInfo_t *uoic, userInfo_t *uoip)
00275 {
00276 int i;
00277 char *t1;
00278
00279
00280 t1 = start + 1;
00281 if (strstr(t1,USER_NAME_CLIENT_KW) == t1) {
00282 if (uoic->userName == NULL)
00283 return(USERNAMECLIENT_EMPTY_IN_STRUCT_ERR);
00284 i = replaceStrValue(start,size,uoic->userName,strlen(USER_NAME_CLIENT_KW)+1);
00285 }
00286 else if (strstr(t1,RODS_ZONE_CLIENT_KW) == t1) {
00287 if (uoic->rodsZone == NULL)
00288 return(RODSZONECLIENT_EMPTY_IN_STRUCT_ERR);
00289 i = replaceStrValue(start,size,uoic->rodsZone,strlen(RODS_ZONE_CLIENT_KW)+1);
00290 }
00291 else if (strstr(t1,USER_TYPE_CLIENT_KW) == t1) {
00292 if (uoic->userType == NULL)
00293 return(USERTYPECLIENT_EMPTY_IN_STRUCT_ERR);
00294 i = replaceStrValue(start,size,uoic->userType,strlen(USER_TYPE_CLIENT_KW)+1);
00295 }
00296 else if (strstr(t1,HOST_CLIENT_KW) == t1) {
00297 if (uoic->authInfo.host == NULL)
00298 return(HOSTCLIENT_EMPTY_IN_STRUCT_ERR);
00299 i = replaceStrValue(start,size,uoic->authInfo.host,strlen(HOST_CLIENT_KW)+1);
00300 }
00301 else if (strstr(t1,AUTH_STR_CLIENT_KW) == t1) {
00302 if (uoic->authInfo.host == NULL)
00303 return(AUTHSTRCLIENT_EMPTY_IN_STRUCT_ERR);
00304 i = replaceStrValue(start,size,uoic->authInfo.authStr,strlen(AUTH_STR_CLIENT_KW)+1);
00305 }
00306 else if (strstr(t1,USER_AUTH_SCHEME_CLIENT_KW) == t1) {
00307 if (uoic->authInfo.authScheme == 0)
00308 return(USERAUTHSCHEMECLIENT_EMPTY_IN_STRUCT_ERR);
00309 i = replaceStrValue(start,size,uoic->authInfo.authScheme,
00310 strlen(USER_AUTH_SCHEME_CLIENT_KW)+1);
00311 }
00312 else if (strstr(t1,USER_INFO_CLIENT_KW) == t1) {
00313 if (uoic->userOtherInfo.userInfo == NULL)
00314 return(USERINFOCLIENT_EMPTY_IN_STRUCT_ERR);
00315 i = replaceStrValue(start,size,uoic->userOtherInfo.userInfo,strlen(USER_INFO_CLIENT_KW)+1);
00316 }
00317 else if (strstr(t1,USER_COMMENT_CLIENT_KW) == t1) {
00318 if (uoic->userOtherInfo.userComments == NULL)
00319 return(USERCOMMENTCLIENT_EMPTY_IN_STRUCT_ERR);
00320 i = replaceStrValue(start,size,uoic->userOtherInfo.userComments,
00321 strlen(USER_COMMENT_CLIENT_KW)+1);
00322 }
00323 else if (strstr(t1,USER_CREATE_CLIENT_KW) == t1) {
00324 if (uoic->userOtherInfo.userCreate == NULL)
00325 return(USERCREATECLIENT_EMPTY_IN_STRUCT_ERR);
00326 i = replaceStrValue(start,size,uoic->userOtherInfo.userCreate,
00327 strlen(USER_CREATE_CLIENT_KW)+1);
00328 }
00329 else if (strstr(t1,USER_MODIFY_CLIENT_KW) == t1) {
00330 if (uoic->userOtherInfo.userModify == NULL)
00331 return(USERMODIFYCLIENT_EMPTY_IN_STRUCT_ERR);
00332 i = replaceStrValue(start,size,uoic->userOtherInfo.userModify,
00333 strlen(USER_MODIFY_CLIENT_KW)+1);
00334 }
00335 else if (strstr(t1,USER_NAME_PROXY_KW) == t1) {
00336 if (uoip->userName == NULL)
00337 return(USERNAMEPROXY_EMPTY_IN_STRUCT_ERR);
00338 i = replaceStrValue(start,size,uoip->userName,strlen(USER_NAME_PROXY_KW)+1);
00339 }
00340 else if (strstr(t1,RODS_ZONE_PROXY_KW) == t1) {
00341 if (uoip->rodsZone == NULL)
00342 return(RODSZONEPROXY_EMPTY_IN_STRUCT_ERR);
00343 i = replaceStrValue(start,size,uoip->rodsZone,strlen(RODS_ZONE_PROXY_KW)+1);
00344 }
00345 else if (strstr(t1,USER_TYPE_PROXY_KW) == t1) {
00346 if (uoip->userType == NULL)
00347 return(USERTYPEPROXY_EMPTY_IN_STRUCT_ERR);
00348 i = replaceStrValue(start,size,uoip->userType,strlen(USER_TYPE_PROXY_KW)+1);
00349 }
00350 else if (strstr(t1,HOST_PROXY_KW) == t1) {
00351 if (uoip->authInfo.host == NULL)
00352 return(HOSTPROXY_EMPTY_IN_STRUCT_ERR);
00353 i = replaceStrValue(start,size,uoip->authInfo.host,strlen(HOST_PROXY_KW)+1);
00354 }
00355 else if (strstr(t1,AUTH_STR_PROXY_KW) == t1) {
00356 if (uoip->authInfo.authStr == NULL)
00357 return(AUTHSTRPROXY_EMPTY_IN_STRUCT_ERR);
00358 i = replaceStrValue(start,size,uoip->authInfo.authStr,strlen(AUTH_STR_PROXY_KW)+1);
00359 }
00360 else if (strstr(t1,USER_AUTH_SCHEME_PROXY_KW) == t1) {
00361 if (uoip->authInfo.authScheme == 0)
00362 return(USERAUTHSCHEMEPROXY_EMPTY_IN_STRUCT_ERR);
00363 i = replaceStrValue(start,size,uoip->authInfo.authScheme,
00364 strlen(USER_AUTH_SCHEME_PROXY_KW)+1);
00365 }
00366 else if (strstr(t1,USER_INFO_PROXY_KW) == t1) {
00367 if (uoip->userOtherInfo.userInfo == NULL)
00368 return(USERINFOPROXY_EMPTY_IN_STRUCT_ERR);
00369 i = replaceStrValue(start,size,uoip->userOtherInfo.userInfo,strlen(USER_INFO_PROXY_KW)+1);
00370 }
00371 else if (strstr(t1,USER_COMMENT_PROXY_KW) == t1) {
00372 if (uoip->userOtherInfo.userComments == NULL)
00373 return(USERCOMMENTPROXY_EMPTY_IN_STRUCT_ERR);
00374 i = replaceStrValue(start,size,uoip->userOtherInfo.userComments,
00375 strlen(USER_COMMENT_PROXY_KW)+1);
00376 }
00377 else if (strstr(t1,USER_CREATE_PROXY_KW) == t1) {
00378 if (uoip->userOtherInfo.userCreate == NULL)
00379 return(USERCREATEPROXY_EMPTY_IN_STRUCT_ERR);
00380 i = replaceStrValue(start,size,uoip->userOtherInfo.userCreate,
00381 strlen(USER_CREATE_PROXY_KW)+1);
00382 }
00383 else if (strstr(t1,USER_MODIFY_PROXY_KW) == t1) {
00384 if (uoip->userOtherInfo.userModify == NULL)
00385 return(USERMODIFYPROXY_EMPTY_IN_STRUCT_ERR);
00386 i = replaceStrValue(start,size,uoip->userOtherInfo.userModify,
00387 strlen(USER_MODIFY_PROXY_KW)+1);
00388 }
00389 else
00390 return(UNKNOWN_PARAM_IN_RULE_ERR);
00391 return(i);
00392 }
00393
00394
00395
00396 int
00397 replaceCollVar( char *start, int size, collInfo_t *coi)
00398 {
00399 int i;
00400 char *t1;
00401
00402
00403 t1 = start + 1;
00404 if (strstr(t1,COLL_NAME_KW) == t1) {
00405 if (coi->collName == NULL)
00406 return(COLLNAME_EMPTY_IN_STRUCT_ERR);
00407 i = replaceStrValue(start,size,coi->collName,strlen(COLL_NAME_KW)+1);
00408 }
00409 else if (strstr(t1,COLL_PARENT_NAME_KW) == t1) {
00410 if (coi->collParentName == NULL)
00411 return(COLLPARENTNAME_EMPTY_IN_STRUCT_ERR);
00412 i = replaceStrValue(start,size,coi->collParentName,strlen(COLL_PARENT_NAME_KW)+1);
00413 }
00414 else if (strstr(t1,COLL_OWNER_NAME_KW) == t1) {
00415 if (coi->collOwnerName == NULL)
00416 return(COLLOWNERNAME_EMPTY_IN_STRUCT_ERR);
00417 i = replaceStrValue(start,size,coi->collOwnerName,strlen(COLL_OWNER_NAME_KW)+1);
00418 }
00419 else if (strstr(t1,COLL_OWNER_ZONE_KW) == t1) {
00420 if (coi->collOwnerZone == NULL)
00421 return(COLLOWNERZONE_EMPTY_IN_STRUCT_ERR);
00422 i = replaceStrValue(start,size,coi->collOwnerZone,strlen(COLL_OWNER_ZONE_KW)+1);
00423 }
00424 else if (strstr(t1,COLL_EXPIRY_KW) == t1) {
00425 if (coi->collExpiry == NULL)
00426 return(COLLEXPIRY_EMPTY_IN_STRUCT_ERR);
00427 i = replaceStrValue(start,size,coi->collExpiry,strlen(COLL_EXPIRY_KW)+1);
00428 }
00429 else if (strstr(t1,COLL_COMMENTS_KW) == t1) {
00430 if (coi->collComments == NULL)
00431 return(COLLCOMMENTS_EMPTY_IN_STRUCT_ERR);
00432 i = replaceStrValue(start,size,coi->collComments,strlen(COLL_COMMENTS_KW)+1);
00433 }
00434 else if (strstr(t1,COLL_CREATE_KW) == t1) {
00435 if (coi->collCreate == NULL)
00436 return(COLLCREATE_EMPTY_IN_STRUCT_ERR);
00437 i = replaceStrValue(start,size,coi->collCreate,strlen(COLL_CREATE_KW)+1);
00438 }
00439 else if (strstr(t1,COLL_MODIFY_KW) == t1) {
00440 if (coi->collModify == NULL)
00441 return(COLLMODIFY_EMPTY_IN_STRUCT_ERR);
00442 i = replaceStrValue(start,size,coi->collModify,strlen(COLL_MODIFY_KW)+1);
00443 }
00444 else if (strstr(t1,COLL_ACCESS_KW) == t1) {
00445 if (coi->collAccess == NULL)
00446 return(COLLACCESS_EMPTY_IN_STRUCT_ERR);
00447 i = replaceStrValue(start,size,coi->collAccess,strlen(COLL_ACCESS_KW)+1);
00448 }
00449 else if (strstr(t1,COLL_ACCESS_INX_KW) == t1) {
00450 if (coi->collAccessInx == 0)
00451 return(COLLACCESSINX_EMPTY_IN_STRUCT_ERR);
00452 i = replaceIntValue(start,size,coi->collAccessInx,strlen(COLL_ACCESS_INX_KW)+1);
00453 }
00454 else if (strstr(t1,COLL_ID_KW) == t1) {
00455 if (coi->collId == 0)
00456 return(COLLID_EMPTY_IN_STRUCT_ERR);
00457 #if 0
00458 i = replaceIntValue(start,size,coi->collId,strlen(COLL_ID_KW)+1);
00459 #endif
00460 i = replaceLongValue(start,size,coi->collId,strlen(COLL_ID_KW)+1);
00461 }
00462 else if (strstr(t1,COLL_MAP_ID_KW) == t1) {
00463 if (coi->collMapId == 0)
00464 return(COLLMAPID_EMPTY_IN_STRUCT_ERR);
00465 i = replaceIntValue(start,size,coi->collMapId,strlen(COLL_MAP_ID_KW)+1);
00466 }
00467 else if (strstr(t1,COLL_INHERITANCE_KW) == t1) {
00468 if (coi->collInheritance == NULL)
00469 return(COLLINHERITANCE_EMPTY_IN_STRUCT_ERR);
00470 i = replaceStrValue(start,size,coi->collInheritance,strlen(COLL_INHERITANCE_KW)+1);
00471 }
00472
00473 else
00474 return(UNKNOWN_PARAM_IN_RULE_ERR);
00475 return(i);
00476 }
00477
00478
00479
00480 int
00481 replaceRescVar( char *start, int size, rescInfo_t *roi)
00482 {
00483 int i;
00484 char *t1;
00485
00486
00487 t1 = start + 1;
00488
00489 if (strstr(t1,RESC_NAME_KW) == t1) {
00490 if (roi->rescName == NULL)
00491 return(RESCNAME_EMPTY_IN_STRUCT_ERR);
00492 i = replaceStrValue(start,size,roi->rescName,strlen(RESC_NAME_KW)+1);
00493 }
00494 else if (strstr(t1,RESC_ZONE_KW) == t1) {
00495 if (roi->zoneName == NULL)
00496 return(RESCZONE_EMPTY_IN_STRUCT_ERR);
00497 i = replaceStrValue(start,size,roi->zoneName,strlen(RESC_ZONE_KW)+1);
00498 }
00499 else if (strstr(t1,RESC_LOC_KW) == t1) {
00500 if (roi->rescLoc == NULL)
00501 return(RESCLOC_EMPTY_IN_STRUCT_ERR);
00502 i = replaceStrValue(start,size,roi->rescLoc,strlen(RESC_LOC_KW)+1);
00503 }
00504 else if (strstr(t1,RESC_TYPE_KW) == t1) {
00505 if (roi->rescType == NULL)
00506 return(RESCTYPE_EMPTY_IN_STRUCT_ERR);
00507 i = replaceStrValue(start,size,roi->rescType,strlen(RESC_TYPE_KW)+1);
00508 }
00509 else if (strstr(t1,RESC_TYPE_INX_KW) == t1) {
00510 if (roi->rescTypeInx == 0)
00511 return(RESCTYPEINX_EMPTY_IN_STRUCT_ERR);
00512 i = replaceIntValue(start,size,roi->rescTypeInx,strlen(RESC_TYPE_INX_KW)+1);
00513 }
00514 else if (strstr(t1,RESC_CLASS_KW) == t1) {
00515 if (roi->rescClass == NULL)
00516 return(RESCCLASS_EMPTY_IN_STRUCT_ERR);
00517 i = replaceStrValue(start,size,roi->rescClass,strlen(RESC_CLASS_KW)+1);
00518 }
00519 else if (strstr(t1,RESC_CLASS_INX_KW) == t1) {
00520 if (roi->rescClassInx == 0)
00521 return(RESCCLASSINX_EMPTY_IN_STRUCT_ERR);
00522 i = replaceIntValue(start,size,roi->rescClassInx,strlen(RESC_CLASS_INX_KW)+1);
00523 }
00524 else if (strstr(t1,RESC_VAULT_PATH_KW) == t1) {
00525 if (roi->rescVaultPath == NULL)
00526 return(RESCVAULTPATH_EMPTY_IN_STRUCT_ERR);
00527 i = replaceStrValue(start,size,roi->rescVaultPath,strlen(RESC_VAULT_PATH_KW)+1);
00528 }
00529 else if (strstr(t1,RESC_STATUS_KW) == t1) {
00530 i = replaceIntValue(start,size,roi->rescStatus,strlen(RESC_STATUS_KW)+1);
00531 }
00532 else if (strstr(t1,PARA_OPR_KW) == t1) {
00533 if (roi->paraOpr == 0)
00534 return(PARAOPR_EMPTY_IN_STRUCT_ERR);
00535 i = replaceIntValue(start,size,roi->paraOpr,strlen(PARA_OPR_KW)+1);
00536 }
00537 else if (strstr(t1,RESC_ID_KW) == t1) {
00538 if (roi->rescId == 0)
00539 return(RESCID_EMPTY_IN_STRUCT_ERR);
00540 #if 0
00541 i = replaceIntValue(start,size,roi->rescId,strlen(RESC_ID_KW)+1);
00542 #endif
00543 i = replaceLongValue(start,size,roi->rescId,strlen(RESC_ID_KW)+1);
00544 }
00545 else if (strstr(t1,GATEWAY_ADDR_KW) == t1) {
00546 if (roi->gateWayAddr == NULL)
00547 return(GATEWAYADDR_EMPTY_IN_STRUCT_ERR);
00548 i = replaceStrValue(start,size,roi->gateWayAddr,strlen(GATEWAY_ADDR_KW)+1);
00549 }
00550 else if (strstr(t1,RESC_MAX_OBJ_SIZE_KW) == t1) {
00551 if (roi->rescMaxObjSize == 0)
00552 return(RESCMAX_BJSIZE_EMPTY_IN_STRUCT_ERR);
00553 i = replaceLongValue(start,size,roi->rescMaxObjSize,strlen(RESC_MAX_OBJ_SIZE_KW)+1);
00554 }
00555 else if (strstr(t1,FREE_SPACE_KW) == t1) {
00556 if (roi->freeSpace == 0)
00557 return(FREESPACE_EMPTY_IN_STRUCT_ERR);
00558 i = replaceLongValue(start,size,roi->freeSpace,strlen(FREE_SPACE_KW)+1);
00559 }
00560 else if (strstr(t1,FREE_SPACE_TIME_KW) == t1) {
00561 if (roi->freeSpaceTime == 0)
00562 return(FREESPACETIME_EMPTY_IN_STRUCT_ERR);
00563 i = replaceLongValue(start,size,roi->freeSpaceTime,strlen(FREE_SPACE_TIME_KW)+1);
00564 }
00565 else if (strstr(t1,FREE_SPACE_TIMESTAMP_KW) == t1) {
00566 if (roi->freeSpaceTimeStamp == NULL)
00567 return(FREESPACETIMESTAMP_EMPTY_IN_STRUCT_ERR);
00568 i = replaceStrValue(start,size,roi->freeSpaceTimeStamp,strlen(FREE_SPACE_TIMESTAMP_KW)+1);
00569 }
00570 else if (strstr(t1,RESC_INFO_KW) == t1) {
00571 if (roi->rescInfo == NULL)
00572 return(RESCINFO_EMPTY_IN_STRUCT_ERR);
00573 i = replaceStrValue(start,size,roi->rescInfo,strlen(RESC_INFO_KW)+1);
00574 }
00575 else if (strstr(t1,RESC_COMMENTS_KW) == t1) {
00576 if (roi->rescComments == NULL)
00577 return(RESCCOMMENTS_EMPTY_IN_STRUCT_ERR);
00578 i = replaceStrValue(start,size,roi->rescComments,strlen(RESC_COMMENTS_KW)+1);
00579 }
00580 else if (strstr(t1,RESC_CREATE_KW) == t1) {
00581 if (roi->rescCreate == NULL)
00582 return(RESCCREATE_EMPTY_IN_STRUCT_ERR);
00583 i = replaceStrValue(start,size,roi->rescCreate,strlen(RESC_CREATE_KW)+1);
00584 }
00585 else if (strstr(t1,RESC_MODIFY_KW) == t1) {
00586 if (roi->rescModify == NULL)
00587 return(RESCMODIFY_EMPTY_IN_STRUCT_ERR);
00588 i = replaceStrValue(start,size,roi->rescModify,strlen(RESC_MODIFY_KW)+1);
00589 }
00590 else
00591 return(UNKNOWN_PARAM_IN_RULE_ERR);
00592 return(i);
00593 }
00594
00595 int
00596 isNumber(char *s)
00597 {
00598 unsigned int i;
00599
00600 for (i = 0; i < strlen(s); i++) {
00601 if (!isdigit(s[i]) && s[i] != '.' && s[i] != '-' && s[i] != '+')
00602 return(0);
00603 }
00604 return(1);
00605
00606 }
00607
00608 int
00609 isLogical(char *s)
00610 {
00611 if (!strcmp(s,"&&") || !strcmp(s,"%%"))
00612 return(1);
00613 else
00614 return(0);
00615 }
00616
00617 int
00618 beginOpr(char *e,char **eoper) {
00619
00620 if (strncmp(e," && ",4) == 0 ||
00621 strncmp(e," %% ",4) == 0 ||
00622 strncmp(e," >= ",4) == 0 ||
00623 strncmp(e," <= ",4) == 0 ||
00624 strncmp(e," == ",4) == 0 ||
00625 strncmp(e," ++ ",4) == 0 ||
00626 strncmp(e," != ",4) == 0 ) {
00627 *eoper = e + 4;
00628 return(1);
00629 }
00630 if (strncmp(e," < ",3) == 0 ||
00631 strncmp(e," > ",3) == 0 ||
00632 strncmp(e," + ",3) == 0 ||
00633 strncmp(e," - ",3) == 0 ||
00634 strncmp(e," * ",3) == 0 ||
00635 strncmp(e," / ",3) == 0 ) {
00636 *eoper = e + 3;
00637 return(1);
00638 }
00639 if (strncmp(e," not like ",10) == 0 ) {
00640 *eoper = e + 10;
00641 return(1);
00642 }
00643 if (strncmp(e," like ",6) == 0) {
00644 *eoper = e + 6;
00645 return(1);
00646 }
00647 *eoper = NULL;
00648 return(0);
00649 }
00650
00651 int
00652 splitExpression(char *expr, char *expr1, char *expr2, char *oper)
00653 {
00654
00655 int found;
00656 char *e, *t, *t1;
00657 char t2;
00658 found = 0;
00659 e = expr;
00660 while (found == 0) {
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683 t = e;
00684 while (beginOpr(t,&t1) == 0) {
00685 t++;
00686 if( *t == '\0')
00687 break;
00688 }
00689 if (*t != '\0') {
00690 *t = '\0';
00691 t1--;
00692 t2 = *t1;
00693 *t1 = '\0';
00694 if (goodExpr(expr) == 0 && goodExpr(t1+1) == 0) {
00695 strcpy(expr1,expr);
00696 strcpy(expr2,t1+1);
00697 strcpy(oper,t+1);
00698 *t = ' ';
00699 *t1 = t2;
00700 found = 1;
00701 }
00702 else {
00703 *t = ' ';
00704 *t1 = t2;
00705 e = t1+1;
00706 }
00707 }
00708 else {
00709 strcpy(expr1,expr);
00710 strcpy(expr2,"");
00711 strcpy(oper,"");
00712 found = 1;
00713 }
00714 }
00715 trimWS(expr1);
00716 if (expr1[0] == '(' && expr1[strlen(expr1)-1] == ')') {
00717 expr1[0] = ' ';
00718 expr1[strlen(expr1)-1] ='\0';
00719 if (goodExpr(expr1) != 0) {
00720 expr1[0] = '(';
00721 expr1[strlen(expr1)] =')';
00722 }
00723 trimWS(expr1);
00724 }
00725 trimWS(expr2);
00726 if (expr2[0] == '(' && expr2[strlen(expr2)-1] == ')') {
00727 expr2[0] = ' ';
00728 expr2[strlen(expr2)-1] ='\0';
00729 if (goodExpr(expr2) != 0) {
00730 expr2[0] = '(';
00731 expr2[strlen(expr2)] =')';
00732 }
00733 trimWS(expr2);
00734 }
00735 trimWS(oper);
00736 return(0);
00737 }
00738
00739 int
00740 goodExpr(char *expr)
00741 {
00742 int qcnt = 0;
00743 int qqcnt = 0;
00744 int bcnt = 0;
00745 int i = 0;
00746 int inq = 0;
00747 int inqq = 0;
00748 while(expr[i] != '\0') {
00749 if(expr[i] == '\\') {
00750
00751 if(expr[i+1] != '\0') {
00752 switch(expr[i+1])
00753 {
00754 case '\'':
00755 case '\"':
00756 case '\\':
00757
00758 i+=2;
00759 continue;
00760 }
00761 }
00762 }
00763 if (inq) {
00764 if (expr[i] == '\'') { inq--; qcnt++;}
00765 }
00766 else if (inqq) {
00767 if (expr[i] == '"') { inqq--; qqcnt++;}
00768 }
00769 else if (expr[i] == '\'') { inq++; qcnt++; }
00770 else if (expr[i] == '"') { inqq++; qqcnt++; }
00771 else if (expr[i] == '(') bcnt++;
00772 else if (expr[i] == ')')
00773 if (bcnt > 0) bcnt--;
00774 i++;
00775 }
00776 if (bcnt != 0 || qcnt % 2 != 0 || qqcnt % 2 != 0 )
00777 return(-1);
00778 return(0);
00779
00780 }
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806 int
00807 insertEscape(char *escaped_string, char *val) {
00808 int len = strlen(val);
00809 int i=0;
00810 int j=0;
00811 while(i<len) {
00812 if(j>=MAX_COND_LEN-2) {
00813 return SYS_COPY_LEN_ERR;
00814 }
00815
00816 switch(val[i]) {
00817 case '\"':
00818 case '\'':
00819 case '\\':
00820
00821 escaped_string[j++] = '\\';
00822 escaped_string[j++] = val[i++];
00823 break;
00824 default:
00825
00826 escaped_string[j++] = val[i++];
00827 }
00828 }
00829 escaped_string[j] = '\0';
00830 return 0;
00831 }
00832 int
00833 replaceStrValue(char *start, int size, char *val, int paramLen)
00834 {
00835 char escaped_string[MAX_COND_LEN];
00836 if(insertEscape(escaped_string, val) == SYS_COPY_LEN_ERR)
00837 return SYS_COPY_LEN_ERR;
00838 int vl,sl;
00839
00840 vl = strlen(escaped_string);
00841 sl = strlen(start);
00842
00843 if (rmemmove((char*)(start+ vl),(char *) (start+paramLen),
00844 sl-paramLen+1,size - vl) == NULL)
00845 return(SYS_COPY_LEN_ERR);
00846 if (rmemmove(start,escaped_string,vl,vl) == NULL)
00847 return(SYS_COPY_LEN_ERR);
00848 return(0);
00849 }
00850 int
00851 replaceIntValue(char *start, int size, int inval, int paramLen)
00852 {
00853 char val[MAX_NAME_LEN];
00854
00855 sprintf(val,"%i",inval);
00856 return(replaceStrValue(start,size,val,paramLen));
00857 }
00858
00859 int
00860 replaceLongValue(char *start, int size, rodsLong_t inval, int paramLen)
00861 {
00862 char val[MAX_NAME_LEN];
00863
00864 sprintf(val,"%lld",inval);
00865 return(replaceStrValue(start,size,val,paramLen));
00866 }
00867
00868 int
00869 replaceULongValue(char *start, int size, rodsULong_t inval, int paramLen)
00870 {
00871 char val[MAX_NAME_LEN];
00872
00873 sprintf(val,"%llu",inval);
00874 return(replaceStrValue(start,size,val,paramLen));
00875 }
00876
00877 int
00878 isAFunction(char *s)
00879 {
00880 char *t;
00881 int i;
00882 if ((t = strstr(s,"(")) != NULL) {
00883 *t = '\0';
00884 #ifdef USE_EIRODS
00885 eirods::ms_table_entry entry;
00886 i = actionTableLookUp( entry, s );
00887 #else
00888 i = actionTableLookUp(s);
00889 #endif
00890 *t = '(';
00891 if (i < 0)
00892 return(0);
00893 else
00894 return(1);
00895 }
00896 return(0);
00897
00898 }
00899
00900 int
00901 getNextValueAndBufFromListOrStruct(char *typ, void *inPtr,
00902 void **value, bytesBuf_t **buf, void **restPtr, int *inx, char **outtyp)
00903 {
00904 int i,j;
00905
00906 if (!strcmp(typ,STR_MS_T)) {
00907
00908 char *s;
00909 s = (char *) inPtr;
00910 while (*s != '\0' && (*s != ',' || (*(s-1) == '\\' && *(s-2) != '\\')) ) s++;
00911 if (*s != '\0') {
00912 *s = '\0';
00913 *value = strdup((char*)inPtr);
00914 *s = ',';
00915 *restPtr = s+1;
00916 }
00917 else {
00918 *value = strdup((char*)inPtr);
00919 *restPtr = NULL;
00920 }
00921
00922 trimWS((char*)(*value));
00923 return(0);
00924 }
00925 else if (!strcmp(typ,StrArray_MS_T)) {
00926 strArray_t *strA;
00927
00928 strA = (strArray_t *) inPtr;
00929 if (*inx >= strA->len) {
00930 *restPtr = NULL;
00931 return(NO_VALUES_FOUND);
00932 }
00933 *value = (void *) strdup( (char *) &strA->value[(*inx) * strA->size]);
00934 (*inx) = (*inx) + 1;
00935 *restPtr = inPtr;
00936 return(0);
00937 }
00938 else if (!strcmp(typ,IntArray_MS_T)) {
00939 intArray_t *intA;
00940 int *ii;
00941 intA = (intArray_t *) inPtr;
00942 if (*inx >= intA->len) {
00943 *restPtr = NULL;
00944 return(NO_VALUES_FOUND);
00945 }
00946 ii = (int*)malloc(sizeof(int));
00947 *ii = intA->value[(*inx)];
00948 *value = ii;
00949 (*inx) = (*inx) + 1;
00950 *restPtr = inPtr;
00951 return(0);
00952 }
00953 else if (!strcmp(typ,GenQueryOut_MS_T)) {
00954
00955
00956 keyValPair_t *k;
00957 genQueryOut_t *g;
00958 char *cname, *aval;
00959 sqlResult_t *v;
00960 g = (genQueryOut_t *) inPtr;
00961 if (g->rowCnt == 0) {
00962 *restPtr = NULL;
00963 return(NO_VALUES_FOUND);
00964 }
00965 if (*inx >= g->rowCnt) {
00966 *restPtr = NULL;
00967 return(NO_VALUES_FOUND);
00968 }
00969
00970 if (*inx == 0) {
00971 k = (keyValPair_t*)malloc(sizeof(keyValPair_t));
00972 memset (k, 0, sizeof (keyValPair_t));
00973 *outtyp = strdup(KeyValPair_MS_T);
00974 for (i = 0; i < g->attriCnt; i++) {
00975 v = &g->sqlResult[i];
00976 cname = (char *) getAttrNameFromAttrId(v->attriInx);
00977 aval = v->value;
00978 j = addKeyVal (k, cname,aval);
00979 if (j < 0)
00980 return(j);
00981 }
00982 *value = k;
00983 }
00984 else {
00985 k = (keyValPair_t*)*value;
00986 for (i = 0; i < g->attriCnt; i++) {
00987 v = &g->sqlResult[i];
00988
00989 aval = &v->value[v->len * (*inx)];
00990 k->value[i] = (char *) strdup(aval);
00991 }
00992 }
00993 (*inx) = (*inx) + 1;
00994 *restPtr = inPtr;
00995 return(0);
00996 }
00997 else if (!strcmp(typ,DataObjInp_MS_T)) {
00998 return(0);
00999 }
01000 else
01001 return(USER_PARAM_TYPE_ERR);
01002 }
01003
01004 int
01005 freeNextValueStruct(void **value,char *typ, char *flag)
01006 {
01007
01008 int i;
01009
01010 if (*value == NULL)
01011 return(0);
01012
01013 if (!strcmp(typ,STR_MS_T) ||
01014 !strcmp(typ,StrArray_MS_T) ||
01015 !strcmp(typ,IntArray_MS_T) ){
01016 free(*value);
01017 *value = NULL;
01018 }
01019 else if (!strcmp(typ,GenQueryOut_MS_T)) {
01020 keyValPair_t *k;
01021 k = (keyValPair_t*)*value;
01022 for ( i = 0; i < k->len; i++)
01023 free(k->value[i]);
01024 if (!strcmp(flag,"all")) {
01025 for ( i = 0; i < k->len; i++)
01026 free(k->keyWord[i]);
01027 free(*value);
01028 *value = NULL;
01029 }
01030 }
01031 else
01032 return(USER_PARAM_TYPE_ERR);
01033 return(0);
01034 }
01035
01036 int
01037 getNewVarName(char *v, msParamArray_t *msParamArray)
01038 {
01039
01040
01041 sprintf(v,"*RNDVAR%i",staticVarNumber);
01042 staticVarNumber++;
01043
01044 while (getMsParamByLabel (msParamArray, v) != NULL) {
01045 sprintf(v,"*RNDVAR%i",staticVarNumber);
01046 staticVarNumber++;
01047 }
01048
01049
01050 return(0);
01051 }
01052
01053 int
01054 removeTmpVarName(msParamArray_t *msParamArray)
01055 {
01056
01057 int i;
01058
01059 for (i = 0; i < msParamArray->len; i++) {
01060 if (strncmp(msParamArray->msParam[i]->label, "*RNDVAR",7) == 0)
01061 rmMsParamByLabel (msParamArray,msParamArray->msParam[i]->label, 1);
01062 }
01063 return(0);
01064
01065 }
01066
01067 int
01068 isStarVariable(char *str)
01069 {
01070 char *t;
01071
01072 if (str[0] != '*')
01073 return(FALSE);
01074
01075 t = str+1;
01076 while (isalnum(*t) || *t == '_') t++;
01077 while(isspace(*t)) t++;
01078 if (*t != '\0')
01079 return(FALSE);
01080 else
01081 return(TRUE);
01082 }
01083
01084 int
01085 carryOverMsParam(msParamArray_t *sourceMsParamArray,msParamArray_t *targetMsParamArray)
01086 {
01087
01088 int i;
01089 msParam_t *mP, *mPt;
01090 char *a, *b;
01091 if (sourceMsParamArray == NULL)
01092 return(0);
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114 for (i = 0; i < sourceMsParamArray->len ; i++) {
01115 mPt = sourceMsParamArray->msParam[i];
01116 if ((mP = getMsParamByLabel (targetMsParamArray, mPt->label)) != NULL) {
01117 a = mP->label;
01118 b = mP->type;
01119 mP->label = NULL;
01120 mP->type = NULL;
01121
01122 free(mP->inpOutBuf);
01123 replMsParam(mPt,mP);
01124 free(mP->label);
01125 mP->label = a;
01126 free(mP->type);
01127 mP->type = b;
01128 }
01129 else
01130 addMsParamToArray(targetMsParamArray,
01131 mPt->label, mPt->type, mPt->inOutStruct, mPt->inpOutBuf, 1);
01132 }
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181 return(0);
01182 }
01183