Patch for UnixWare 7
Ahsan Rashid
arms at sco.com
Sat Aug 27 01:17:12 EST 2005
Hi Openssh developers,
Attached please find patch to support long passwords (> 8-char) on
UnixWare 7.
Thanks,
Ahsan
--
Ahsan Rashid
Escalations Research Group arms at sco.com
The SCO Group Inc., Murray Hill, NJ 908 790 2279
-------------- next part --------------
--- openssh/CREDITS.old 2004-05-26 16:59:31.000000000 -0700
+++ openssh/CREDITS 2005-08-25 13:53:08.602447006 -0700
@@ -3,6 +3,7 @@
Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos,
Theo de Raadt, and Dug Song - Creators of OpenSSH
+Ahsan Rashid <arms at sco.com> - UnixWare long passwords
Alain St-Denis <Alain.St-Denis at ec.gc.ca> - Irix fix
Alexandre Oliva <oliva at lsd.ic.unicamp.br> - AIX fixes
Andre Lucas <andre at ae-35.com> - new login code, many fixes
@@ -32,6 +33,7 @@
David Hesprich <darkgrue at gue-tech.org> - Configure fixes
David Rankin <drankin at bohemians.lexington.ky.us> - libwrap, AIX, NetBSD fixes
Dag-Erling Sm?rgrav <des at freebsd.org> - Challenge-Response PAM code.
+Dhiraj Gulati <dgulati at sco.com> - UnixWare long passwords
Ed Eden <ede370 at stl.rural.usda.gov> - configure fixes
Garrick James <garrick at james.net> - configure fixes
Gary E. Miller <gem at rellim.com> - SCO support
--- openssh/LICENCE.old 2005-08-15 12:49:38.213360001 -0700
+++ openssh/LICENCE 2005-08-25 13:55:28.242447017 -0700
@@ -204,6 +204,7 @@
William Jones
Darren Tucker
Sun Microsystems
+ The SCO Group
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
--- openssh/auth.c.old 2005-06-17 08:29:12.595619001 -0700
+++ openssh/auth.c 2005-08-25 21:15:06.270527016 -0700
@@ -97,7 +97,11 @@
/* grab passwd field for locked account check */
#ifdef USE_SHADOW
if (spw != NULL)
+#ifdef HAVE_LIBIAF
+ passwd = get_iaf_password(pw);
+#else
passwd = spw->sp_pwdp;
+#endif /* HAVE_LIBIAF */
#else
passwd = pw->pw_passwd;
#endif
--- openssh/configure.ac.old 2005-08-23 17:11:26.000000000 -0700
+++ openssh/configure.ac 2005-08-24 16:51:30.297680013 -0700
@@ -446,6 +446,8 @@
;;
# UnixWare 7.x, OpenUNIX 8
*-*-sysv5*)
+ check_for_libcrypt_later=1
+ AC_DEFINE(UNIXWARE_LONG_PASSWORDS, 1, [Support passwords > 8 chars])
AC_DEFINE(USE_PIPES)
AC_DEFINE(SETEUID_BREAKS_SETUID)
AC_DEFINE(BROKEN_SETREUID)
@@ -643,6 +645,7 @@
getopt.h \
glob.h \
ia.h \
+ iaf.h \
lastlog.h \
limits.h \
login.h \
@@ -1721,6 +1724,7 @@
AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
fi
+AC_CHECK_LIB(iaf, ia_openinfo)
### Configure cryptographic random number support
--- openssh/defines.h.old 2005-08-23 17:18:21.000000000 -0700
+++ openssh/defines.h 2005-08-24 16:51:30.367680004 -0700
@@ -688,6 +688,10 @@
# define CUSTOM_SYS_AUTH_PASSWD 1
#endif
+#ifdef UNIXWARE_LONG_PASSWORDS
+# define CUSTOM_SYS_AUTH_PASSWD 1
+#endif
+
/* HP-UX 11.11 */
#ifdef BTMP_FILE
# define _PATH_BTMP BTMP_FILE
--- openssh/includes.h.old 2005-08-23 11:02:30.213506000 -0700
+++ openssh/includes.h 2005-08-24 16:51:30.387680002 -0700
@@ -169,6 +169,10 @@
# include <ia.h>
#endif
+#ifdef HAVE_IAF_H
+# include <iaf.h>
+#endif
+
#ifdef HAVE_TMPDIR_H
# include <tmpdir.h>
#endif
--- openssh/openbsd-compat/Makefile.in.old 2005-06-13 15:36:16.322790000 -0700
+++ openssh/openbsd-compat/Makefile.in 2005-08-24 16:51:30.417680000 -0700
@@ -20,7 +20,7 @@
COMPAT=bsd-arc4random.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-snprintf.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xmmap.o xcrypt.o
-PORTS=port-irix.o port-aix.o
+PORTS=port-irix.o port-aix.o port-uw.o
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
--- openssh/openbsd-compat/openbsd-compat.h.old 2005-06-17 08:29:17.605619000 -0700
+++ openssh/openbsd-compat/openbsd-compat.h 2005-08-25 20:51:19.325407005 -0700
@@ -173,5 +173,6 @@
#include "bsd-cygwin_util.h"
#include "port-irix.h"
#include "port-aix.h"
+#include "port-uw.h"
#endif /* _OPENBSD_COMPAT_H */
--- /dev/null 2005-08-25 21:20:32.000000000 -0700
+++ openssh/openbsd-compat/port-uw.c 2005-08-25 21:06:16.925487004 -0700
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2005 The SCO Group. All rights reserved.
+ * Copyright (c) 2005 Tim Rice. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "includes.h"
+
+#ifdef UNIXWARE_LONG_PASSWORDS
+#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#endif
+#include "packet.h"
+#include "buffer.h"
+#include "log.h"
+#include "servconf.h"
+#include "auth.h"
+#include "auth-options.h"
+
+int nischeck(char *);
+
+int
+sys_auth_passwd(Authctxt *authctxt, const char *password)
+{
+ struct passwd *pw = authctxt->pw;
+ char *encrypted_password;
+ char *salt;
+
+ /* Just use the supplied fake password if authctxt is invalid */
+ char *pw_password = authctxt->valid ? shadow_pw(pw) : pw->pw_passwd;
+
+ /* Check for users with no password. */
+ if (strcmp(pw_password, "") == 0 && strcmp(password, "") == 0)
+ return (1);
+
+ salt = (pw_password[0] && pw_password[1]) ? pw_password : "xx";
+ if (nischeck(pw->pw_name))
+ return(strcmp(crypt(password, salt), pw_password) == 0);
+ else
+ return(strcmp(bigcrypt(password, salt), pw_password) == 0);
+}
+
+int
+nischeck(char *namep)
+{
+ char password_file[] = "/etc/passwd";
+ FILE *fd;
+ struct passwd *ent = NULL;
+
+ if ((fd = fopen (password_file, "r")) == NULL) {
+ /*
+ * If the passwd file has dissapeared we are in a bad state.
+ * However, returning 0 will send us back throught the
+ * authentication scheme that has checked the ia database for
+ * passwords earlier.
+ */
+ return(0);
+ }
+
+ /*
+ * fgetpwent() only reads from password file, so we know for certain
+ * that the user is local.
+ */
+ while (ent = fgetpwent(fd)) {
+ if (strcmp (ent->pw_name, namep) == 0) {
+ /* Local user */
+ fclose (fd);
+ return(0);
+ }
+ }
+
+ fclose (fd);
+ return (1);
+}
+
+#endif /* UNIXWARE_LONG_PASSWORDS */
+
+#ifdef HAVE_LIBIAF
+char *
+get_iaf_password(struct passwd *pw)
+{
+ char *pw_password = NULL;
+
+ uinfo_t uinfo;
+ if(!ia_openinfo(pw->pw_name,&uinfo))
+ {
+ ia_get_logpwd(uinfo, &pw_password);
+ if(pw_password == NULL)
+ fatal("Unable to get the shadow passwd");
+ ia_closeinfo(uinfo);
+ return pw_password;
+ }
+ else
+ fatal("Unable to open the shadow passwd file");
+}
+#endif /* HAVE_LIBIAF */
+
--- /dev/null 2005-08-25 21:20:32.000000000 -0700
+++ openssh/openbsd-compat/port-uw.h 2005-08-25 21:14:30.080527002 -0700
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2005 Tim Rice. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "includes.h"
+
+#ifdef HAVE_LIBIAF
+char * get_iaf_password(struct passwd *pw);
+#endif /* HAVE_LIBIAF */
+
--- openssh/openbsd-compat/xcrypt.c.old 2005-04-23 17:58:46.364982000 -0700
+++ openssh/openbsd-compat/xcrypt.c 2005-08-25 21:14:50.830527003 -0700
@@ -91,7 +91,11 @@
struct spwd *spw = getspnam(pw->pw_name);
if (spw != NULL)
+#ifdef HAVE_LIBIAF
+ pw_password = get_iaf_password(pw);
+#else
pw_password = spw->sp_pwdp;
+#endif /* HAVE_LIBIAF */
# endif
# if defined(HAVE_GETPWANAM) && !defined(DISABLE_SHADOW)
struct passwd_adjunct *spw;
--- openssh/session.c.old 2005-07-28 17:41:12.124914028 -0700
+++ openssh/session.c 2005-08-24 16:51:30.507680006 -0700
@@ -1334,6 +1334,11 @@
# ifdef _AIX
aix_usrinfo(pw);
# endif /* _AIX */
+# ifdef HAVE_LIBIAF
+ if (set_id(pw->pw_name) != 0) {
+ exit(1);
+ }
+# endif
/* Permanently switch to the desired uid. */
permanently_set_uid(pw);
#endif
More information about the openssh-unix-dev
mailing list