aboutsummaryrefslogtreecommitdiff
path: root/src/lib/gssapi/krb5/gssapi_krb5.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-07-30 03:55:07 +0000
committerKen Raeburn <raeburn@mit.edu>2004-07-30 03:55:07 +0000
commit40fd59ac1c443ffb59cb27e81dba2c075ffc5205 (patch)
tree46f16ad48738bfd400dce9918c1ec46e758c2508 /src/lib/gssapi/krb5/gssapi_krb5.c
parent097f2aae88d2f0d1edd184b51db4e0c02387e6d8 (diff)
downloadkrb5-40fd59ac1c443ffb59cb27e81dba2c075ffc5205.zip
krb5-40fd59ac1c443ffb59cb27e81dba2c075ffc5205.tar.gz
krb5-40fd59ac1c443ffb59cb27e81dba2c075ffc5205.tar.bz2
* gssapi_krb5.c (kg_ccache_name): Variable deleted.
(kg_sync_ccache_name, kg_get_ccache_name, kg_set_ccache_name): Get and set thread-specific values instead. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16632 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/gssapi/krb5/gssapi_krb5.c')
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c
index e6f88a3..c188e6e 100644
--- a/src/lib/gssapi/krb5/gssapi_krb5.c
+++ b/src/lib/gssapi/krb5/gssapi_krb5.c
@@ -125,7 +125,6 @@ const gss_OID_set_desc * const gss_mech_set_krb5_old = oidsets+1;
const gss_OID_set_desc * const gss_mech_set_krb5_both = oidsets+2;
g_set kg_vdb = G_SET_INIT;
-static char *kg_ccache_name = NULL;
/** default credential support */
@@ -164,8 +163,9 @@ kg_sync_ccache_name (krb5_context context, OM_uint32 *minor_status)
*/
if (!err) {
- /* kg_ccache_name == NULL resets the context default ccache */
- err = krb5_cc_set_default_name(context, kg_ccache_name);
+ /* if NULL, resets the context default ccache */
+ err = krb5_cc_set_default_name(context,
+ (char *) k5_getspecific(K5_KEY_GSS_KRB5_CCACHE_NAME));
}
*minor_status = err;
@@ -177,6 +177,9 @@ kg_get_ccache_name (OM_uint32 *minor_status, const char **out_name)
{
const char *name = NULL;
OM_uint32 err = 0;
+ char *kg_ccache_name;
+
+ kg_ccache_name = k5_getspecific(K5_KEY_GSS_KRB5_CCACHE_NAME);
if (kg_ccache_name != NULL) {
name = strdup(kg_ccache_name);
@@ -217,6 +220,8 @@ kg_set_ccache_name (OM_uint32 *minor_status, const char *name)
{
char *new_name = NULL;
char *swap = NULL;
+ char *kg_ccache_name;
+ krb5_error_code kerr;
if (name) {
new_name = malloc(strlen(name) + 1);
@@ -227,9 +232,18 @@ kg_set_ccache_name (OM_uint32 *minor_status, const char *name)
strcpy(new_name, name);
}
+ kg_ccache_name = k5_getspecific(K5_KEY_GSS_KRB5_CCACHE_NAME);
swap = kg_ccache_name;
kg_ccache_name = new_name;
new_name = swap;
+ kerr = k5_setspecific(K5_KEY_GSS_KRB5_CCACHE_NAME, kg_ccache_name);
+ if (kerr != 0) {
+ /* Can't store, so free up the storage. */
+ free(kg_ccache_name);
+ /* ??? free(new_name); */
+ *minor_status = kerr;
+ return GSS_S_FAILURE;
+ }
free (new_name);
*minor_status = 0;