aboutsummaryrefslogtreecommitdiff
path: root/src/lib/gssapi/krb5/gssapi_krb5.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-07-15 01:00:54 +0000
committerKen Raeburn <raeburn@mit.edu>2004-07-15 01:00:54 +0000
commit55f2286542acf416169bc0cc6af3d02d4f8fe686 (patch)
tree7711863e9b4a15243f070649369c605836bba3b6 /src/lib/gssapi/krb5/gssapi_krb5.c
parent732ba2377897fde4c92a75475111ed3fe8e25bbb (diff)
downloadkrb5-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.c53
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);
}
}