Corinna Vinschen
2014-Aug-14 12:15 UTC
Problem with enabling /etc/default(s)/login on Cygwin
Hi, below is a patch which simply removes a Cygwin-specific piece of code from OpenSSH. Input from a system admin educated me how useful this option could be on Cygwin as well. However, way back when the call to read_etc_default_login got disabled on Cygwin hardcoded in session.c, rather than just setting --disable-etc-default-login when building the Cygwin version of OpenSSH. So, here's the patch which simply re-enables reading /etc/default/login on Cygwin. However, even when removing this Cygwin-specific patch, there's still a problem. On Cygwin the path is not /etc/default, but /etc/defaults. Note the trailing "s". The problem is, the path to the default login file is not configurable. Would it be much of a problem to make the path to this file configurable? I'm also wondering if the configure test for /etc/default/login is really doing the right thing. What happens is: - If --disable-etc-default-login is set, no support for /etc/default/login - If nothing is given on the command line, check for /etc/default/login. If it's available support it, otherwise don't. So far, so good, but this one is a problem IMHO: - If --enable-etc-default-login is set, configure *still* checks for /etc/default/login. That's not correct, AFAICS. Even if the package maintainer *explicitely* enabled /etc/default/login support, the configure script makes the sshd code only supports /etc/default/login if the file existed on the maintainer's machine at configure time. This is very unreliable and the result is puzzeling. Shouldn't configure.ac be changed like this: if --disable-etc-default-login is given etc_default_login=no else if --enable-etc-default-login is given etc_default_login=yes external_path_file=/etc/default/login AC_DEFINE([HAVE_ETC_DEFAULT_LOGIN], [1], ... else if cross_compiling etc_default_login=no else if AC_CHECK_FILE(["/etc/default/login"] etc_default_login=yes else etc_default_login=no ??? Thanks, Corinna Index: session.c ==================================================================RCS file: /cvs/openssh/session.c,v retrieving revision 1.434 diff -u -p -r1.434 session.c --- session.c 18 Jul 2014 04:11:26 -0000 1.434 +++ session.c 14 Aug 2014 11:29:58 -0000 @@ -1188,13 +1188,6 @@ do_setup_env(Session *s, const char *she else child_set_env(&env, &envsize, "PATH", getenv("PATH")); #else /* HAVE_LOGIN_CAP */ -# ifndef HAVE_CYGWIN - /* - * There's no standard path on Windows. The path contains - * important components pointing to the system directories, - * needed for loading shared libraries. So the path better - * remains intact here. - */ # ifdef HAVE_ETC_DEFAULT_LOGIN read_etc_default_login(&env, &envsize, pw->pw_uid); path = child_get_env(env, "PATH"); @@ -1204,7 +1197,6 @@ do_setup_env(Session *s, const char *she s->pw->pw_uid == 0 ? SUPERUSER_PATH : _PATH_STDPATH); } -# endif /* HAVE_CYGWIN */ #endif /* HAVE_LOGIN_CAP */ snprintf(buf, sizeof buf, "%.200s/%.50s", -- Corinna Vinschen Cygwin Maintainer Red Hat -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.mindrot.org/pipermail/openssh-unix-dev/attachments/20140814/25d030db/attachment.bin>
Reasonably Related Threads
- Problems with OpenSSH 2.5.1p1 on Solaris 8
- openssh 3.7p1 bus error on sparcv9
- [Bug 453] New: [PATCH] The SHELL env variable is set incorrectly, when shell is overridden from login.conf.
- [Bug 101] New: session.c modifications for correct UNICOS behavior
- Bus Error with openssh 3.7.1p1 on 64-bit Sparc/Solaris