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, *t4;
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 t4 = t2+ pm[1].rm_so;
00280 t3 = t2+ pm[1].rm_eo;
00281 c = *t4;
00282 *t4 = '\0';
00283 fillMsParam( outValueParam, NULL, STR_MS_T, t2, NULL );
00284 *t4 = c;
00285 }
00286 }
00287 else
00288 fillMsParam( outValueParam, NULL, STR_MS_T, 0, NULL );
00289 regfree(&preg[0]);
00290 regfree(&preg[1]);
00291 free(pstr[0]);
00292 free(pstr[1]);
00293 return(0);
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
00341 int
00342 msiExtractTemplateMDFromBuf(msParam_t* bufParam, msParam_t* tagParam,
00343 msParam_t *metadataParam, ruleExecInfo_t *rei)
00344 {
00345
00346
00347 bytesBuf_t *metaObjBuf;
00348 tagStruct_t *tagValues;
00349 keyValPair_t *metaDataPairs;
00350
00351 int i,j;
00352
00353 regex_t preg[2];
00354 regmatch_t pm[2];
00355 char errbuff[100];
00356 char *t, *t1, *t2, *t3, *t4;
00357 char c;
00358
00359 RE_TEST_MACRO ("Loopback on msiExtractTemplateMetadata");
00360
00361 if (strcmp (bufParam->type,BUF_LEN_MS_T) != 0 ||
00362 bufParam->inpOutBuf == NULL)
00363 return(USER_PARAM_TYPE_ERR);
00364 if (strcmp (tagParam->type,TagStruct_MS_T) != 0)
00365 return(USER_PARAM_TYPE_ERR);
00366 tagValues = (tagStruct_t *) tagParam->inOutStruct;
00367 metaObjBuf = (bytesBuf_t *) bufParam->inpOutBuf;
00368 t = (char*)malloc(metaObjBuf->len + 1);
00369 t[metaObjBuf->len] = '\0';
00370 memcpy(t,metaObjBuf->buf,metaObjBuf->len);
00371 metaDataPairs = (keyValPair_t*)mallocAndZero(sizeof(keyValPair_t));
00372 t1 = t;
00373 for (i = 0; i < tagValues->len ; i++) {
00374 t1 = t;
00375 #ifdef BABABA
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
00403 #endif
00404 j = regcomp (&preg[0], tagValues->preTag[i], REG_EXTENDED);
00405 if (j != 0) {
00406 regerror (j,&preg[0],errbuff,sizeof(errbuff));
00407 rodsLog (LOG_NOTICE,"msiExtractTemplateMDFromBuf: Error in regcomp: %s\n",errbuff);
00408 return(INVALID_REGEXP);
00409 }
00410 j = regcomp (&preg[1], tagValues->postTag[i], REG_EXTENDED);
00411 if (j != 0) {
00412 regerror (j,&preg[1],errbuff,sizeof(errbuff));
00413 rodsLog (LOG_NOTICE,"msiExtractTemplateMDFromBuf: Error in regcomp: %s\n",errbuff);
00414 return(INVALID_REGEXP);
00415 }
00416 while (regexec(&preg[0], t1,1,&pm[0],0) == 0) {
00417 t2 = t1 + pm[0].rm_eo ;
00418 if (regexec(&preg[1],t2,1,&pm[1],0) != 0)
00419 break;
00420 t4 = t2+ pm[1].rm_so;
00421 t3 = t2+ pm[1].rm_eo;
00422 c = *t4;
00423 *t4 = '\0';
00424
00425 j = addKeyVal(metaDataPairs, tagValues->keyWord[i], t2);
00426 *t4 = c;
00427 if (j != 0)
00428 return(j);
00429 t1 = t3;
00430 if (*t1 == '\0')
00431 break;
00432 }
00433 regfree(&preg[0]);
00434 regfree(&preg[1]);
00435
00436 continue;
00437 }
00438
00439
00440 metadataParam->inOutStruct = (void *) metaDataPairs;
00441 metadataParam->type = (char *) strdup(KeyValPair_MS_T);
00442
00443 return(0);
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
00489 int
00490 msiAssociateKeyValuePairsToObj(msParam_t *metadataParam, msParam_t* objParam,
00491 msParam_t* typeParam,
00492 ruleExecInfo_t *rei)
00493 {
00494
00495
00496 char *objName;
00497 char *objType;
00498
00499 int i;
00500
00501 RE_TEST_MACRO ("Loopback on msiAssociateKeyValuePairsToObj");
00502
00503 if (strcmp (metadataParam->type,KeyValPair_MS_T) != 0)
00504 return(USER_PARAM_TYPE_ERR);
00505 if (strcmp (objParam->type,STR_MS_T) != 0)
00506 return(USER_PARAM_TYPE_ERR);
00507 if (strcmp (typeParam->type,STR_MS_T) != 0)
00508 return(USER_PARAM_TYPE_ERR);
00509 objName = (char *) objParam->inOutStruct;
00510 objType = (char *) typeParam->inOutStruct;
00511 i = addAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00512 (keyValPair_t *) metadataParam->inOutStruct);
00513 return(i);
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
00562 int
00563 msiSetKeyValuePairsToObj(msParam_t *metadataParam, msParam_t* objParam,
00564 msParam_t* typeParam,
00565 ruleExecInfo_t *rei)
00566 {
00567 char *objName;
00568 char *objType;
00569 int ret;
00570
00571 RE_TEST_MACRO ("Loopback on msiSetKeyValuePairsToObj");
00572
00573 if (strcmp(metadataParam->type, KeyValPair_MS_T) != 0)
00574 return(USER_PARAM_TYPE_ERR);
00575 if (strcmp(objParam->type, STR_MS_T) != 0)
00576 return(USER_PARAM_TYPE_ERR);
00577 if (strcmp(typeParam->type, STR_MS_T) != 0)
00578 return(USER_PARAM_TYPE_ERR);
00579 objName = (char *) objParam->inOutStruct;
00580 objType = (char *) typeParam->inOutStruct;
00581 ret = setAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00582 (keyValPair_t *) metadataParam->inOutStruct);
00583 return ret;
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
00622 int
00623 msiGetObjType(msParam_t *objParam, msParam_t *typeParam,
00624 ruleExecInfo_t *rei)
00625 {
00626
00627
00628 char *objName;
00629 char objType[MAX_NAME_LEN];
00630 int i;
00631
00632 RE_TEST_MACRO ("Loopback on msiGetObjType");
00633
00634 if (strcmp (objParam->type,STR_MS_T) != 0)
00635 return(USER_PARAM_TYPE_ERR);
00636 objName = (char *) objParam->inOutStruct;
00637
00638 i = getObjType(rei->rsComm, objName, objType);
00639 if (i < 0)
00640 return(i);
00641 typeParam->inOutStruct = (char *) strdup(objType);
00642 typeParam->type = (char *) strdup(STR_MS_T);
00643 return(0);
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
00692 int
00693 msiRemoveKeyValuePairsFromObj(msParam_t *metadataParam, msParam_t* objParam,
00694 msParam_t* typeParam,
00695 ruleExecInfo_t *rei)
00696 {
00697
00698 char *objName;
00699 char *objType;
00700
00701 int i;
00702
00703 RE_TEST_MACRO ("Loopback on msiRemoveKeyValuePairsFromObj");
00704
00705 if (strcmp (metadataParam->type,KeyValPair_MS_T) != 0)
00706 return(USER_PARAM_TYPE_ERR);
00707 if (strcmp (objParam->type,STR_MS_T) != 0)
00708 return(USER_PARAM_TYPE_ERR);
00709 if (strcmp (typeParam->type,STR_MS_T) != 0)
00710 return(USER_PARAM_TYPE_ERR);
00711 objName = (char *) objParam->inOutStruct;
00712 objType = (char *) typeParam->inOutStruct;
00713 i = removeAVUMetadataFromKVPairs (rei->rsComm, objName, objType,
00714 (keyValPair_t *) metadataParam->inOutStruct);
00715 return(i);
00716
00717 }
00718