SSHD - Do not attempt to free environ or its contents
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 16 Nov 2009 02:38:11 +0000 (18:38 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 16 Nov 2009 02:38:11 +0000 (18:38 -0800)
* DragonFly's libc manages environ in such a way that if sshd attempts to
  free it, libc blows up and causes sshd to crash.

* This may not be the best fix but for now I really do not want to
  completely rewrite libc's environment handling code.

Reported-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>
crypto/openssh/session.c

index 3a0443a..2c3ccda 100644 (file)
@@ -1194,9 +1194,15 @@ do_setup_env(Session *s, const char *shell)
                (void) setusercontext(lc, pw, pw->pw_uid,
                    LOGIN_SETENV|LOGIN_SETPATH);
                copy_environment(environ, &env, &envsize);
+#if 0
+               /*
+                * This interferes with libc's management of the environment
+                * in horrible ways that can cause sshd to crash.
+                */
                for (var = environ; *var != NULL; ++var)
                        xfree(*var);
                xfree(environ);
+#endif
                environ = senv;
 #else /* HAVE_LOGIN_CAP */
 # ifndef HAVE_CYGWIN