cvsdist 68d4ec4
Start with only TERM defined in the environment, like NetKit rlogind does, and
cvsdist 68d4ec4
KRB5CCNAME, which we set ourselves.
cvsdist 0b77dc9
--- krb5-1.3/src/appl/bsd/krlogind.c
cvsdist 0b77dc9
+++ krb5-1.3/src/appl/bsd/krlogind.c
cvsdist 0b77dc9
@@ -713,6 +713,9 @@
cvsdist 0b77dc9
 #else
cvsdist 0b77dc9
 	struct sgttyb b;
cvsdist 0b77dc9
 #endif /* POSIX_TERMIOS */
cvsdist 0b77dc9
+	char environ_term[sizeof(term) + 6], environ_ccname[sizeof(environ_term)];
cvsdist 0b77dc9
+	char *bare_environ[] = {environ_term, environ_ccname, NULL};
cvsdist 0b77dc9
+
cvsdist 0b77dc9
 	if ((retval = pty_open_slave(line, &t))) {
cvsdist 0b77dc9
 	    fatal(f, error_message(retval));
cvsdist 0b77dc9
 	    exit(1);
cvsdist 0b77dc9
@@ -819,11 +822,15 @@
cvsdist 0b77dc9
 /* use the vendors login, which has -p and -f. Tested on 
cvsdist 0b77dc9
  * AIX 4.1.4 and HPUX 10 
cvsdist 0b77dc9
  */
cvsdist 0b77dc9
+    memset(environ_term, '\0', sizeof(environ_term));
cvsdist 0b77dc9
+    memset(environ_ccname, '\0', sizeof(environ_ccname));
cvsdist 0b77dc9
+    if (getenv("KRB5CCNAME") != NULL)
cvsdist 0b77dc9
+      snprintf(environ_ccname, sizeof(environ_ccname) - 1, "KRB5CCNAME=%s", getenv("KRB5CCNAME"));
cvsdist 0b77dc9
     {
cvsdist 0b77dc9
         char *cp;
cvsdist 68d4ec4
-        if ((cp = strchr(term,'/')))
cvsdist 68d4ec4
-            *cp = '\0';
cvsdist 0b77dc9
-        setenv("TERM",term, 1);
cvsdist 0b77dc9
+        snprintf(environ_term, sizeof(environ_term) - 1, "TERM=%s", term);
cvsdist 68d4ec4
+        if ((cp = strchr(environ_term,'/')))
cvsdist 68d4ec4
+            *cp = '\0';
cvsdist 0b77dc9
     }
cvsdist 0b77dc9
 
cvsdist 0b77dc9
     retval = pty_make_sane_hostname((struct sockaddr *) fromp, maxhostlen,
cvsdist 0b77dc9
@@ -832,13 +839,13 @@
cvsdist 0b77dc9
     if (retval)
cvsdist 0b77dc9
         fatalperror(f, "failed make_sane_hostname");
cvsdist 0b77dc9
     if (passwd_req)
cvsdist 0b77dc9
-        execl(login_program, "login", "-p", "-h", rhost_sane,
2e8f6b3
-          lusername, (char *)NULL);
cvsdist 0b77dc9
+        execle(login_program, "login", "-p", "-h", rhost_sane,
cvsdist 68d4ec4
+          lusername, NULL, bare_environ);
cvsdist 0b77dc9
     else
cvsdist 0b77dc9
-        execl(login_program, "login", "-p", "-h", rhost_sane,
2e8f6b3
-             "-f", lusername, (char *)NULL);
cvsdist 0b77dc9
+        execle(login_program, "login", "-p", "-h", rhost_sane,
cvsdist 68d4ec4
+             "-f", lusername, NULL, bare_environ);
cvsdist 0b77dc9
 #else /* USE_LOGIN_F */
2e8f6b3
-	execl(login_program, "login", "-r", rhost_sane, (char *)NULL);
cvsdist 68d4ec4
+	execle(login_program, "login", "-r", rhost_sane, NULL, bare_environ);
cvsdist 0b77dc9
 #endif /* USE_LOGIN_F */
cvsdist 0b77dc9
 	syslog(LOG_ERR, "failed exec of %s: %s",
cvsdist 0b77dc9
 	       login_program, error_message(errno));