From 39184f36f390da7373d82f4526ca1ab0eb3f7d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 10 Jul 2007 12:07:33 +0000 Subject: [PATCH] (enviroment_changed): return non-zero if enviroment that will determine default krb5cc name has changed. (krb5_cc_default_name): also check if cached value is uptodate. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21426 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/cache.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/krb5/cache.c b/lib/krb5/cache.c index 06a93e926..d8ac678e8 100644 --- a/lib/krb5/cache.c +++ b/lib/krb5/cache.c @@ -338,6 +338,35 @@ _krb5_expand_default_cc_name(krb5_context context, const char *str, char **res) return 0; } +/* + * Return non-zero if enviroment that will determine default krb5cc + * name has changed. + */ + +static int +enviroment_changed(krb5_context context) +{ + const char *e; + + if(issuid()) + return 0; + + e = getenv("KRB5CCNAME"); + if (e == NULL) { + if (context->default_cc_name_env) { + free(context->default_cc_name_env); + context->default_cc_name_env = NULL; + return 1; + } + } else { + if (context->default_cc_name_env == NULL) + return 1; + if (strcmp(e, context->default_cc_name_env) != 0) + return 1; + } + return 0; +} + /* * Set the default cc name for `context' to `name'. */ @@ -353,8 +382,12 @@ krb5_cc_set_default_name(krb5_context context, const char *name) if(!issuid()) { e = getenv("KRB5CCNAME"); - if (e) + if (e) { p = strdup(e); + if (context->default_cc_name_env) + free(context->default_cc_name_env); + context->default_cc_name_env = strdup(e); + } } if (e == NULL) { e = krb5_config_get_string(context, NULL, "libdefaults", @@ -389,7 +422,7 @@ krb5_cc_set_default_name(krb5_context context, const char *name) const char* KRB5_LIB_FUNCTION krb5_cc_default_name(krb5_context context) { - if (context->default_cc_name == NULL) + if (context->default_cc_name == NULL || enviroment_changed(context)) krb5_cc_set_default_name(context, NULL); return context->default_cc_name;