diff options
| author | Greg Hudson <ghudson@mit.edu> | 2010-08-19 16:38:30 +0000 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2010-08-19 16:38:30 +0000 |
| commit | 41103fb180d78f349a5c3fe45f96008b50a11587 (patch) | |
| tree | b7ff6041575a9e7ef2b40d7bb65a33a55043ff50 /src/lib | |
| parent | 06bdc5c1cd257e7e85d8d29833ca54dd55b3a4f2 (diff) | |
| download | krb5-41103fb180d78f349a5c3fe45f96008b50a11587.tar.gz krb5-41103fb180d78f349a5c3fe45f96008b50a11587.tar.xz krb5-41103fb180d78f349a5c3fe45f96008b50a11587.zip | |
Allow krb5_gss_register_acceptor_identity to unset keytab name
krb5_gss_register_acceptor_identity sets a mutex-locked global (not
thread-specific) variable containing a keytab name. This change
allows the variable to be unset by passing a null value.
A more elegant long-term solution to the problem is Heimdal's
gss_krb5_import_cred function.
ticket: 6758
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@24242 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/gssapi/krb5/acquire_cred.c | 16 | ||||
| -rw-r--r-- | src/lib/gssapi/krb5/krb5_gss_glue.c | 2 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/lib/gssapi/krb5/acquire_cred.c b/src/lib/gssapi/krb5/acquire_cred.c index 28e25052a..bceab6173 100644 --- a/src/lib/gssapi/krb5/acquire_cred.c +++ b/src/lib/gssapi/krb5/acquire_cred.c @@ -103,19 +103,18 @@ gss_krb5int_register_acceptor_identity(OM_uint32 *minor_status, const gss_OID desired_object, gss_buffer_t value) { - char *new, *old; + char *new = NULL, *old; int err; err = gss_krb5int_initialize_library(); if (err != 0) return GSS_S_FAILURE; - if (value->value == NULL) - return GSS_S_FAILURE; - - new = strdup((char *)value->value); - if (new == NULL) - return GSS_S_FAILURE; + if (value->value != NULL) { + new = strdup((char *)value->value); + if (new == NULL) + return GSS_S_FAILURE; + } err = k5_mutex_lock(&gssint_krb5_keytab_lock); if (err) { @@ -125,8 +124,7 @@ gss_krb5int_register_acceptor_identity(OM_uint32 *minor_status, old = krb5_gss_keytab; krb5_gss_keytab = new; k5_mutex_unlock(&gssint_krb5_keytab_lock); - if (old != NULL) - free(old); + free(old); return GSS_S_COMPLETE; } diff --git a/src/lib/gssapi/krb5/krb5_gss_glue.c b/src/lib/gssapi/krb5/krb5_gss_glue.c index 0d87f90c9..d2a47acb8 100644 --- a/src/lib/gssapi/krb5/krb5_gss_glue.c +++ b/src/lib/gssapi/krb5/krb5_gss_glue.c @@ -253,7 +253,7 @@ krb5_gss_register_acceptor_identity(const char *keytab) OM_uint32 minor_status; gss_buffer_desc req_buffer; - req_buffer.length = strlen(keytab); + req_buffer.length = (keytab == NULL) ? 0 : strlen(keytab); req_buffer.value = (char *)keytab; major_status = gssspi_mech_invoke(&minor_status, |
