- (djm) Automatically generate host key during "make install". Suggested
   by Gary E. Miller <gem@rellim.com>
 - (djm) Paranoia before kill() system call
diff --git a/ChangeLog b/ChangeLog
index 4d76c13..c35b736 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+20000622
+ - (djm) Automatically generate host key during "make install". Suggested
+   by Gary E. Miller <gem@rellim.com>
+ - (djm) Paranoia before kill() system call
+
 20000620
  - (djm) Replace use of '-o' and '-a' logical operators in configure tests
    with '||' and '&&'. As suggested by Jim Knoble <jmknoble@pint-stowp.cx> 
diff --git a/Makefile.in b/Makefile.in
index b18444d..f5af10d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -112,7 +112,9 @@
 			>$${f%%.[18]}.0 ; \
 	done
 
-install: manpages $(TARGETS)
+install: manpages $(TARGETS) install-files host-key
+
+install-files:
 	./mkinstalldirs $(DESTDIR)$(bindir)
 	./mkinstalldirs $(DESTDIR)$(sbindir)
 	./mkinstalldirs $(DESTDIR)$(mandir)
@@ -134,7 +136,6 @@
 	ln -s ssh $(DESTDIR)$(bindir)/slogin
 	-rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/slogin.1
 	ln -s ssh.1 $(DESTDIR)$(mandir)/$(mansubdir)1/slogin.1
-
 	if [ ! -f $(DESTDIR)$(sysconfdir)/ssh_config -a ! -f $(DESTDIR)$(sysconfdir)/sshd_config ]; then \
 		./mkinstalldirs $(DESTDIR)$(sysconfdir); \
 		$(INSTALL) -m 644 ssh_config.out $(DESTDIR)$(sysconfdir)/ssh_config; \
@@ -146,6 +147,18 @@
 	fi
 
 host-key: ssh-keygen
+	if [ -f "$(sysconfdir)/ssh_host_key" ] ; then \
+		echo "$(sysconfdir)/ssh_host_key already exists, skipping." ; \
+	else \
+		./ssh-keygen -b 1024 -f $(sysconfdir)/ssh_host_key -N "" ; \
+	fi ; \
+	if [ -f $(sysconfdir)/ssh_host_dsa_key ] ; then \
+		echo "$(sysconfdir)/ssh_host_dsa_key already exists, skipping." ; \
+	else \
+		./ssh-keygen -d -f $(sysconfdir)/ssh_host_dsa_key -N "" ; \
+	fi ;
+
+host-key-force: ssh-keygen
 	./ssh-keygen -b 1024 -f $(sysconfdir)/ssh_host_key -N ""
 	./ssh-keygen -d -f $(sysconfdir)/ssh_host_dsa_key -N ""
 
diff --git a/session.c b/session.c
index 64e240b..0026523 100644
--- a/session.c
+++ b/session.c
@@ -1608,7 +1608,9 @@
 		session_close(s);
 	} else {
 		/* notify child, delay session cleanup */
-		if (kill(s->pid, (s->ttyfd == -1) ? SIGTERM : SIGHUP) < 0)
+		if (s->pid <= 1) 
+			error("session_close_by_channel: Unsafe s->pid = %d", s->pid);
+		else if (kill(s->pid, (s->ttyfd == -1) ? SIGTERM : SIGHUP) < 0)
 			error("session_close_by_channel: kill %d: %s",
 			    s->pid, strerror(errno));
 	}