e01ed66
--- openssh-3.9p1/log.h.log-chroot	2006-02-22 10:54:04.000000000 +0100
e01ed66
+++ openssh-3.9p1/log.h	2006-02-22 10:53:29.000000000 +0100
e01ed66
@@ -63,4 +63,6 @@
e01ed66
 
e01ed66
 void	 do_log(LogLevel, const char *, va_list);
e01ed66
 void	 cleanup_exit(int) __dead;
e01ed66
+
e01ed66
+void     open_log(void);
e01ed66
 #endif
e01ed66
--- openssh-3.9p1/log.c.log-chroot	2006-02-22 13:29:48.000000000 +0100
e01ed66
+++ openssh-3.9p1/log.c	2006-02-22 10:56:01.000000000 +0100
e01ed66
@@ -48,6 +48,7 @@
e01ed66
 static int log_on_stderr = 1;
e01ed66
 static int log_facility = LOG_AUTH;
e01ed66
 static char *argv0;
e01ed66
+static int log_fd_keep;
e01ed66
 
e01ed66
 extern char *__progname;
e01ed66
 
e01ed66
@@ -330,9 +331,20 @@
e01ed66
 		syslog_r(pri, &sdata, "%.500s", fmtbuf);
e01ed66
 		closelog_r(&sdata);
e01ed66
 #else
e01ed66
+	    if (!log_fd_keep) {
e01ed66
 		openlog(argv0 ? argv0 : __progname, LOG_PID, log_facility);
e01ed66
+	    }
e01ed66
 		syslog(pri, "%.500s", fmtbuf);
e01ed66
+	    if (!log_fd_keep) {
e01ed66
 		closelog();
e01ed66
+	    }
e01ed66
 #endif
e01ed66
 	}
e01ed66
 }
e01ed66
+
e01ed66
+void
e01ed66
+open_log(void)
e01ed66
+{
e01ed66
+	openlog(argv0 ? argv0 : __progname, LOG_PID|LOG_NDELAY, log_facility);
e01ed66
+	log_fd_keep = 1;
e01ed66
+}
e01ed66
--- openssh-3.9p1/sshd.c.log-chroot	2006-01-11 13:42:32.000000000 +0100
e01ed66
+++ openssh-3.9p1/sshd.c	2006-02-22 18:58:24.000000000 +0100
e01ed66
@@ -565,6 +565,10 @@
e01ed66
 	memset(pw->pw_passwd, 0, strlen(pw->pw_passwd));
e01ed66
 	endpwent();
e01ed66
 
e01ed66
+	/* Open the syslog permanently so the chrooted process still
e01ed66
+	   can write to syslog. */
e01ed66
+	open_log();
e01ed66
+	
e01ed66
 	/* Change our root directory */
e01ed66
 	if (chroot(_PATH_PRIVSEP_CHROOT_DIR) == -1)
e01ed66
 		fatal("chroot(\"%s\"): %s", _PATH_PRIVSEP_CHROOT_DIR,