diff --git a/lib/gssapi/accept_sec_context.c b/lib/gssapi/accept_sec_context.c index 8141a3920..44690c7a8 100644 --- a/lib/gssapi/accept_sec_context.c +++ b/lib/gssapi/accept_sec_context.c @@ -40,15 +40,22 @@ RCSID("$Id$"); -static krb5_keytab_data gss_keytab = { NULL }; +static krb5_keytab gss_keytab; -OM_uint32 gsskrb5_register_acceptor_identity - (char *identity) +OM_uint32 +gsskrb5_register_acceptor_identity (char *identity) { - if (gss_keytab.filename != NULL) - free(gss_keytab.filename); - gss_keytab.filename = strdup(identity); - return GSS_S_COMPLETE; + char *p; + if(gss_keytab != NULL) { + krb5_kt_close(gssapi_krb5_context, gss_keytab); + gss_keytab = NULL; + } + asprintf(&p, "FILE:%s", identity); + if(p == NULL) + return GSS_S_FAILURE; + krb5_kt_resolve(gssapi_krb5_context, p, &gss_keytab); + free(p); + return GSS_S_COMPLETE; } OM_uint32 gss_accept_sec_context @@ -72,7 +79,7 @@ OM_uint32 gss_accept_sec_context OM_uint32 flags; krb5_ticket *ticket; Checksum cksum; - krb5_keytab_data *keytab = NULL; + krb5_keytab keytab = NULL; gssapi_krb5_init (); @@ -114,8 +121,8 @@ OM_uint32 gss_accept_sec_context goto failure; if (acceptor_cred_handle == GSS_C_NO_CREDENTIAL) { - if (gss_keytab.filename != NULL) { - keytab = &gss_keytab; + if (gss_keytab != NULL) { + keytab = gss_keytab; } } else if (acceptor_cred_handle->keytab != NULL) { keytab = acceptor_cred_handle->keytab; diff --git a/lib/gssapi/krb5/accept_sec_context.c b/lib/gssapi/krb5/accept_sec_context.c index 8141a3920..44690c7a8 100644 --- a/lib/gssapi/krb5/accept_sec_context.c +++ b/lib/gssapi/krb5/accept_sec_context.c @@ -40,15 +40,22 @@ RCSID("$Id$"); -static krb5_keytab_data gss_keytab = { NULL }; +static krb5_keytab gss_keytab; -OM_uint32 gsskrb5_register_acceptor_identity - (char *identity) +OM_uint32 +gsskrb5_register_acceptor_identity (char *identity) { - if (gss_keytab.filename != NULL) - free(gss_keytab.filename); - gss_keytab.filename = strdup(identity); - return GSS_S_COMPLETE; + char *p; + if(gss_keytab != NULL) { + krb5_kt_close(gssapi_krb5_context, gss_keytab); + gss_keytab = NULL; + } + asprintf(&p, "FILE:%s", identity); + if(p == NULL) + return GSS_S_FAILURE; + krb5_kt_resolve(gssapi_krb5_context, p, &gss_keytab); + free(p); + return GSS_S_COMPLETE; } OM_uint32 gss_accept_sec_context @@ -72,7 +79,7 @@ OM_uint32 gss_accept_sec_context OM_uint32 flags; krb5_ticket *ticket; Checksum cksum; - krb5_keytab_data *keytab = NULL; + krb5_keytab keytab = NULL; gssapi_krb5_init (); @@ -114,8 +121,8 @@ OM_uint32 gss_accept_sec_context goto failure; if (acceptor_cred_handle == GSS_C_NO_CREDENTIAL) { - if (gss_keytab.filename != NULL) { - keytab = &gss_keytab; + if (gss_keytab != NULL) { + keytab = gss_keytab; } } else if (acceptor_cred_handle->keytab != NULL) { keytab = acceptor_cred_handle->keytab; diff --git a/lib/gssapi/krb5/release_cred.c b/lib/gssapi/krb5/release_cred.c index 30a41c0e5..a715b56cc 100644 --- a/lib/gssapi/krb5/release_cred.c +++ b/lib/gssapi/krb5/release_cred.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -52,11 +52,8 @@ OM_uint32 gss_release_cred gssapi_krb5_init (); krb5_free_principal(gssapi_krb5_context, (*cred_handle)->principal); - if ((*cred_handle)->keytab != NULL) { - if ((*cred_handle)->keytab->filename != NULL) - free((*cred_handle)->keytab->filename); - free((*cred_handle)->keytab); - } + if ((*cred_handle)->keytab != NULL) + krb5_kt_close(gssapi_krb5_context, (*cred_handle)->keytab); gss_release_oid_set(NULL, &(*cred_handle)->mechanisms); free(*cred_handle); *cred_handle = GSS_C_NO_CREDENTIAL; diff --git a/lib/gssapi/release_cred.c b/lib/gssapi/release_cred.c index 30a41c0e5..a715b56cc 100644 --- a/lib/gssapi/release_cred.c +++ b/lib/gssapi/release_cred.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997, 1998 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -52,11 +52,8 @@ OM_uint32 gss_release_cred gssapi_krb5_init (); krb5_free_principal(gssapi_krb5_context, (*cred_handle)->principal); - if ((*cred_handle)->keytab != NULL) { - if ((*cred_handle)->keytab->filename != NULL) - free((*cred_handle)->keytab->filename); - free((*cred_handle)->keytab); - } + if ((*cred_handle)->keytab != NULL) + krb5_kt_close(gssapi_krb5_context, (*cred_handle)->keytab); gss_release_oid_set(NULL, &(*cred_handle)->mechanisms); free(*cred_handle); *cred_handle = GSS_C_NO_CREDENTIAL;