00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00024
00025
00026
00027
00028 #include <stdio.h>
00029 #include <stdlib.h>
00030 #include <malloc.h>
00031 #include <string.h>
00032
00033 #include "lcmaps_vo_data.h"
00034 #include "lcmaps_log.h"
00035
00036
00037
00038
00039 #define VO_DATA_WHITESPACE_CHARS " \t\n"
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00080 lcmaps_vo_data_t *
00081 lcmaps_createVoData(
00082 const char * vo,
00083 const char * group,
00084 const char * subgroup,
00085 const char * role,
00086 const char * capability
00087 )
00088 {
00089 lcmaps_vo_data_t * newVoData=NULL;
00090
00091 newVoData = (lcmaps_vo_data_t *)malloc(sizeof(lcmaps_vo_data_t));
00092 if (!newVoData)
00093 {
00094 lcmaps_log(0,"lcmaps_createVoData(): error in malloc for new VoData structure\n");
00095 return NULL;
00096 }
00097
00098 newVoData->vo = NULL;
00099 newVoData->group = NULL;
00100 newVoData->subgroup = NULL;
00101 newVoData->role = NULL;
00102 newVoData->capability = NULL;
00103
00104 if (vo) newVoData->vo = strdup(vo);
00105 if (group) newVoData->group = strdup(group);
00106 if (subgroup) newVoData->subgroup = strdup(subgroup);
00107 if (role) newVoData->role = strdup(role);
00108 if (capability) newVoData->capability = strdup(capability);
00109
00110 return newVoData;
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00140 int
00141 lcmaps_deleteVoData(
00142 lcmaps_vo_data_t ** vo_data
00143 )
00144 {
00145 if (!vo_data) {
00146 lcmaps_log(0, "lcmaps_deleteVoData(): empty pointer as input !\n");
00147 return -1;
00148 }
00149
00150 if ( (*vo_data) )
00151 {
00152 if ( (*vo_data)->vo) free( (*vo_data)->vo );
00153 if ( (*vo_data)->group) free( (*vo_data)->group );
00154 if ( (*vo_data)->subgroup) free( (*vo_data)->subgroup );
00155 if ( (*vo_data)->role) free( (*vo_data)->role );
00156 if ( (*vo_data)->capability) free( (*vo_data)->capability );
00157 free( (*vo_data) );
00158 }
00159 else
00160 {
00161 lcmaps_log_debug(2,"lcmaps_deleteVoData(): no lcmaps_vo_data_t found\n");
00162 }
00163 *vo_data=NULL;
00164 return 0;
00165 }
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00194 int
00195 lcmaps_cleanVoData(
00196 lcmaps_vo_data_t * vo_data
00197 )
00198 {
00199 if (!vo_data) {
00200 lcmaps_log(0, "lcmaps_cleanVoData():: no lcmaps_vo_data_t found\n");
00201 return -1;
00202 }
00203 else
00204 {
00205 if ( (vo_data)->vo)
00206 {
00207 free( (vo_data)->vo );
00208 vo_data->vo = NULL;
00209 }
00210 if ( (vo_data)->group)
00211 {
00212 free( (vo_data)->group );
00213 vo_data->group = NULL;
00214 }
00215 if ( (vo_data)->subgroup)
00216 {
00217 free( (vo_data)->subgroup );
00218 vo_data->subgroup = NULL;
00219 }
00220 if ( (vo_data)->role)
00221 {
00222 free( (vo_data)->role );
00223 vo_data->role = NULL;
00224 }
00225 if ( (vo_data)->capability)
00226 {
00227 free( (vo_data)->capability );
00228 vo_data->capability = NULL;
00229 }
00230 }
00231 return 0;
00232 }
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00262 int
00263 lcmaps_copyVoData(
00264 lcmaps_vo_data_t * dst_vo_data,
00265 const lcmaps_vo_data_t * src_vo_data
00266 )
00267 {
00268 if ( (dst_vo_data) && (src_vo_data) )
00269 {
00270 if (src_vo_data->vo)
00271 dst_vo_data->vo = strdup(src_vo_data->vo);
00272 else
00273 dst_vo_data->vo = NULL;
00274 if (src_vo_data->group)
00275 dst_vo_data->group = strdup(src_vo_data->group);
00276 else
00277 dst_vo_data->group = NULL;
00278 if (src_vo_data->subgroup)
00279 dst_vo_data->subgroup = strdup(src_vo_data->subgroup);
00280 else
00281 dst_vo_data->subgroup = NULL;
00282 if (src_vo_data->role)
00283 dst_vo_data->role = strdup(src_vo_data->role);
00284 else
00285 dst_vo_data->role = NULL;
00286 if (src_vo_data->capability)
00287 dst_vo_data->capability = strdup(src_vo_data->capability);
00288 else
00289 dst_vo_data->capability = NULL;
00290
00291 return 0;
00292 }
00293 else
00294 {
00295 return -1;
00296 }
00297 }
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00323 int
00324 lcmaps_printVoData(
00325 int debug_level,
00326 const lcmaps_vo_data_t * vo_data
00327 )
00328 {
00329 if (vo_data)
00330 {
00331 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): address of vo data struct: %p\n", vo_data);
00332 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): VO: %s\n", vo_data->vo);
00333 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): GROUP: %s\n", vo_data->group);
00334 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): SUBGROUP: %s\n", vo_data->subgroup);
00335 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): ROLE: %s\n", vo_data->role);
00336 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): CAPABILITY: %s\n", vo_data->capability);
00337 }
00338 else
00339 {
00340 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): empty pointer to vo data struct\n");
00341 }
00342 return 0;
00343 }
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00391 int
00392 lcmaps_stringVoData(
00393 const lcmaps_vo_data_t * vo_data,
00394 char * buffer,
00395 int nchars
00396 )
00397 {
00398 int totalchars;
00399 char * strptr=NULL;
00400 char * bufptr=NULL;
00401 int buflen=0;
00402
00403 bufptr=buffer;
00404 buflen=nchars;
00405
00406
00407 if ( vo_data->vo == NULL )
00408 {
00409 lcmaps_log(0,"lcmaps_stringVoData(): error no VO found\n");
00410 return -1;
00411 }
00412
00413 strptr=vo_data->vo;
00414 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00415 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00416 {
00417
00418
00419
00420
00421
00422 totalchars=snprintf(bufptr,(size_t)buflen,"/VO=%s",strptr);
00423 if ( (totalchars+1) > buflen )
00424 {
00425 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for VO\n");
00426 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00427 return -1;
00428 }
00429 else if ( totalchars < 0 )
00430 {
00431 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00432 return -1;
00433 }
00434 else
00435 {
00436 bufptr+=totalchars;
00437 buflen-=totalchars;
00438 }
00439 }
00440 else
00441 {
00442 lcmaps_log(0,"lcmaps_stringVoData(): error no VO found\n");
00443 return -1;
00444 }
00445
00446
00447 if ( vo_data->group == NULL )
00448 {
00449 lcmaps_log(0,"lcmaps_stringVoData(): error no VO-group found\n");
00450 return -1;
00451 }
00452
00453 strptr=vo_data->group;
00454 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00455 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00456 {
00457 totalchars=snprintf(bufptr,(size_t)buflen,"/GROUP=%s",strptr);
00458 if ( (totalchars+1) > buflen )
00459 {
00460 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for GROUP\n");
00461 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00462 return -1;
00463 }
00464 else if ( totalchars < 0 )
00465 {
00466 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00467 return -1;
00468 }
00469 else
00470 {
00471 bufptr+=totalchars;
00472 buflen-=totalchars;
00473 }
00474 }
00475 else
00476 {
00477 lcmaps_log(0,"lcmaps_stringVoData(): error no VO-group found\n");
00478 return -1;
00479 }
00480
00481
00482
00483
00484 if ( vo_data->role != NULL )
00485 {
00486
00487 strptr=vo_data->role;
00488 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00489 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00490 {
00491 totalchars=snprintf(bufptr,(size_t)buflen,"/ROLE=%s",strptr);
00492 if ( (totalchars+1) > buflen )
00493 {
00494 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for ROLE\n");
00495 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00496 return -1;
00497 }
00498 else if ( totalchars < 0 )
00499 {
00500 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00501 return -1;
00502 }
00503 else
00504 {
00505 bufptr+=totalchars;
00506 buflen-=totalchars;
00507 }
00508 }
00509 }
00510
00511
00512 if ( vo_data->capability != NULL )
00513 {
00514
00515 strptr=vo_data->capability;
00516 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00517 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00518 {
00519 totalchars=snprintf(bufptr,(size_t)buflen,"/CAPABILITY=%s",strptr);
00520 if ( (totalchars+1) > buflen )
00521 {
00522 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for CAPABILITY\n");
00523 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00524 return -1;
00525 }
00526 else if ( totalchars < 0 )
00527 {
00528 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00529 return -1;
00530 }
00531 else
00532 {
00533 bufptr+=totalchars;
00534 buflen-=totalchars;
00535 }
00536 }
00537 }
00538 return 0;
00539 }
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00576 lcmaps_vo_mapping_t *
00577 lcmaps_createVoMapping(
00578 const char * vo_data_string,
00579 const char * groupname,
00580 const gid_t gid
00581 )
00582 {
00583 lcmaps_vo_mapping_t * newVoMapping=NULL;
00584
00585 newVoMapping = (lcmaps_vo_mapping_t *)malloc(sizeof(lcmaps_vo_mapping_t));
00586 if (!newVoMapping)
00587 {
00588 lcmaps_log(0,"lcmaps_createVoMapping(): error in malloc for new VoMapping structure\n");
00589 return NULL;
00590 }
00591
00592 newVoMapping->vostring = NULL;
00593 newVoMapping->groupname = NULL;
00594 newVoMapping->gid = LCMAPS_NO_GID;
00595
00596 if (vo_data_string) newVoMapping->vostring = strdup(vo_data_string);
00597 if (vo_data_string) newVoMapping->groupname = strdup(groupname);
00598 if (gid) newVoMapping->gid = gid;
00599
00600 return newVoMapping;
00601 }
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00630 int
00631 lcmaps_deleteVoMapping(
00632 lcmaps_vo_mapping_t ** vo_mapping
00633 )
00634 {
00635 if (!vo_mapping) {
00636 lcmaps_log(0, "lcmaps_deleteVoMapping(): empty pointer as input !\n");
00637 return -1;
00638 }
00639
00640 if ( (*vo_mapping) )
00641 {
00642 if ( (*vo_mapping)->vostring) free( (*vo_mapping)->vostring );
00643 if ( (*vo_mapping)->groupname) free( (*vo_mapping)->groupname );
00644 free( (*vo_mapping) );
00645 }
00646 else
00647 {
00648 lcmaps_log_debug(2,"lcmaps_deleteVoMapping(): no lcmaps_vo_mapping_t found\n");
00649 }
00650 *vo_mapping=NULL;
00651 return 0;
00652 }
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00681 int
00682 lcmaps_cleanVoMapping(
00683 lcmaps_vo_mapping_t * vo_mapping
00684 )
00685 {
00686 if (!vo_mapping) {
00687 lcmaps_log(0, "lcmaps_cleanVoMapping():: no lcmaps_vo_mapping_t found\n");
00688 return -1;
00689 }
00690 else
00691 {
00692 if ( (vo_mapping)->vostring)
00693 {
00694 free( (vo_mapping)->vostring );
00695 vo_mapping->vostring = NULL;
00696 }
00697
00698 if ( (vo_mapping)->groupname)
00699 {
00700 free( (vo_mapping)->groupname );
00701 vo_mapping->groupname = NULL;
00702 }
00703 }
00704 return 0;
00705 }
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00735 int
00736 lcmaps_copyVoMapping(
00737 lcmaps_vo_mapping_t * dst_vo_mapping,
00738 const lcmaps_vo_mapping_t * src_vo_mapping
00739 )
00740 {
00741 if ( (dst_vo_mapping) && (src_vo_mapping) )
00742 {
00743 dst_vo_mapping->gid = src_vo_mapping->gid;
00744 if (src_vo_mapping->vostring)
00745 dst_vo_mapping->vostring = strdup(src_vo_mapping->vostring);
00746 else
00747 dst_vo_mapping->vostring = NULL;
00748
00749 if (src_vo_mapping->groupname)
00750 dst_vo_mapping->groupname = strdup(src_vo_mapping->groupname);
00751 else
00752 dst_vo_mapping->groupname = NULL;
00753
00754 return 0;
00755 }
00756 else
00757 {
00758 return -1;
00759 }
00760 }
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00786 int
00787 lcmaps_printVoMapping(
00788 int debug_level,
00789 const lcmaps_vo_mapping_t * vo_mapping
00790 )
00791 {
00792 if (vo_mapping)
00793 {
00794 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): address of vo mapping struct: %p\n", vo_mapping);
00795 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): VO string: %s\n", vo_mapping->vostring);
00796 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): mapped groupname: %s\n", vo_mapping->groupname);
00797 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): mapped GID: %d\n", (int)vo_mapping->gid);
00798 }
00799 else
00800 {
00801 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): empty pointer to vo mapping struct\n");
00802 }
00803 return 0;
00804 }
00805
00806
00807
00808
00809
00810
00811
00812