[PATCH] contrib/cygwin/ssh-host-config: Fix a CRLF/LF issue

Corinna Vinschen vinschen at redhat.com
Thu Oct 30 21:20:02 EST 2003


Hi,

could somebody apply the below patch to contrib/cygwin/ssh-host-config?
The patch solves a problem with the way, the Windows pendant of the
/etc/services file is used.

This file has (obviously) CRLF line endings.  The ssh-host-config file
tries to accomodate that when adding the ssh service entries but I never
reviewed this functionality in the light of some major changes in the
Cygwin DLL.

The result is, that on recent Cygwin releases (with "recent" probably
around a year or so), the script fails under specific conditions to create
CRLF line endings, just adding these entries with LFs.

Funny enough, the related Winsock functions getservbyname and getservbyport
have no problems to read these entries on all versions of Windows... except
on the good old Windows 95, which tends to SEGV when trying to read these
entries.  Oh boy...

Anyway, the below patch to ssh-host-config accomplishes CRLFs again under
all conditions.

Thanks in advance,
Corinna

Index: contrib/cygwin/ssh-host-config
===================================================================
RCS file: /cvs/openssh_cvs/contrib/cygwin/ssh-host-config,v
retrieving revision 1.11
diff -p -u -r1.11 ssh-host-config
--- contrib/cygwin/ssh-host-config	22 Sep 2003 02:32:01 -0000	1.11
+++ contrib/cygwin/ssh-host-config	30 Oct 2003 10:18:22 -0000
@@ -468,19 +468,21 @@ then
 fi
 
 # Care for services file
+_my_etcdir="/ssh-host-config.$$"
 if [ $_nt -gt 0 ]
 then
-  _wservices="${SYSTEMROOT}\\system32\\drivers\\etc\\services"
-  _wserv_tmp="${SYSTEMROOT}\\system32\\drivers\\etc\\srv.out.$$"
+  _win_etcdir="${SYSTEMROOT}\\system32\\drivers\\etc"
+  _services="${_my_etcdir}/services"
 else
-  _wservices="${WINDIR}\\SERVICES"
-  _wserv_tmp="${WINDIR}\\SERV.$$"
+  _win_etcdir="${WINDIR}"
+  _services="${_my_etcdir}/SERVICES"
 fi
-_services=`cygpath -u "${_wservices}"`
-_serv_tmp=`cygpath -u "${_wserv_tmp}"`
+_serv_tmp="${_my_etcdir}/srv.out.$$"
 
-mount -t -f "${_wservices}" "${_services}"
-mount -t -f "${_wserv_tmp}" "${_serv_tmp}"
+mount -t -f "${_win_etcdir}" "${_my_etcdir}"
+
+# Depends on the above mount
+_wservices=`cygpath -w "${_services}"`
 
 # Remove sshd 22/port from services
 if [ `grep -q 'sshd[ \t][ \t]*22' "${_services}"; echo $?` -eq 0 ]
@@ -490,13 +492,13 @@ then
   then 
     if mv "${_serv_tmp}" "${_services}"
     then
-      echo "Removing sshd from ${_services}"
+      echo "Removing sshd from ${_wservices}"
     else
-      echo "Removing sshd from ${_services} failed\!"
+      echo "Removing sshd from ${_wservices} failed\!"
     fi 
     rm -f "${_serv_tmp}"
   else
-    echo "Removing sshd from ${_services} failed\!"
+    echo "Removing sshd from ${_wservices} failed\!"
   fi
 fi
 
@@ -508,18 +510,17 @@ then
   then
     if mv "${_serv_tmp}" "${_services}"
     then
-      echo "Added ssh to ${_services}"
+      echo "Added ssh to ${_wservices}"
     else
-      echo "Adding ssh to ${_services} failed\!"
+      echo "Adding ssh to ${_wservices} failed\!"
     fi
     rm -f "${_serv_tmp}"
   else
-    echo "Adding ssh to ${_services} failed\!"
+    echo "Adding ssh to ${_wservices} failed\!"
   fi
 fi
 
-umount "${_services}"
-umount "${_serv_tmp}"
+umount "${_my_etcdir}"
 
 # Care for inetd.conf file
 _inetcnf="${SYSCONFDIR}/inetd.conf"

-- 
Corinna Vinschen
Cygwin Developer
Red Hat, Inc.




More information about the openssh-unix-dev mailing list