00001
00002
00003
00004
00005
00006
00007
00018 #ifndef LCMAPS_CREDENTIAL_C
00019 #define LCMAPS_CREDENTIAL_C
00020
00021
00022
00023
00024 #include "lcmaps_config.h"
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 #include <string.h>
00028
00029 #ifdef LCMAPS_GSI_MODE
00030 # include <gssapi.h>
00031 # include "gsi_handling/_lcmaps_gsi_utils.h"
00032 # include "gsi_handling/_lcmaps_voms_attributes.h"
00033 #endif
00034 #include "_lcmaps_credential.h"
00035
00036
00037 #include "lcmaps_log.h"
00038
00039 #ifdef LCMAPS_GSI_MODE
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 int lcmaps_credential_store_gss_cred_id_t(
00059 gss_cred_id_t gss_credential,
00060 lcmaps_cred_id_t * plcmaps_credential
00061 )
00062 {
00063 char * logstr = "lcmaps.mod-lcmaps_credential_store_gss_cred_id_t()";
00064
00065 if (plcmaps_credential == NULL)
00066 {
00067 return -1;
00068 }
00069
00070 plcmaps_credential->cred = gss_credential;
00071
00072
00073 if ((plcmaps_credential->dn == NULL) && (gss_credential != GSS_C_NO_CREDENTIAL))
00074 {
00075 if ((plcmaps_credential->dn = lcmaps_gss_cred_to_dn(gss_credential)) == NULL)
00076 {
00077 return 1;
00078 }
00079 }
00080
00081
00082 if ((plcmaps_credential->fqan == NULL) && (gss_credential != GSS_C_NO_CREDENTIAL))
00083 {
00084 if ( (plcmaps_credential->fqan = lcmaps_gss_cred_to_voms_fqans(
00085 gss_credential,
00086 &(plcmaps_credential->nfqan)
00087 ) ) == NULL)
00088 {
00089 if (plcmaps_credential->nfqan == 0)
00090 {
00091 lcmaps_log_debug(1, "%s: No FQANs found in gss credentials\n", logstr);
00092 return 2;
00093 }
00094 else
00095 {
00096 lcmaps_log_debug(1, "%s: Error retrieving VOMS attributes\n", logstr);
00097 return 3;
00098 }
00099 }
00100 }
00101 return 0;
00102 }
00103
00104
00105
00106
00107
00108
00109
00110
00111 gss_cred_id_t lcmaps_credential_get_gss_cred_id_t(
00112 lcmaps_cred_id_t lcmaps_credential
00113 )
00114 {
00115 return (lcmaps_credential.cred);
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 int lcmaps_credential_store_gss_ctx_id_t(
00128 gss_ctx_id_t gss_context,
00129 lcmaps_cred_id_t * plcmaps_credential
00130 )
00131 {
00132 return 1;
00133 }
00134
00135
00136
00137
00138
00139
00140
00141
00142 gss_ctx_id_t lcmaps_credential_get_gss_ctx_id_t(
00143 lcmaps_cred_id_t lcmaps_credential
00144 )
00145 {
00146 return (lcmaps_credential.context);
00147 }
00148
00149 #endif
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 int lcmaps_credential_store_dn(
00163 char * dn,
00164 lcmaps_cred_id_t * plcmaps_credential
00165 )
00166 {
00167 if (plcmaps_credential == NULL)
00168 {
00169 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_dn(): Create lcmaps_cred_id_t first!\n");
00170 return -1;
00171 }
00172
00173
00174 if (plcmaps_credential->dn == NULL)
00175 {
00176 if (dn != NULL)
00177 {
00178 plcmaps_credential->dn = strdup(dn);
00179 }
00180 else
00181 {
00182 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_dn(): Cannot fill empty DN\n");
00183 return 1;
00184 }
00185 }
00186 return 0;
00187 }
00188
00189
00190
00191
00192
00193
00194
00195
00196 char * lcmaps_credential_get_dn(
00197 lcmaps_cred_id_t lcmaps_credential
00198 )
00199 {
00200 return (lcmaps_credential.dn);
00201 }
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 int lcmaps_credential_store_fqan_list(
00216 int nfqan,
00217 char ** fqan_list,
00218 lcmaps_cred_id_t * plcmaps_credential
00219 )
00220 {
00221 int i = 0;
00222 char * fqan = NULL;
00223
00224 if (plcmaps_credential == NULL)
00225 {
00226 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_dn(): Create lcmaps_cred_id_t first!\n");
00227 return -1;
00228 }
00229
00230
00231 if ( (plcmaps_credential->fqan == NULL) && (nfqan > 0) )
00232 {
00233 plcmaps_credential->nfqan = nfqan;
00234 plcmaps_credential->fqan = (char **) malloc(nfqan * sizeof(char *));
00235 if (plcmaps_credential->fqan == NULL)
00236 {
00237 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_fqan_list(): Malloc error!\n");
00238 return 2;
00239 }
00240 for (i = 0; i < nfqan; i++)
00241 {
00242 if ((fqan = fqan_list[i]) != NULL)
00243 {
00244 if ( ((plcmaps_credential->fqan)[i] = strdup(fqan)) == NULL)
00245 {
00246 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_fqan_list(): Malloc error!\n");
00247 return 2;
00248 }
00249 }
00250 else
00251 {
00252 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_store_fqan_list(): malformed fqan list\n");
00253 return 1;
00254 }
00255 }
00256 }
00257 return 0;
00258 }
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268 char ** lcmaps_credential_get_fqan_list(
00269 int * pnfqan,
00270 lcmaps_cred_id_t lcmaps_credential
00271 )
00272 {
00273 *pnfqan = lcmaps_credential.nfqan;
00274 return (lcmaps_credential.fqan);
00275 }
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287 int lcmaps_credential_init(
00288 lcmaps_cred_id_t * plcmaps_credential
00289 )
00290 {
00291 if (plcmaps_credential == NULL)
00292 {
00293 lcmaps_log(0,"lcmaps.mod-lcmaps_credential_init(): Create lcmaps_cred_id_t first!\n");
00294 return -1;
00295 }
00296 #ifdef LCMAPS_GSI_MODE
00297 plcmaps_credential->cred = GSS_C_NO_CREDENTIAL;
00298 plcmaps_credential->context = GSS_C_NO_CONTEXT;
00299 #endif
00300 plcmaps_credential->dn = (char *) NULL;
00301 plcmaps_credential->fqan = (char **) NULL;
00302 plcmaps_credential->nfqan = -1;
00303
00304 return 0;
00305 }
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315 int lcmaps_release_cred(
00316 lcmaps_cred_id_t * plcmaps_credential
00317 )
00318 {
00319 int i = 0;
00320
00321 if (plcmaps_credential == NULL)
00322 return 0;
00323
00324 if (plcmaps_credential->dn != NULL)
00325 free(plcmaps_credential->dn);
00326
00327 if (plcmaps_credential->nfqan > 0)
00328 for (i = 0; i < plcmaps_credential->nfqan; i++)
00329 {
00330 if ((plcmaps_credential->fqan)[i] != NULL)
00331 free((plcmaps_credential->fqan)[i]);
00332 }
00333 if (plcmaps_credential->fqan != NULL)
00334 {
00335 free(plcmaps_credential->fqan);
00336 }
00337 return 0;
00338 }
00339
00340 #endif
00341
00342
00343
00344
00345
00346
00347
00348