65b44de
Treat empty values of KRB5CCNAME (and other variables which can't usefully
2ef50f0
be set to empty values) as if they were not set.  Incomplete and needs more
2ef50f0
thought about whether or not it's even correct.
65b44de
65b44de
diff -ur krb5-1.6.1/src/appl/bsd/krshd.c krb5-1.6.1/src/appl/bsd/krshd.c
65b44de
--- krb5-1.6.1/src/appl/bsd/krshd.c	2006-10-15 03:50:16.000000000 -0400
65b44de
+++ krb5-1.6.1/src/appl/bsd/krshd.c	2007-05-18 19:51:18.000000000 -0400
65b44de
@@ -1438,7 +1438,7 @@
65b44de
      * child's environment.  This can't really have
65b44de
      * a fixed position because tz may or may not be set.
65b44de
      */
65b44de
-    if (getenv("KRB5CCNAME")) {
65b44de
+    if (getenv("KRB5CCNAME") && getenv("KRB5CCNAME")[0]) {
65b44de
 	int i;
65b44de
 	char *buf2 = (char *)malloc(strlen(getenv("KRB5CCNAME"))
65b44de
 			 		   +strlen("KRB5CCNAME=")+1);
65b44de
diff -ur krb5-1.6.1/src/appl/bsd/login.c krb5-1.6.1/src/appl/bsd/login.c
65b44de
--- krb5-1.6.1/src/appl/bsd/login.c	2006-08-08 15:26:40.000000000 -0400
65b44de
+++ krb5-1.6.1/src/appl/bsd/login.c	2007-05-18 19:49:32.000000000 -0400
65b44de
@@ -528,7 +528,7 @@
65b44de
     login_get_kconf(kcontext);
65b44de
 
65b44de
     /* Set up the credential cache environment variable */
65b44de
-    if (!getenv(KRB5_ENV_CCNAME)) {
65b44de
+    if (!getenv(KRB5_ENV_CCNAME) || !getenv(KRB5_ENV_CCNAME)[0]) {
65b44de
 	sprintf(ccfile, "FILE:/tmp/krb5cc_p%ld", (long) getpid());
65b44de
 	setenv(KRB5_ENV_CCNAME, ccfile, 1);
65b44de
 	krb5_cc_set_default_name(kcontext, ccfile);
65b44de
@@ -1763,7 +1763,7 @@
65b44de
 	setenv ("TZ", tz, 1);
65b44de
 #endif
65b44de
 
65b44de
-    if (ccname)
65b44de
+    if (ccname && ccname[0])
65b44de
 	setenv("KRB5CCNAME", ccname, 1);
65b44de
 
65b44de
     setenv("HOME", pwd->pw_dir, 1);
65b44de
diff -ur krb5-1.6.1/src/appl/bsd/v4rcp.c krb5-1.6.1/src/appl/bsd/v4rcp.c
65b44de
--- krb5-1.6.1/src/appl/bsd/v4rcp.c	2006-08-08 15:26:40.000000000 -0400
65b44de
+++ krb5-1.6.1/src/appl/bsd/v4rcp.c	2007-05-18 19:50:40.000000000 -0400
65b44de
@@ -1060,7 +1060,7 @@
65b44de
 	  fprintf(stderr, "v4rcp: couldn't get local address (KRB5LOCALADDR)\n");
65b44de
 	  exit(1);
65b44de
 	}
65b44de
-	if ((envaddr = getenv("KRB5REMOTEADDR"))) {
65b44de
+	if ((envaddr = getenv("KRB5REMOTEADDR")) && envaddr[0]) {
65b44de
 #ifdef HAVE_INET_ATON
65b44de
 	  inet_aton(envaddr,  &foreign.sin_addr);
65b44de
 #else
65b44de
@@ -1068,7 +1068,7 @@
65b44de
 #endif
65b44de
 	  foreign.sin_family = AF_INET;
65b44de
 	  envaddr = getenv("KRB5REMOTEPORT");
65b44de
-	  if (envaddr)
65b44de
+	  if (envaddr && envaddr[0])
65b44de
 	    foreign.sin_port = htons(atoi(envaddr));
65b44de
 	  else
65b44de
 	    foreign.sin_port = 0;
65b44de
diff -ur krb5-1.6.1/src/appl/telnet/libtelnet/kerberos5.c krb5-1.6.1/src/appl/telnet/libtelnet/kerberos5.c
65b44de
--- krb5-1.6.1/src/appl/telnet/libtelnet/kerberos5.c	2006-12-01 16:27:28.000000000 -0500
65b44de
+++ krb5-1.6.1/src/appl/telnet/libtelnet/kerberos5.c	2007-05-18 19:48:51.000000000 -0400
65b44de
@@ -205,7 +205,7 @@
65b44de
 	return;
65b44de
 
65b44de
     ccname = getenv("KRB5CCNAME");
65b44de
-    if (ccname) {
65b44de
+    if (ccname && ccname[0]) {
65b44de
 	retval = krb5_cc_resolve(telnet_context, ccname, &ccache);
65b44de
 	if (!retval)
65b44de
 	    retval = krb5_cc_destroy(telnet_context, ccache);
65b44de
diff -ur krb5-1.6.1/src/lib/kadm5/alt_prof.c krb5-1.6.1/src/lib/kadm5/alt_prof.c
65b44de
--- krb5-1.6.1/src/lib/kadm5/alt_prof.c	2006-05-15 21:45:00.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/kadm5/alt_prof.c	2007-05-18 19:17:53.000000000 -0400
65b44de
@@ -82,7 +82,8 @@
65b44de
     if (i > 0)
65b44de
 	krb5_config_len--;
65b44de
     if (envname == NULL
65b44de
-	|| (kdc_config = getenv(envname)) == NULL)
65b44de
+	|| (kdc_config = getenv(envname)) == NULL
65b44de
+	|| (kdc_config[0] == '\0'))
65b44de
 	kdc_config = fname;
65b44de
     if (kdc_config == NULL)
65b44de
 	kdc_config_len = 0;
65b44de
@@ -494,7 +495,8 @@
65b44de
 	       !krb5_aprof_get_string(aprofile, hierarchy, TRUE, &svalue)) {
65b44de
 	 params.mask |= KADM5_CONFIG_ADMIN_KEYTAB;
65b44de
 	 params.admin_keytab = svalue;
65b44de
-    } else if ((params.admin_keytab = (char *) getenv("KRB5_KTNAME"))) {
65b44de
+    } else if ((params.admin_keytab = (char *) getenv("KRB5_KTNAME")) &&
65b44de
+	       (params.admin_keytab[0] != '\0')) {
65b44de
 	 params.admin_keytab = strdup(params.admin_keytab);
65b44de
 	 if (params.admin_keytab)
65b44de
 	      params.mask |= KADM5_CONFIG_ADMIN_KEYTAB;
65b44de
diff -ur krb5-1.6.1/src/lib/krb4/g_cnffile.c krb5-1.6.1/src/lib/krb4/g_cnffile.c
65b44de
--- krb5-1.6.1/src/lib/krb4/g_cnffile.c	2003-06-06 10:44:33.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/krb4/g_cnffile.c	2007-05-18 19:57:48.000000000 -0400
65b44de
@@ -89,7 +89,7 @@
65b44de
 
65b44de
 	/* standard V4 override first */
65b44de
 	s = getenv("KRB_CONF");
65b44de
-	if (s) cnffile = fopen(s,"r");
65b44de
+	if (s && s[0]) cnffile = fopen(s,"r");
65b44de
 	/* if that's wrong, use V5 config */
65b44de
 	if (!cnffile) cnffile = krb__v5_get_file("krb4_config");
65b44de
 	/* and if V5 config doesn't have it, go to hard-coded values */
65b44de
@@ -109,7 +109,7 @@
65b44de
 
65b44de
 	/* standard (not really) V4 override first */
65b44de
 	s = getenv("KRB_REALMS");
65b44de
-	if (s) realmsfile = fopen(s,"r");
65b44de
+	if (s && s[0]) realmsfile = fopen(s,"r");
65b44de
 	if (!realmsfile) realmsfile = krb__v5_get_file("krb4_realms");
65b44de
 	if (!realmsfile) realmsfile = fopen(KRB_RLM_TRANS, "r");
65b44de
 
65b44de
diff -ur krb5-1.6.1/src/lib/krb4/tkt_string.c krb5-1.6.1/src/lib/krb4/tkt_string.c
65b44de
--- krb5-1.6.1/src/lib/krb4/tkt_string.c	2006-03-11 17:23:28.000000000 -0500
65b44de
+++ krb5-1.6.1/src/lib/krb4/tkt_string.c	2007-05-18 19:57:57.000000000 -0400
65b44de
@@ -67,7 +67,7 @@
65b44de
 
65b44de
     if (!*krb_ticket_string) {
65b44de
 	env = getenv("KRBTKFILE");
65b44de
-        if (env) {
65b44de
+        if (env && env[0]) {
65b44de
 	    (void) strncpy(krb_ticket_string, env,
65b44de
 			   sizeof(krb_ticket_string)-1);
65b44de
 	    krb_ticket_string[sizeof(krb_ticket_string)-1] = '\0';
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/ccache/cccursor.c krb5-1.6.1/src/lib/krb5/ccache/cccursor.c
65b44de
--- krb5-1.6.1/src/lib/krb5/ccache/cccursor.c	2006-11-07 15:18:31.000000000 -0500
65b44de
+++ krb5-1.6.1/src/lib/krb5/ccache/cccursor.c	2007-05-18 19:19:11.000000000 -0400
65b44de
@@ -136,7 +136,7 @@
65b44de
 	/* fall through */
65b44de
     case CCCURSOR_ENV:
65b44de
 	name = getenv(KRB5_ENV_CCNAME);
65b44de
-	if (name != NULL) {
65b44de
+	if ((name != NULL) && (name[0] != '\0')) {
65b44de
 	    cursor->pos = CCCURSOR_OS;
65b44de
 	    ret = cccol_do_resolve(context, cursor, name, ccache);
65b44de
 	    if (ret)
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/os/ccdefname.c krb5-1.6.1/src/lib/krb5/os/ccdefname.c
65b44de
--- krb5-1.6.1/src/lib/krb5/os/ccdefname.c	2007-03-29 20:36:20.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/krb5/os/ccdefname.c	2007-05-18 18:32:20.000000000 -0400
65b44de
@@ -292,7 +292,7 @@
65b44de
             /* try the environment variable first */
65b44de
             new_ccname = getenv(KRB5_ENV_CCNAME);
65b44de
             
65b44de
-            if (new_ccname == NULL) {
65b44de
+            if ((new_ccname == NULL) || (new_ccname[0] == '\0')) {
65b44de
                 /* fall back on the default ccache name for the OS */
65b44de
                 new_ccname = new_ccbuf;
65b44de
                 err = get_from_os (new_ccbuf, sizeof (new_ccbuf));
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/os/init_os_ctx.c krb5-1.6.1/src/lib/krb5/os/init_os_ctx.c
65b44de
--- krb5-1.6.1/src/lib/krb5/os/init_os_ctx.c	2007-04-10 17:51:46.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/krb5/os/init_os_ctx.c	2007-05-18 18:32:20.000000000 -0400
65b44de
@@ -196,7 +196,7 @@
65b44de
     if (!secure)
65b44de
     {
65b44de
         char *env = getenv("KRB5_CONFIG");
65b44de
-        if (env)
65b44de
+        if (env && env[0])
65b44de
         {
65b44de
             name = malloc(strlen(env) + 1);
65b44de
             if (!name) return ENOMEM;
65b44de
@@ -250,7 +250,7 @@
65b44de
 	filepath = DEFAULT_SECURE_PROFILE_PATH;
65b44de
     } else { 
65b44de
         filepath = getenv("KRB5_CONFIG");
65b44de
-        if (!filepath) filepath = DEFAULT_PROFILE_PATH;
65b44de
+        if (!filepath || !(filepath[0])) filepath = DEFAULT_PROFILE_PATH;
65b44de
     }
65b44de
 
65b44de
     /* count the distinct filename components */
65b44de
@@ -297,7 +297,7 @@
65b44de
     profile_filespec_t *newfiles;
65b44de
 
65b44de
     file = getenv(KDC_PROFILE_ENV);
65b44de
-    if (file == NULL)
65b44de
+    if ((file == NULL) || (file[0] == '\0'))
65b44de
 	file = DEFAULT_KDC_PROFILE;
65b44de
 
65b44de
     for (count = 0; (*pfiles)[count]; count++)
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/os/ktdefname.c krb5-1.6.1/src/lib/krb5/os/ktdefname.c
65b44de
--- krb5-1.6.1/src/lib/krb5/os/ktdefname.c	2002-09-03 15:29:37.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/krb5/os/ktdefname.c	2007-05-18 19:19:28.000000000 -0400
65b44de
@@ -47,7 +47,7 @@
65b44de
 	    return KRB5_CONFIG_NOTENUFSPACE;
65b44de
 	strcpy(name, krb5_overridekeyname);
65b44de
     } else if ((context->profile_secure == FALSE) &&
65b44de
-	(cp = getenv("KRB5_KTNAME"))) {
65b44de
+	(cp = getenv("KRB5_KTNAME")) && (cp[0] != '\0')) {
65b44de
 	if ((size_t) namesize < (strlen(cp)+1))
65b44de
 	    return KRB5_CONFIG_NOTENUFSPACE;
65b44de
 	strcpy(name, cp);
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/rcache/rc_base.c krb5-1.6.1/src/lib/krb5/rcache/rc_base.c
65b44de
--- krb5-1.6.1/src/lib/krb5/rcache/rc_base.c	2006-06-08 16:01:44.000000000 -0400
65b44de
+++ krb5-1.6.1/src/lib/krb5/rcache/rc_base.c	2007-05-18 19:18:48.000000000 -0400
65b44de
@@ -94,7 +94,7 @@
65b44de
 char * krb5_rc_default_type(krb5_context context)
65b44de
 {
65b44de
     char *s;
65b44de
-    if ((s = getenv("KRB5RCACHETYPE")))
65b44de
+    if ((s = getenv("KRB5RCACHETYPE")) && (s[0] != '\0'))
65b44de
 	return s;
65b44de
     else
65b44de
 	return "dfl";
65b44de
@@ -103,7 +103,7 @@
65b44de
 char * krb5_rc_default_name(krb5_context context)
65b44de
 {
65b44de
     char *s;
65b44de
-    if ((s = getenv("KRB5RCACHENAME")))
65b44de
+    if ((s = getenv("KRB5RCACHENAME")) && (s[0] != '\0'))
65b44de
 	return s;
65b44de
     else
65b44de
 	return (char *) 0;
65b44de
diff -ur krb5-1.6.1/src/lib/krb5/rcache/rc_io.c krb5-1.6.1/src/lib/krb5/rcache/rc_io.c
65b44de
--- krb5-1.6.1/src/lib/krb5/rcache/rc_io.c	2006-12-18 18:11:28.000000000 -0500
65b44de
+++ krb5-1.6.1/src/lib/krb5/rcache/rc_io.c	2007-05-18 18:32:20.000000000 -0400
65b44de
@@ -47,7 +47,7 @@
65b44de
 {
65b44de
     char *dir;
65b44de
 
65b44de
-    if (!(dir = getenv("KRB5RCACHEDIR"))) {
65b44de
+    if (!(dir = getenv("KRB5RCACHEDIR")) || !dir[0]) {
65b44de
 #if defined(_WIN32)
65b44de
 	if (!(dir = getenv("TEMP")))
65b44de
 	    if (!(dir = getenv("TMP")))