[PATCH] contrib/cygwin/ssh-host-config: Handle lastlog with more care

Corinna Vinschen vinschen at redhat.com
Fri Mar 3 20:13:18 EST 2006


Hi,

below is a patch to Cygwin's ssh-host-config file.  So far this script
allowed to have a lastlog file as well as a lastlog dir, whatever the
user preferred.  This is no problem as long as ssh is the only
application using lastlog, but that's nothing we can be sure about, so
we decided to restrict lastlog to being a file in a Cygwin installation.
This also allows reliable porting and use of Linux tools like lastlog(1)
which is only aware of lastlog being a file.

Consequentially, the ssh-host-config script must handle lastlog with
some greater care than before and refuse to allow a lastlog dir.
Additionally the lastlog file doesn't get a 666 access mask anymore, but
it's chowned to the user account starting the service and gets a 644
access mask now for security reasons.

Could this be applied?


Thanks,
Corinna

--- ssh-host-config.ORIG	2006-02-28 13:24:32.248566300 +0100
+++ ssh-host-config	2006-02-28 13:32:22.168803900 +0100
@@ -153,22 +153,31 @@ fi
 
 # Create /var/log and /var/log/lastlog if not already existing
 
-if [ -f ${LOCALSTATEDIR}/log ]
+if [ -e ${LOCALSTATEDIR}/log -a ! -d ${LOCALSTATEDIR}/log ]
 then
-  echo "Creating ${LOCALSTATEDIR}/log failed!"
-else
-  if [ ! -d ${LOCALSTATEDIR}/log ]
-  then
-    mkdir -p ${LOCALSTATEDIR}/log
-  fi
-  if [ -d ${LOCALSTATEDIR}/log/lastlog ]
-  then
-    chmod 777 ${LOCALSTATEDIR}/log/lastlog
-  elif [ ! -f ${LOCALSTATEDIR}/log/lastlog ]
-  then
-    cat /dev/null > ${LOCALSTATEDIR}/log/lastlog
-    chmod 666 ${LOCALSTATEDIR}/log/lastlog
-  fi
+  echo
+  echo "${LOCALSTATEDIR}/log is existant but not a directory."
+  echo "Cannot create ssh host configuration."
+  echo
+  exit 1
+fi
+if [ ! -e ${LOCALSTATEDIR}/log ]
+then
+  mkdir -p ${LOCALSTATEDIR}/log
+fi
+
+if [ -e ${LOCALSTATEDIR}/log/lastlog -a ! -f ${LOCALSTATEDIR}/log/lastlog ]
+then
+  echo 
+  echo "${LOCALSTATEDIR}/log/lastlog exists, but is not a file."
+  echo "Cannot create ssh host configuration."
+  echo 
+  exit 1
+fi
+if [ ! -e ${LOCALSTATEDIR}/log/lastlog ]
+then
+  cat /dev/null > ${LOCALSTATEDIR}/log/lastlog
+  chmod 644 ${LOCALSTATEDIR}/log/lastlog
 fi
 
 # Create /var/empty file used as chroot jail for privilege separation
@@ -578,6 +587,7 @@ then
       fi
       chown "${_user}" ${SYSCONFDIR}/ssh*
       chown "${_user}".544 ${LOCALSTATEDIR}/empty
+      chown "${_user}".544 ${LOCALSTATEDIR}/log/lastlog
       if [ -f ${LOCALSTATEDIR}/log/sshd.log ]
       then
 	chown "${_user}".544 ${LOCALSTATEDIR}/log/sshd.log

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat




More information about the openssh-unix-dev mailing list