00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "reGlobalsExtern.h"
00010 #include "objMetaOpr.h"
00011 #include "miscServerFunct.h"
00012
00013 #if defined(solaris_platform)
00014 #include <libgen.h>
00015 #endif
00016
00017
00018
00019 #include <regex.h>
00020
00021
00022 extern char *__loc1;
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 int
00065 msiReadMDTemplateIntoTagStruct(msParam_t* bufParam, msParam_t* tagParam, ruleExecInfo_t *rei)
00066 {
00067
00068 bytesBuf_t *tmplObjBuf;
00069 tagStruct_t *tagValues;
00070
00071 char *t, *t1, *t2, *t3, *t4, *t5, *t6, *t7, *t8;
00072
00073
00074
00075
00076 int i,j;
00077
00078 regex_t preg[4];
00079 regmatch_t pm[4];
00080 char errbuff[100];
00081
00082 RE_TEST_MACRO ("Loopback on msiReadMDTemplateIntoTagStruct");
00083
00084 if (strcmp (bufParam->type,BUF_LEN_MS_T) != 0 ||
00085 bufParam->inpOutBuf == NULL)
00086 return(USER_PARAM_TYPE_ERR);
00087 tmplObjBuf = (bytesBuf_t *) bufParam->inpOutBuf;
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 j = regcomp (&preg[0], "<PRETAG>", REG_EXTENDED);
00103 if (j != 0) {
00104 regerror (j,&preg[0],errbuff,sizeof(errbuff));
00105 rodsLog (LOG_NOTICE,"msiReadMDTemplateIntoTagStruct: Error in regcomp: %s\n",errbuff);
00106 return(INVALID_REGEXP);
00107 }
00108 j = regcomp (&preg[1], "</PRETAG>", REG_EXTENDED);
00109 if (j != 0) {
00110 regerror (j,&preg[1],errbuff,sizeof(errbuff));
00111 rodsLog (LOG_NOTICE,"msiReadMDTemplateIntoTagStruct: Error in regcomp: %s\n",errbuff);
00112 return(INVALID_REGEXP);
00113 }
00114 j = regcomp (&preg[2], "<POSTTAG>", REG_EXTENDED);
00115 if (j != 0) {
00116 regerror (j,&preg[2],errbuff,sizeof(errbuff));
00117 rodsLog (LOG_NOTICE,"msiReadMDTemplateIntoTagStruct: Error in regcomp: %s\n",errbuff);
00118 return(INVALID_REGEXP);
00119 }
00120 j = regcomp (&preg[3], "</POSTTAG>", REG_EXTENDED);
00121 if (j != 0) {
00122 regerror (j,&preg[3],errbuff,sizeof(errbuff));
00123 rodsLog (LOG_NOTICE,"msiReadMDTemplateIntoTagStruct: Error in regcomp: %s\n",errbuff);
00124 return(INVALID_REGEXP);
00125 }
00126
00127 t = (char*)malloc(tmplObjBuf->len + 1);
00128 t[tmplObjBuf->len] = '\0';
00129 memcpy(t,tmplObjBuf->buf,tmplObjBuf->len);
00130 tagValues = (tagStruct_t*)mallocAndZero(sizeof(tagStruct_t));
00131 tagValues->len = 0;
00132 t1 = t;
00133 #ifdef BABABA
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 #endif
00158 while (regexec(&preg[0], t1,1,&pm[0],0) == 0) {
00159 t2 = t1 + pm[0].rm_eo ;
00160 if (regexec(&preg[1],t2,1,&pm[1],0) != 0)
00161 break;
00162 t3 = t2 + pm[1].rm_eo ;
00163 t6 = t2 + pm[1].rm_so;
00164 *t6 = '\0';
00165 if (regexec(&preg[2],t3,1,&pm[2],0) != 0)
00166 break;
00167 t5 = t3 + pm[2].rm_eo ;
00168 t4 = t3 + pm[2].rm_so;
00169 *t4 = '\0';
00170 if (regexec(&preg[3],t5,1,&pm[3],0) != 0)
00171 break;
00172 t7 = t5 + pm[3].rm_eo;
00173 t8 = t5 + pm[3].rm_so;
00174 *t8 = '\0';
00175
00176 i = addTagStruct (tagValues, t2, t5, t3);
00177 if (i != 0)
00178 return(i);
00179 t1 = t7;
00180 if (*t1 == '\0')
00181 break;
00182 }
00183
00184
00185
00186
00187
00188
00189
00190 regfree(&preg[0]);
00191 regfree(&preg[1]);
00192 regfree(&preg[2]);
00193 regfree(&preg[3]);
00194 free(t);
00195
00196 if (tagValues->len == 0)
00197 return(NO_VALUES_FOUND);
00198
00199 tagParam->inOutStruct = (void *) tagValues;
00200 tagParam->type = (char *) strdup(TagStruct_MS_T);
00201
00202 return(0);
00203
00204 }
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243 int msiGetTaggedValueFromString(msParam_t *inTagParam, msParam_t *inStrParam,
00244 msParam_t *outValueParam, ruleExecInfo_t *rei)
00245 {
00246
00247
00248 int j;
00249 regex_t preg[2];
00250 regmatch_t pm[2];
00251 char errbuff[100];
00252 char *pstr[2];
00253 char *t1, *t2, *t3;
00254 char c;
00255
00256 t1 = (char *) inStrParam->inOutStruct;
00257 pstr[0] = (char *) malloc(strlen((char*)inTagParam->inOutStruct) + 6 );
00258 pstr[1] = (char *) malloc(strlen((char*)inTagParam->inOutStruct) + 6 );
00259 sprintf(pstr[0], "<%s>", (char *) inTagParam->inOutStruct);
00260 j = regcomp (&preg[0], pstr[0], REG_EXTENDED);
00261 if (j != 0) {
00262 regerror (j,&preg[0],errbuff,sizeof(errbuff));
00263 rodsLog (LOG_NOTICE,"msiGetTaggedValueFromString: Error in regcomp: %s\n",errbuff);
00264 return(INVALID_REGEXP);
00265 }
00266 sprintf(pstr[1], "</%s>", (char *) inTagParam->inOutStruct);
00267 j = regcomp (&preg[1], pstr[1], REG_EXTENDED);
00268 if (j != 0) {
00269 regerror (j,&preg[1],errbuff,sizeof(errbuff));
00270 rodsLog (LOG_NOTICE,"msiGetTaggedValueFromString: Error in regcomp: %s\n",errbuff);
00271 return(INVALID_REGEXP);
00272 }
00273
00274 if (regexec(&preg[0], t1,1,&pm[0],0) == 0) {
00275 t2 = t1 + pm[0].rm_eo ;
00276 if (regexec(&preg[1],t2,1,&pm[1],0) != 0)
00277 fillMsParam( outValueParam, NULL, STR_MS_T, 0, NULL );
00278 else {
00279 t3 = t2+ pm[1].rm_so;
00280 c = *t3;
00281 *t3 = '\0';
00282 fillMsParam( outValueParam, NULL, STR_MS_T, t2, NULL );
00283 *t3 = c;
00284 }
00285 }
00286 else
00287 fillMsParam( outValueParam, NULL, STR_MS_T, 0, NULL );
00288 regfree(&preg[0]);
00289 regfree(&preg[1]);
00290 free(pstr[0]);
00291 free(pstr[1]);
00292 return(0);
00293 }
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340 int
00341 msiExtractTemplateMDFromBuf(msParam_t* bufParam, msParam_t* tagParam,
00342 msParam_t *metadataParam, ruleExecInfo_t *rei)
00343 {
00344
00345
00346 bytesBuf_t *metaObjBuf;
00347 tagStruct_t *tagValues;
00348 keyValPair_t *metaDataPairs;
00349
00350 int i,j;
00351
00352 regex_t preg[2];
00353 regmatch_t pm[2];
00354 char errbuff[100];
00355 char *t, *t1, *t2, *t3, *t4;
00356 char c;
00357
00358 RE_TEST_MACRO ("Loopback on msiExtractTemplateMetadata");
00359
00360 if (strcmp (bufParam->type,BUF_LEN_MS_T) != 0 ||
00361 bufParam->inpOutBuf == NULL)
00362 return(USER_PARAM_TYPE_ERR);
00363 if (strcmp (tagParam->type,TagStruct_MS_T) != 0)
00364 return(USER_PARAM_TYPE_ERR);
00365 tagValues = (tagStruct_t *) tagParam->inOutStruct;
00366 metaObjBuf = (bytesBuf_t *) bufParam->inpOutBuf;
00367 t = (char*)malloc(metaObjBuf->len + 1);
00368 t[metaObjBuf->len] = '\0';
00369 memcpy(t,metaObjBuf->buf,metaObjBuf->len);
00370 metaDataPairs = (keyValPair_t*)mallocAndZero(sizeof(keyValPair_t));
00371 t1 = t;
00372 for (i = 0; i < tagValues->len ; i++) {
00373 t1 = t;
00374 #ifdef BABABA
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402 #endif
00403 j = regcomp (&preg[0], tagValues->preTag[i], REG_EXTENDED);
00404 if (j != 0) {
00405 regerror (j,&preg[0],errbuff,sizeof(errbuff));
00406 rodsLog (LOG_NOTICE,"msiExtractTemplateMDFromBuf: Error in regcomp: %s\n",errbuff);
00407 return(INVALID_REGEXP);
00408 }
00409 j = regcomp (&preg[1], tagValues->postTag[i], REG_EXTENDED);
00410 if (j != 0) {
00411 regerror (j,&preg[1],errbuff,sizeof(errbuff));
00412 rodsLog (LOG_NOTICE,"msiExtractTemplateMDFromBuf: Error in regcomp: %s\n",errbuff);
00413 return(INVALID_REGEXP);
00414 }
00415 while (regexec(&preg[0], t1,1,&pm[0],0) == 0) {
00416 t2 = t1 + pm[0].rm_eo ;
00417 if (regexec(&preg[1],t2,1,&pm[1],0) != 0)
00418 break;
00419 t4 = t2+ pm[1].rm_so;
00420 t3 = t2+ pm[1].rm_eo;
00421 c = *t4;
00422 *t4 = '\0';
00423
00424 j = addKeyVal(metaDataPairs, tagValues->keyWord[i], t2);
00425 *t4 = c;
00426 if (j != 0)
00427 return(j);
00428 t1 = t3;
00429 if (*t1 == '\0')
00430 break;
00431 }
00432 regfree(&preg[0]);
00433 regfree(&preg[1]);
00434
00435 continue;
00436 }
00437
00438
00439 metadataParam->inOutStruct = (void *) metaDataPairs;
00440 metadataParam->type = (char *) strdup(KeyValPair_MS_T);
00441
00442 return(0);
00443 }
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488 int
00489 msiAssociateKeyValuePairsToObj(msParam_t *metadataParam, msParam_t* objParam,
00490 msParam_t* typeParam,
00491 ruleExecInfo_t *rei)
00492 {
00493
00494
00495 char *objName;
00496 char *objType;
00497
00498 int i;
00499
00500 RE_TEST_MACRO ("Loopback on msiAssociateKeyValuePairsToObj");
00501
00502 if (strcmp (metadataParam->type,KeyValPair_MS_T) != 0)
00503 return(USER_PARAM_TYPE_ERR);
00504 if (strcmp (objParam->type,STR_MS_T) != 0)
00505 return(USER_PARAM_TYPE_ERR);
00506 if (strcmp (typeParam->type,STR_MS_T) != 0)
00507 return(USER_PARAM_TYPE_ERR);
00508 objName = (char *) objParam->inOutStruct;
00509 objType = (char *) typeParam->inOutStruct;
00510 i = addAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00511 (keyValPair_t *) metadataParam->inOutStruct);
00512 return(i);
00513
00514 }
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561 int
00562 msiSetKeyValuePairsToObj(msParam_t *metadataParam, msParam_t* objParam,
00563 msParam_t* typeParam,
00564 ruleExecInfo_t *rei)
00565 {
00566 char *objName;
00567 char *objType;
00568 int ret;
00569
00570 RE_TEST_MACRO ("Loopback on msiSetKeyValuePairsToObj");
00571
00572 if (strcmp(metadataParam->type, KeyValPair_MS_T) != 0)
00573 return(USER_PARAM_TYPE_ERR);
00574 if (strcmp(objParam->type, STR_MS_T) != 0)
00575 return(USER_PARAM_TYPE_ERR);
00576 if (strcmp(typeParam->type, STR_MS_T) != 0)
00577 return(USER_PARAM_TYPE_ERR);
00578 objName = (char *) objParam->inOutStruct;
00579 objType = (char *) typeParam->inOutStruct;
00580 ret = setAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00581 (keyValPair_t *) metadataParam->inOutStruct);
00582 return ret;
00583
00584 }
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621 int
00622 msiGetObjType(msParam_t *objParam, msParam_t *typeParam,
00623 ruleExecInfo_t *rei)
00624 {
00625
00626
00627 char *objName;
00628 char objType[MAX_NAME_LEN];
00629 int i;
00630
00631 RE_TEST_MACRO ("Loopback on msiGetObjType");
00632
00633 if (strcmp (objParam->type,STR_MS_T) != 0)
00634 return(USER_PARAM_TYPE_ERR);
00635 objName = (char *) objParam->inOutStruct;
00636
00637 i = getObjType(rei->rsComm, objName, objType);
00638 if (i < 0)
00639 return(i);
00640 typeParam->inOutStruct = (char *) strdup(objType);
00641 typeParam->type = (char *) strdup(STR_MS_T);
00642 return(0);
00643 }
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691 int
00692 msiRemoveKeyValuePairsFromObj(msParam_t *metadataParam, msParam_t* objParam,
00693 msParam_t* typeParam,
00694 ruleExecInfo_t *rei)
00695 {
00696
00697 char *objName;
00698 char *objType;
00699
00700 int i;
00701
00702 RE_TEST_MACRO ("Loopback on msiRemoveKeyValuePairsFromObj");
00703
00704 if (strcmp (metadataParam->type,KeyValPair_MS_T) != 0)
00705 return(USER_PARAM_TYPE_ERR);
00706 if (strcmp (objParam->type,STR_MS_T) != 0)
00707 return(USER_PARAM_TYPE_ERR);
00708 if (strcmp (typeParam->type,STR_MS_T) != 0)
00709 return(USER_PARAM_TYPE_ERR);
00710 objName = (char *) objParam->inOutStruct;
00711 objType = (char *) typeParam->inOutStruct;
00712 i = removeAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00713 (keyValPair_t *) metadataParam->inOutStruct);
00714 return(i);
00715
00716 }
00717