diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/gssapi/krb5/acquire_cred.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/lib/gssapi/krb5/acquire_cred.c b/src/lib/gssapi/krb5/acquire_cred.c index df029cc32..055b3eb4c 100644 --- a/src/lib/gssapi/krb5/acquire_cred.c +++ b/src/lib/gssapi/krb5/acquire_cred.c @@ -845,6 +845,17 @@ gss_krb5int_import_cred(OM_uint32 *minor_status, memset(&args, 0, sizeof(args)); + if (req->id && req->keytab) + args.cred_usage = GSS_C_BOTH; + else if (req->id) + args.cred_usage = GSS_C_INITIATE; + else if (req->keytab) + args.cred_usage = GSS_C_ACCEPT; + else { + *minor_status = EINVAL; + return GSS_S_FAILURE; + } + if (req->keytab_principal) { memset(&name, 0, sizeof(name)); code = k5_mutex_init(&name.lock); @@ -859,17 +870,9 @@ gss_krb5int_import_cred(OM_uint32 *minor_status, args.ccache = req->id; args.keytab = req->keytab; - if (req->id && req->keytab) - args.cred_usage = GSS_C_BOTH; - else if (req->id) - args.cred_usage = GSS_C_INITIATE; - else if (req->keytab) - args.cred_usage = GSS_C_ACCEPT; - else { - *minor_status = EINVAL; - return GSS_S_FAILURE; - } - - return acquire_cred(minor_status, &args, cred_handle, &time_rec); + code = acquire_cred(minor_status, &args, cred_handle, &time_rec); + if (req->keytab_principal) + k5_mutex_destroy(&name.lock); + return code; } |
