diff options
author | Ken Raeburn <raeburn@mit.edu> | 2004-07-15 01:00:54 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 2004-07-15 01:00:54 +0000 |
commit | 55f2286542acf416169bc0cc6af3d02d4f8fe686 (patch) | |
tree | 7711863e9b4a15243f070649369c605836bba3b6 /src/lib/gssapi/krb5/gssapi_krb5.c | |
parent | 732ba2377897fde4c92a75475111ed3fe8e25bbb (diff) | |
download | krb5-55f2286542acf416169bc0cc6af3d02d4f8fe686.zip krb5-55f2286542acf416169bc0cc6af3d02d4f8fe686.tar.gz krb5-55f2286542acf416169bc0cc6af3d02d4f8fe686.tar.bz2 |
Get rid of the global krb5 context used by the GSSAPI Kerberos mechanism. I
*think* I've gotten all the places where a ccache or keytab name that's been
stored gets applied to whichever context needs it.
* gssapi_krb5.c (kg_sync_ccache_name): Add context argument instead of calling
kg_get_context.
(kg_get_ccache_name): Use a locally created krb5 context instead of calling
kg_get_context.
(kg_get_context): Deleted.
* acquire_cred.c (acquire_init_cred): Pass current context.
(krb5_gss_acquire_cred): Use a locally created krb5 context instead of calling
kg_get_context.
* add_cred.c (krb5_gss_add_cred): Call kg_sync_ccache_name.
* init_sec_context.c (krb5_gss_init_sec_context): Likewise.
* gssapiP_krb5.h (kg_sync_ccache_name): Update prototype.
(kg_get_context): Delete declaration.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16597 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/gssapi/krb5/gssapi_krb5.c')
-rw-r--r-- | src/lib/gssapi/krb5/gssapi_krb5.c | 53 |
1 files changed, 12 insertions, 41 deletions
diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c index 2ce34e2..b19f1a7 100644 --- a/src/lib/gssapi/krb5/gssapi_krb5.c +++ b/src/lib/gssapi/krb5/gssapi_krb5.c @@ -151,35 +151,12 @@ kg_get_defcred(minor_status, cred) } OM_uint32 -kg_get_context(minor_status, context) - OM_uint32 *minor_status; - krb5_context *context; +kg_sync_ccache_name (krb5_context context, OM_uint32 *minor_status) { - static krb5_context kg_context = NULL; - krb5_error_code code; - - if (!kg_context) { - if ((code = krb5_init_context(&kg_context))) - goto fail; - } - *context = kg_context; - *minor_status = 0; - return GSS_S_COMPLETE; - -fail: - *minor_status = (OM_uint32) code; - return GSS_S_FAILURE; -} - -OM_uint32 -kg_sync_ccache_name (OM_uint32 *minor_status) -{ - krb5_context context = NULL; OM_uint32 err = 0; - OM_uint32 minor; /* - * Sync up the kg_context ccache name with the GSSAPI ccache name. + * Sync up the context ccache name with the GSSAPI ccache name. * If kg_ccache_name is NULL -- normal unless someone has called * gss_krb5_ccache_name() -- then the system default ccache will * be picked up and used by resetting the context default ccache. @@ -187,12 +164,6 @@ kg_sync_ccache_name (OM_uint32 *minor_status) */ if (!err) { - if (GSS_ERROR(kg_get_context (&minor, &context))) { - err = minor; - } - } - - if (!err) { /* kg_ccache_name == NULL resets the context default ccache */ err = krb5_cc_set_default_name(context, kg_ccache_name); } @@ -204,24 +175,24 @@ kg_sync_ccache_name (OM_uint32 *minor_status) OM_uint32 kg_get_ccache_name (OM_uint32 *minor_status, const char **out_name) { - krb5_context context = NULL; const char *name = NULL; OM_uint32 err = 0; - OM_uint32 minor; - if (GSS_ERROR(kg_get_context (&minor, &context))) { - err = minor; - } - if (!err) { if (kg_ccache_name != NULL) { name = kg_ccache_name; } else { - /* reset the context default ccache (see text above) */ - err = krb5_cc_set_default_name (context, NULL); - if (!err) { + krb5_context context = NULL; + + /* Reset the context default ccache (see text above), and + then retrieve it. */ + err = krb5_init_context(&context); + if (!err) + err = krb5_cc_set_default_name (context, NULL); + if (!err) name = krb5_cc_default_name(context); - } + if (context) + krb5_free_context(context); } } |