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