If the KRB5CCNAME variable gets set to the empty string
authorSam Hartman <hartmans@mit.edu>
Wed, 28 Sep 2011 20:54:45 +0000 (20:54 +0000)
committerSam Hartman <hartmans@mit.edu>
Wed, 28 Sep 2011 20:54:45 +0000 (20:54 +0000)
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

src/windows/leashdll/lshfunc.c

index 26a0261b29dde307e95b84eb367beaf3ecb3d517..a9c7c0d4c9f3bea573acdb79dddfb44a572e430a 100644 (file)
@@ -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);