From fe1d100ffdf3595f3aaddc02efbf0b49a265d90c Mon Sep 17 00:00:00 2001 From: Tim Rice Date: Mon, 26 Nov 2001 17:19:43 -0800 Subject: [PATCH] [contrib/cygwin/README, openbsd-compat/bsd-cygwin_util.c, openbsd-compat/bsd-cygwin_util.h, openbsd-compat/daemon.c] Allow SSHD to install as service under WIndows 9x/Me [configure.ac] Fix to allow linking against PCRE on Cygwin Patches by Corinna Vinschen --- ChangeLog | 9 +++++- configure.ac | 47 ++++++++++++++++++++++++-------- contrib/cygwin/README | 14 +++++++--- openbsd-compat/bsd-cygwin_util.c | 24 +++++++++++++++- openbsd-compat/bsd-cygwin_util.h | 3 +- openbsd-compat/daemon.c | 3 ++ 6 files changed, 82 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 29dd78413..6a7b4ccb5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +20011126 + - (tim) [contrib/cygwin/README, openbsd-compat/bsd-cygwin_util.c, + openbsd-compat/bsd-cygwin_util.h, openbsd-compat/daemon.c] + Allow SSHD to install as service under WIndows 9x/Me + [configure.ac] Fix to allow linking against PCRE on Cygwin + Patches by Corinna Vinschen + 20011115 - (djm) Fix IPv4 default in ssh-keyscan. Spotted by Dan Astoorian Fix from markus@ @@ -6912,4 +6919,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1665 2001/11/15 12:16:50 djm Exp $ +$Id: ChangeLog,v 1.1666 2001/11/27 01:19:43 tim Exp $ diff --git a/configure.ac b/configure.ac index e1844eb56..d86a2062d 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# $Id: configure.ac,v 1.4 2001/11/03 19:09:33 tim Exp $ +# $Id: configure.ac,v 1.5 2001/11/27 01:19:43 tim Exp $ AC_INIT AC_CONFIG_SRCDIR([ssh.c]) @@ -65,7 +65,7 @@ case "$host" in AC_DEFINE(DISABLE_LASTLOG) ;; *-*-cygwin*) - LIBS="$LIBS -lregex /usr/lib/textmode.o" + LIBS="$LIBS /usr/lib/textmode.o" AC_DEFINE(HAVE_CYGWIN) AC_DEFINE(USE_PIPES) AC_DEFINE(DISABLE_SHADOW) @@ -401,18 +401,43 @@ AC_CHECK_LIB(z, deflate, ,AC_MSG_ERROR([*** zlib missing - please install first # We don't want to check if we did an pcre override. if test -z "$no_comp_check" ; then AC_CHECK_FUNC(regcomp, - [ AC_DEFINE(HAVE_REGCOMP)], [ - AC_CHECK_LIB(pcre, pcre_info, - [ - AC_DEFINE(HAVE_LIBPCRE) - LIBS="$LIBS -lpcreposix -lpcre" - ], - [ - AC_MSG_ERROR([*** No regex library found.]) - ]) + AC_CHECK_FUNC(regsub, + [ + has_regcomp=no + ], + [ + AC_DEFINE(HAVE_REGCOMP) + has_regcomp=yes + ] + ) + ], + [ + has_regcomp=no ] ) + # Either regcomp wasn't defined or regsub is defined (which means + # that the libc regex is probably an old non-POSIX implementation. + # Now check for -lregex and -lpcreposix to find some usable regex + # implementation. + if test "$has_regcomp" = "no" ; then + AC_CHECK_LIB(regex, regcomp, + [ + AC_DEFINE(HAVE_REGCOMP) + LIBS="$LIBS -lregex" + ], + [ + AC_CHECK_LIB(pcre, pcre_info, + [ + AC_DEFINE(HAVE_LIBPCRE) + LIBS="$LIBS -lpcreposix -lpcre" + ], + [ + AC_MSG_ERROR([*** No regex library found.]) + ]) + ] + ) + fi fi dnl UnixWare 2.x diff --git a/contrib/cygwin/README b/contrib/cygwin/README index dfe178679..7f7f9a33c 100644 --- a/contrib/cygwin/README +++ b/contrib/cygwin/README @@ -1,5 +1,13 @@ This package is the actual port of OpenSSH to Cygwin 1.3. +=========================================================================== +Important change since 3.0.1p1-2: + +This version introduces the ability to register sshd as service on +Windows 9x/Me systems. This is done only when the options -D and/or +-d are not given. +=========================================================================== + =========================================================================== Important change since 2.9p2: @@ -162,12 +170,10 @@ configure are used for the Cygwin binary distribution: --prefix=/usr \ --sysconfdir=/etc \ - --libexecdir='${exec_prefix}/sbin \ - --with-pcre + --libexecdir='${exec_prefix}/sbin' You must have installed the zlib, openssl and regex packages to -be able to build OpenSSH! The `--with-pcre' option requires -the installation of the pcre package. +be able to build OpenSSH! Please send requests, error reports etc. to cygwin@cygwin.com. diff --git a/openbsd-compat/bsd-cygwin_util.c b/openbsd-compat/bsd-cygwin_util.c index 87f36c0cb..6d6aafa4f 100644 --- a/openbsd-compat/bsd-cygwin_util.c +++ b/openbsd-compat/bsd-cygwin_util.c @@ -15,7 +15,7 @@ #include "includes.h" -RCSID("$Id: bsd-cygwin_util.c,v 1.5 2001/07/18 16:19:49 mouring Exp $"); +RCSID("$Id: bsd-cygwin_util.c,v 1.6 2001/11/27 01:19:44 tim Exp $"); #ifdef HAVE_CYGWIN @@ -139,4 +139,26 @@ int check_ntsec(const char *filename) return 0; } +void register_9x_service(void) +{ + HINSTANCE kerneldll; + DWORD (*RegisterServiceProcess)(DWORD, DWORD); + + /* The service register mechanism in 9x/Me is pretty different from + * NT/2K/XP. In NT/2K/XP we're using a special service starter + * application to register and control sshd as service. This method + * doesn't play nicely with 9x/Me. For that reason we register here + * as service when running under 9x/Me. This function is only called + * by the child sshd when it's going to daemonize. + */ + if (is_winnt) + return; + if (! (kerneldll = LoadLibrary("KERNEL32.DLL"))) + return; + if (! (RegisterServiceProcess = (DWORD (*)(DWORD, DWORD)) + GetProcAddress(kerneldll, "RegisterServiceProcess"))) + return; + RegisterServiceProcess(0, 1); +} + #endif /* HAVE_CYGWIN */ diff --git a/openbsd-compat/bsd-cygwin_util.h b/openbsd-compat/bsd-cygwin_util.h index 7879501e0..24063d311 100644 --- a/openbsd-compat/bsd-cygwin_util.h +++ b/openbsd-compat/bsd-cygwin_util.h @@ -13,7 +13,7 @@ * binary mode on Windows systems. */ -/* $Id: bsd-cygwin_util.h,v 1.4 2001/04/13 14:28:43 djm Exp $ */ +/* $Id: bsd-cygwin_util.h,v 1.5 2001/11/27 01:19:44 tim Exp $ */ #ifndef _BSD_CYGWIN_UTIL_H #define _BSD_CYGWIN_UTIL_H @@ -26,6 +26,7 @@ int binary_open(const char *filename, int flags, ...); int binary_pipe(int fd[2]); int check_nt_auth(int pwd_authenticated, uid_t uid); int check_ntsec(const char *filename); +void register_9x_service(void); #define open binary_open #define pipe binary_pipe diff --git a/openbsd-compat/daemon.c b/openbsd-compat/daemon.c index f704a9048..7d23b2467 100644 --- a/openbsd-compat/daemon.c +++ b/openbsd-compat/daemon.c @@ -49,6 +49,9 @@ daemon(nochdir, noclose) case -1: return (-1); case 0: +#ifdef HAVE_CYGWIN + register_9x_service(); +#endif break; default: #ifdef HAVE_CYGWIN