00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00031
00032
00033
00034
00035 #include <stdio.h>
00036 #include <stdlib.h>
00037 #include <malloc.h>
00038 #include <string.h>
00039
00040 #include "lcmaps_vo_data.h"
00041 #include "lcmaps_log.h"
00042
00043
00044
00045
00046 #define VO_DATA_WHITESPACE_CHARS " \t\n"
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00087 lcmaps_vo_data_t *
00088 lcmaps_createVoData(
00089 const char * vo,
00090 const char * group,
00091 const char * subgroup,
00092 const char * role,
00093 const char * capability
00094 )
00095 {
00096 lcmaps_vo_data_t * newVoData=NULL;
00097
00098 newVoData = (lcmaps_vo_data_t *)malloc(sizeof(lcmaps_vo_data_t));
00099 if (!newVoData)
00100 {
00101 lcmaps_log(0,"lcmaps_createVoData(): error in malloc for new VoData structure\n");
00102 return NULL;
00103 }
00104
00105 newVoData->vo = NULL;
00106 newVoData->group = NULL;
00107 newVoData->subgroup = NULL;
00108 newVoData->role = NULL;
00109 newVoData->capability = NULL;
00110
00111 if (vo) newVoData->vo = strdup(vo);
00112 if (group) newVoData->group = strdup(group);
00113 if (subgroup) newVoData->subgroup = strdup(subgroup);
00114 if (role) newVoData->role = strdup(role);
00115 if (capability) newVoData->capability = strdup(capability);
00116
00117 return newVoData;
00118 }
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00147 int
00148 lcmaps_deleteVoData(
00149 lcmaps_vo_data_t ** vo_data
00150 )
00151 {
00152 if (!vo_data) {
00153 lcmaps_log(0, "lcmaps_deleteVoData(): empty pointer as input !\n");
00154 return -1;
00155 }
00156
00157 if ( (*vo_data) )
00158 {
00159 if ( (*vo_data)->vo) free( (*vo_data)->vo );
00160 if ( (*vo_data)->group) free( (*vo_data)->group );
00161 if ( (*vo_data)->subgroup) free( (*vo_data)->subgroup );
00162 if ( (*vo_data)->role) free( (*vo_data)->role );
00163 if ( (*vo_data)->capability) free( (*vo_data)->capability );
00164 free( (*vo_data) );
00165 }
00166 else
00167 {
00168 lcmaps_log_debug(2,"lcmaps_deleteVoData(): no lcmaps_vo_data_t found\n");
00169 }
00170 *vo_data=NULL;
00171 return 0;
00172 }
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00201 int
00202 lcmaps_cleanVoData(
00203 lcmaps_vo_data_t * vo_data
00204 )
00205 {
00206 if (!vo_data) {
00207 lcmaps_log(0, "lcmaps_cleanVoData():: no lcmaps_vo_data_t found\n");
00208 return -1;
00209 }
00210 else
00211 {
00212 if ( (vo_data)->vo)
00213 {
00214 free( (vo_data)->vo );
00215 vo_data->vo = NULL;
00216 }
00217 if ( (vo_data)->group)
00218 {
00219 free( (vo_data)->group );
00220 vo_data->group = NULL;
00221 }
00222 if ( (vo_data)->subgroup)
00223 {
00224 free( (vo_data)->subgroup );
00225 vo_data->subgroup = NULL;
00226 }
00227 if ( (vo_data)->role)
00228 {
00229 free( (vo_data)->role );
00230 vo_data->role = NULL;
00231 }
00232 if ( (vo_data)->capability)
00233 {
00234 free( (vo_data)->capability );
00235 vo_data->capability = NULL;
00236 }
00237 }
00238 return 0;
00239 }
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00269 int
00270 lcmaps_copyVoData(
00271 lcmaps_vo_data_t * dst_vo_data,
00272 const lcmaps_vo_data_t * src_vo_data
00273 )
00274 {
00275 if ( (dst_vo_data) && (src_vo_data) )
00276 {
00277 if (src_vo_data->vo)
00278 dst_vo_data->vo = strdup(src_vo_data->vo);
00279 else
00280 dst_vo_data->vo = NULL;
00281 if (src_vo_data->group)
00282 dst_vo_data->group = strdup(src_vo_data->group);
00283 else
00284 dst_vo_data->group = NULL;
00285 if (src_vo_data->subgroup)
00286 dst_vo_data->subgroup = strdup(src_vo_data->subgroup);
00287 else
00288 dst_vo_data->subgroup = NULL;
00289 if (src_vo_data->role)
00290 dst_vo_data->role = strdup(src_vo_data->role);
00291 else
00292 dst_vo_data->role = NULL;
00293 if (src_vo_data->capability)
00294 dst_vo_data->capability = strdup(src_vo_data->capability);
00295 else
00296 dst_vo_data->capability = NULL;
00297
00298 return 0;
00299 }
00300 else
00301 {
00302 return -1;
00303 }
00304 }
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00330 int
00331 lcmaps_printVoData(
00332 int debug_level,
00333 const lcmaps_vo_data_t * vo_data
00334 )
00335 {
00336 if (vo_data)
00337 {
00338 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): address of vo data struct: %p\n", vo_data);
00339 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): VO: %s\n", vo_data->vo);
00340 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): GROUP: %s\n", vo_data->group);
00341 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): SUBGROUP: %s\n", vo_data->subgroup);
00342 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): ROLE: %s\n", vo_data->role);
00343 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): CAPABILITY: %s\n", vo_data->capability);
00344 }
00345 else
00346 {
00347 lcmaps_log_debug(debug_level,"lcmaps_printVoData(): empty pointer to vo data struct\n");
00348 }
00349 return 0;
00350 }
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00398 int
00399 lcmaps_stringVoData(
00400 const lcmaps_vo_data_t * vo_data,
00401 char * buffer,
00402 int nchars
00403 )
00404 {
00405 int totalchars;
00406 char * strptr=NULL;
00407 char * bufptr=NULL;
00408 int buflen=0;
00409
00410 bufptr=buffer;
00411 buflen=nchars;
00412
00413
00414 if ( vo_data->vo == NULL )
00415 {
00416 lcmaps_log(0,"lcmaps_stringVoData(): error no VO found\n");
00417 return -1;
00418 }
00419
00420 strptr=vo_data->vo;
00421 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00422 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00423 {
00424
00425
00426
00427
00428
00429 totalchars=snprintf(bufptr,(size_t)buflen,"/VO=%s",strptr);
00430 if ( (totalchars+1) > buflen )
00431 {
00432 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for VO\n");
00433 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00434 return -1;
00435 }
00436 else if ( totalchars < 0 )
00437 {
00438 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00439 return -1;
00440 }
00441 else
00442 {
00443 bufptr+=totalchars;
00444 buflen-=totalchars;
00445 }
00446 }
00447 else
00448 {
00449 lcmaps_log(0,"lcmaps_stringVoData(): error no VO found\n");
00450 return -1;
00451 }
00452
00453
00454 if ( vo_data->group == NULL )
00455 {
00456 lcmaps_log(0,"lcmaps_stringVoData(): error no VO-group found\n");
00457 return -1;
00458 }
00459
00460 strptr=vo_data->group;
00461 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00462 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00463 {
00464 totalchars=snprintf(bufptr,(size_t)buflen,"/GROUP=%s",strptr);
00465 if ( (totalchars+1) > buflen )
00466 {
00467 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for GROUP\n");
00468 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00469 return -1;
00470 }
00471 else if ( totalchars < 0 )
00472 {
00473 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00474 return -1;
00475 }
00476 else
00477 {
00478 bufptr+=totalchars;
00479 buflen-=totalchars;
00480 }
00481 }
00482 else
00483 {
00484 lcmaps_log(0,"lcmaps_stringVoData(): error no VO-group found\n");
00485 return -1;
00486 }
00487
00488
00489
00490
00491 if ( vo_data->role != NULL )
00492 {
00493
00494 strptr=vo_data->role;
00495 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00496 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00497 {
00498 totalchars=snprintf(bufptr,(size_t)buflen,"/ROLE=%s",strptr);
00499 if ( (totalchars+1) > buflen )
00500 {
00501 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for ROLE\n");
00502 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00503 return -1;
00504 }
00505 else if ( totalchars < 0 )
00506 {
00507 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00508 return -1;
00509 }
00510 else
00511 {
00512 bufptr+=totalchars;
00513 buflen-=totalchars;
00514 }
00515 }
00516 }
00517
00518
00519 if ( vo_data->capability != NULL )
00520 {
00521
00522 strptr=vo_data->capability;
00523 strptr += strspn(strptr, VO_DATA_WHITESPACE_CHARS);
00524 if ( (*strptr!='\0') && (strncmp(strptr,"NULL",4)) )
00525 {
00526 totalchars=snprintf(bufptr,(size_t)buflen,"/CAPABILITY=%s",strptr);
00527 if ( (totalchars+1) > buflen )
00528 {
00529 lcmaps_log(0,"lcmaps_stringVoData(): could not write all characters into buffer for CAPABILITY\n");
00530 lcmaps_log(0,"lcmaps_stringVoData(): excess of characters: %d\n",totalchars+1-buflen);
00531 return -1;
00532 }
00533 else if ( totalchars < 0 )
00534 {
00535 lcmaps_log(0,"lcmaps_stringVoData(): error in snprintf()\n");
00536 return -1;
00537 }
00538 else
00539 {
00540 bufptr+=totalchars;
00541 buflen-=totalchars;
00542 }
00543 }
00544 }
00545 return 0;
00546 }
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00583 lcmaps_vo_mapping_t *
00584 lcmaps_createVoMapping(
00585 const char * vo_data_string,
00586 const char * groupname,
00587 const gid_t gid
00588 )
00589 {
00590 lcmaps_vo_mapping_t * newVoMapping=NULL;
00591
00592 newVoMapping = (lcmaps_vo_mapping_t *)malloc(sizeof(lcmaps_vo_mapping_t));
00593 if (!newVoMapping)
00594 {
00595 lcmaps_log(0,"lcmaps_createVoMapping(): error in malloc for new VoMapping structure\n");
00596 return NULL;
00597 }
00598
00599 newVoMapping->vostring = NULL;
00600 newVoMapping->groupname = NULL;
00601 newVoMapping->gid = LCMAPS_NO_GID;
00602
00603 if (vo_data_string) newVoMapping->vostring = strdup(vo_data_string);
00604 if (vo_data_string) newVoMapping->groupname = strdup(groupname);
00605 if (gid) newVoMapping->gid = gid;
00606
00607 return newVoMapping;
00608 }
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00637 int
00638 lcmaps_deleteVoMapping(
00639 lcmaps_vo_mapping_t ** vo_mapping
00640 )
00641 {
00642 if (!vo_mapping) {
00643 lcmaps_log(0, "lcmaps_deleteVoMapping(): empty pointer as input !\n");
00644 return -1;
00645 }
00646
00647 if ( (*vo_mapping) )
00648 {
00649 if ( (*vo_mapping)->vostring) free( (*vo_mapping)->vostring );
00650 if ( (*vo_mapping)->groupname) free( (*vo_mapping)->groupname );
00651 free( (*vo_mapping) );
00652 }
00653 else
00654 {
00655 lcmaps_log_debug(2,"lcmaps_deleteVoMapping(): no lcmaps_vo_mapping_t found\n");
00656 }
00657 *vo_mapping=NULL;
00658 return 0;
00659 }
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00688 int
00689 lcmaps_cleanVoMapping(
00690 lcmaps_vo_mapping_t * vo_mapping
00691 )
00692 {
00693 if (!vo_mapping) {
00694 lcmaps_log(0, "lcmaps_cleanVoMapping():: no lcmaps_vo_mapping_t found\n");
00695 return -1;
00696 }
00697 else
00698 {
00699 if ( (vo_mapping)->vostring)
00700 {
00701 free( (vo_mapping)->vostring );
00702 vo_mapping->vostring = NULL;
00703 }
00704
00705 if ( (vo_mapping)->groupname)
00706 {
00707 free( (vo_mapping)->groupname );
00708 vo_mapping->groupname = NULL;
00709 }
00710 }
00711 return 0;
00712 }
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00742 int
00743 lcmaps_copyVoMapping(
00744 lcmaps_vo_mapping_t * dst_vo_mapping,
00745 const lcmaps_vo_mapping_t * src_vo_mapping
00746 )
00747 {
00748 if ( (dst_vo_mapping) && (src_vo_mapping) )
00749 {
00750 dst_vo_mapping->gid = src_vo_mapping->gid;
00751 if (src_vo_mapping->vostring)
00752 dst_vo_mapping->vostring = strdup(src_vo_mapping->vostring);
00753 else
00754 dst_vo_mapping->vostring = NULL;
00755
00756 if (src_vo_mapping->groupname)
00757 dst_vo_mapping->groupname = strdup(src_vo_mapping->groupname);
00758 else
00759 dst_vo_mapping->groupname = NULL;
00760
00761 return 0;
00762 }
00763 else
00764 {
00765 return -1;
00766 }
00767 }
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00793 int
00794 lcmaps_printVoMapping(
00795 int debug_level,
00796 const lcmaps_vo_mapping_t * vo_mapping
00797 )
00798 {
00799 if (vo_mapping)
00800 {
00801 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): address of vo mapping struct: %p\n", vo_mapping);
00802 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): VO string: %s\n", vo_mapping->vostring);
00803 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): mapped groupname: %s\n", vo_mapping->groupname);
00804 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): mapped GID: %d\n", (int)vo_mapping->gid);
00805 }
00806 else
00807 {
00808 lcmaps_log_debug(debug_level,"lcmaps_printVoMapping(): empty pointer to vo mapping struct\n");
00809 }
00810 return 0;
00811 }
00812
00813
00814
00815
00816
00817
00818
00819