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