diff options
author | Sam Hartman <hartmans@mit.edu> | 2011-09-28 20:54:45 +0000 |
---|---|---|
committer | Sam Hartman <hartmans@mit.edu> | 2011-09-28 20:54:45 +0000 |
commit | d280888e38ef7c3e9fdccf6329db9a8fd7f3290e (patch) | |
tree | 304a1b9d6c757a34ef926406437f0fdc72e09f6d | |
parent | 3fb382036d67d67236b4205505c9bdbf9c1535bd (diff) | |
download | krb5-d280888e38ef7c3e9fdccf6329db9a8fd7f3290e.tar.gz krb5-d280888e38ef7c3e9fdccf6329db9a8fd7f3290e.tar.xz krb5-d280888e38ef7c3e9fdccf6329db9a8fd7f3290e.zip |
If the KRB5CCNAME variable gets set to the empty string
there will be no credential cache and the automatic credential
cache detection will be skipped. Ensure that the KRB5CCNAME
variable is not set to an empty string by us. If it was set
to the empty string by someone else, unset it.
Patch by Jeffrey Altman.
From: Alexey Melnikov <alexey.melnikov@isode.com>
leashw32: do not set KRB5CCNAME to empty string
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25249 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r-- | src/windows/leashdll/lshfunc.c | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/windows/leashdll/lshfunc.c b/src/windows/leashdll/lshfunc.c index 26a0261b2..a9c7c0d4c 100644 --- a/src/windows/leashdll/lshfunc.c +++ b/src/windows/leashdll/lshfunc.c @@ -3484,8 +3484,9 @@ acquire_tkt_no_princ(krb5_context context, char * ccname, int cclen) SetLastError(0); GetEnvironmentVariable("KRB5CCNAME", ccachename, sizeof(ccachename)); gle = GetLastError(); - if ( (gle == ERROR_ENVVAR_NOT_FOUND) && context ) { - SetEnvironmentVariable("KRB5CCNAME", pkrb5_cc_default_name(ctx)); + if ( ((gle == ERROR_ENVVAR_NOT_FOUND) || !ccachename[0]) && context ) { + char * ccdef = pkrb5_cc_default_name(ctx); + SetEnvironmentVariable("KRB5CCNAME", ccdef ? ccdef : NULL); GetEnvironmentVariable("KRB5CCNAME", ccachename, sizeof(ccachename)); } @@ -3562,15 +3563,19 @@ acquire_tkt_no_princ(krb5_context context, char * ccname, int cclen) if ( prompt && ticketinfo.btickets != GOOD_TICKETS ) { acquire_tkt_send_msg(ctx, NULL, ccachename, NULL, ccname, cclen); + /* + * If the ticket manager returned an alternative credential cache + * remember it as the default for this process. + */ + if ( ccname && ccname[0] && strcmp(ccachename,ccname) ) { + SetEnvironmentVariable("KRB5CCNAME",ccname); + } + } else if (ccachename[0] && ccname) { strncpy(ccname, ccachename, cclen); ccname[cclen-1] = '\0'; } - if ( ccname && ccname[0] && strcmp(ccachename,ccname) ) { - SetEnvironmentVariable("KRB5CCNAME",ccname); - } - if ( !context ) pkrb5_free_context(ctx); } @@ -3598,8 +3603,9 @@ acquire_tkt_for_princ(krb5_context context, krb5_principal desiredPrincipal, SetLastError(0); GetEnvironmentVariable("KRB5CCNAME", ccachename, sizeof(ccachename)); gle = GetLastError(); - if ( (gle == ERROR_ENVVAR_NOT_FOUND) && context ) { - SetEnvironmentVariable("KRB5CCNAME", pkrb5_cc_default_name(ctx)); + if ( ((gle == ERROR_ENVVAR_NOT_FOUND) || !ccachename[0]) && context ) { + char * ccdef = pkrb5_cc_default_name(ctx); + SetEnvironmentVariable("KRB5CCNAME", ccdef ? ccdef : NULL); GetEnvironmentVariable("KRB5CCNAME", ccachename, sizeof(ccachename)); } @@ -3658,17 +3664,19 @@ acquire_tkt_for_princ(krb5_context context, krb5_principal desiredPrincipal, if (prompt) { if (ticketinfo.btickets != GOOD_TICKETS || strcmp(name,ticketinfo.principal)) { acquire_tkt_send_msg(ctx, NULL, ccachename, desiredPrincipal, ccname, cclen); + /* + * If the ticket manager returned an alternative credential cache + * remember it as the default for this process. + */ + if ( ccname && ccname[0] && strcmp(ccachename,ccname) ) { + SetEnvironmentVariable("KRB5CCNAME",ccname); + } } else if (ccachename[0] && ccname) { strncpy(ccname, ccachename, cclen); ccname[cclen-1] = '\0'; } } - if ( ccname && ccname[0] && strcmp(ccachename,ccname) ) { - SetEnvironmentVariable("KRB5CCNAME",ccname); - } - - if (name) pkrb5_free_unparsed_name(ctx, name); |