diff --git a/pisi-index.xml b/pisi-index.xml index 25b72054ef..c6f6b165d2 100644 --- a/pisi-index.xml +++ b/pisi-index.xml @@ -2919,11 +2919,11 @@ - 2016-01-25 + 2016-04-02 2.8.16 First release Alihan Öztürk - alihan@pisilinux.org + alihan02isilinux.org @@ -7386,7 +7386,7 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression sayonara - http://sayonara.luciocarreras.de/index.html + http://sayonara-player.com Pisi Linux Community admins@pisilinux.org @@ -7399,7 +7399,7 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression Although Sayoanra is considered as a lightweight player, it holds a lot of features to organize even big music collections. Although Sayoanra is considered as a lightweight player, it holds a lot of features to organize even big music collections. sayonara - http://sayonara-player.com/sw/sayonara-player-r195.tar.gz + http://sayonara-player.com/sw/sayonara-player-0.8.2-git2-20160226.tar.gz qt5-base-devel qt5-sql-mysql @@ -7414,9 +7414,9 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression gst-plugins-base-devel gst-plugins-ugly-next glib2-devel - cmake gstreamer-next-devel gst-plugins-base-next-devel + cmake multimedia/sound/sayonara/pspec.xml @@ -7452,8 +7452,8 @@ uses SIMD instructions (MMX, SSE2, etc.) to accelerate baseline JPEG compression - 2015-10-11 - 0.7.1 + 2016-04-02 + 0.8.2 First release Stefan Gronewold(groni) groni@pisilinux.org @@ -41828,81 +41828,6 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - - - skey - http://www.openbsd.org/faq/faq8.html#SKey - - PisiLinux Community - admins@pisilinux.org - - BSD - app:console - library - util.crypt - Linux Port of OpenBSD Single-key Password System - Linux için OpenBSD tek anahtarlı parola sistemi - skey is an S/Key implementation ported from OpenBSD. S/Key provides One Time Password functionality, and can be used to increase system security. - skey, OpenBSD'den Linux'a aktarılan S/Key sistemidir. S/Key sistemi Tek Seferlik Parola özelilği ile sistem güvenliğini arttırmak için kullanılabilir. - http://source.pisilinux.org/1.0/skey-1.1.5.tar.bz2 - - cracklib-devel - zlib-devel - perl - - - skey-1.1.5-gentoo.diff - skey-login_name_max.diff - skey-1.1.5-fPIC.patch - skey-1.1.5-bind-now.patch - skey-1.1.5-otp.diff - skey-1.1.5-binary-search.patch - confdir.patch - zeroed_entries.patch - default_hash.patch - fix_library_info.patch - - util/crypt/skey/pspec.xml - - - skey - - cracklib - zlib - - - /etc/skey - /lib - /usr/bin - /usr/lib - /usr/sbin - /usr/share/doc/skey - /usr/share/man - - - - skey-devel - Development files for skey - skey için geliştirme dosyaları - system.devel - - skey - - - /usr/include - /usr/share/man/man3 - - - - - 2014-05-21 - 1.1.5 - First release - Ertuğrul Erata - ertugrulerata@gmail.com - - - gnupg @@ -42445,7 +42370,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - 2015-11-22 + 2016-04-02 24.5 First release Ilker Manap @@ -48406,7 +48331,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - 2015-07-14 + 2016-04-02 1.17.2 First release Ertuğrul Erata @@ -49763,6 +49688,9 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol libmtdev-devel util-macros xorg-proto + xorg-server-devel + libinput-devel + libXi-devel x11/driver/xorg-input-aiptek/pspec.xml @@ -52078,23 +52006,15 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol Uyku kiplerini destekleme araçları suspend package allows users to suspend-to-ram, suspend-to-disk, and suspend-to-both. suspend, kullanıcıların bellek, disk veya her ikisini de kullanarak sistemlerini askıya almalarını sağlayan araçları içerir. - http://sourceforge.net/projects/suspend/files/suspend/suspend-1.0/suspend-utils-1.0.tar.bz2 + http://dev.gentoo.org/~bircoph/distfiles/suspend-1.0_p20120915.tar.xz lzo-devel pciutils-devel libx86-devel - plymouth-devel + libgcrypt-devel - suse/suspend-comment-configfile-options.diff - suse/suspend-default-compress.diff - suse/suspend-default-splash.diff - suse/suspend-0.80-dont-return-eintr-on-abort.diff - suse/suspend-0.80-keygen-new-defaults.diff - suse/suspend-0.80-vbetool-retry-on-errors.diff - mandriva/suspend-0.8-printf_format.patch - resume-dont-ask-questions.patch - suppress-outputs.patch + suspend-1.0_p20150810.patch.xz hardware/powermanagement/suspend/pspec.xml @@ -52103,7 +52023,6 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol lzo libx86 - plymouth-core-libs pciutils @@ -52111,6 +52030,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol /etc/suspend.key /usr/sbin /usr/share/doc + /usr/share/man suse/configure-suspend-encryption.sh @@ -52118,8 +52038,8 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - 2014-03-09 - 1.0 + 2016-04-02 + 1.0_p20120915 First release Varol Maksutoğlu waroi@pisilinux.org @@ -66739,7 +66659,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - 2015-02-23 + 2016-04-02 0.8.2 First release Stefan Gronewold(groni) @@ -80828,7 +80748,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol Okular is a document viewer. Okular bir belge göstericidir. okular - http://sourceforge.net/projects/pisilinux/files/source/okular-15.08.02_20151104.tar.xz + https://sourceforge.net/projects/pisilinux/files/source/okular-16.03.80_20160402.tar.xz qt5-base-devel qt5-declarative-devel @@ -80902,6 +80822,7 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol qt5-phonon + /etc/xdg /usr/lib /usr/share/doc /usr/share/man @@ -80923,8 +80844,8 @@ Bu Skype SILK codec ve Xiph.Org 's Celt codec teknolojisi dahil RFC 6716 ol - 2015-11-05 - 15.08.02_20151104 + 2016-02-02 + 16.03.80_20160402 First release Yusuf Aydemir yusuf.aydemir@pisilinux.org diff --git a/pisi-index.xml.sha1sum b/pisi-index.xml.sha1sum index 5673e310ac..1c1dd4a203 100644 --- a/pisi-index.xml.sha1sum +++ b/pisi-index.xml.sha1sum @@ -1 +1 @@ -b46166fed3279c90947194cddf99b6b4c6493763 \ No newline at end of file +4372dcdfda19506988bb183991e8c49da171d171 \ No newline at end of file diff --git a/pisi-index.xml.xz b/pisi-index.xml.xz index 7ac5a02dc7..3a81b6828b 100644 Binary files a/pisi-index.xml.xz and b/pisi-index.xml.xz differ diff --git a/pisi-index.xml.xz.sha1sum b/pisi-index.xml.xz.sha1sum index 549898de57..0c340e367b 100644 --- a/pisi-index.xml.xz.sha1sum +++ b/pisi-index.xml.xz.sha1sum @@ -1 +1 @@ -35e2a2340f7e8d19fc2fd5024b0b9c081643b2a9 \ No newline at end of file +9e384424b781597b9c7bc2e41ced103cdde90b62 \ No newline at end of file diff --git a/util/crypt/skey/actions.py b/util/crypt/skey/actions.py deleted file mode 100644 index 6ab9d3eed3..0000000000 --- a/util/crypt/skey/actions.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the GNU General Public License, version 3. -# See the file http://www.gnu.org/copyleft/gpl.txt. -# -# Note that we fiddle with permissions of everything to make sure not to make a security hole -# - -from pisi.actionsapi import autotools -from pisi.actionsapi import pisitools -from pisi.actionsapi import shelltools -from pisi.actionsapi import libtools -from pisi.actionsapi import get - - -def setup(): - shelltools.export("SENDMAIL", "/usr/sbin/sendmail") - shelltools.export("CFLAGS", "%s -DSKEY_HASH_DEFAULT=1" % get.CFLAGS()) - autotools.configure("--sysconfdir=/etc/skey") - -def build(): - autotools.make() - -def install(): - ### Runtime - for i in ["skey", "skeyinit", "skeyinfo"]: - pisitools.dobin(i) - - for i in ["otp-md4", "otp-sha1", "otp-md5"]: - pisitools.dosym("skey", "/usr/bin/%s" % i) - - pisitools.insinto("/usr/sbin", "skeyprune.pl", "skeyprune") - pisitools.insinto("/usr/bin", "skeyaudit.sh", "skeyaudit") - - # these must be suid root so users can generate their passwords, fperms u+s,og-r - for i in ["skeyinit", "skeyinfo", "skeyaudit"]: - shelltools.chmod("%s/usr/bin/%s" % (get.installDIR(), i), 4755) - - shelltools.chmod("%s/usr/bin/skey" % get.installDIR(), 0755) - shelltools.chmod("%s/usr/sbin/skeyprune" % get.installDIR(), 0755) - - - ### Developement - pisitools.insinto("/usr/include", "skey.h") - - for i in ["libskey.so.1.1.5", "libskey.so.1", "libskey.so"]: - # dolib borks with symlinks - # pisitools.dolib(i, destinationDirectory="/lib") - pisitools.insinto("/lib", i) - shelltools.chmod("%s/lib/%s" % (get.installDIR(), i), 0755) - - #libtools.gen_usr_ldscript("libskey.so") - pisitools.dosym("../../lib/libskey.so", "/usr/lib/libskey.so") - - - ### Config - # only root needs to have access to these files. fperms g-rx,o-rx /etc/skey - pisitools.dodir("/etc/skey") - shelltools.chmod("%s/etc/skey" % get.installDIR(), 0700) - - # skeyinit will not function if this file is not present. these permissions are applied by the skey system if missing. - shelltools.touch("%s/etc/skey/skeykeys" % get.installDIR()) - shelltools.chmod("%s/etc/skey/skeykeys" % get.installDIR(), 0600) - - - ### Docs - for i in ["skey.1", "skeyaudit.1", "skeyinfo.1", "skeyinit.1", "skey.3", "skeyprune.8"]: - pisitools.doman(i) - - pisitools.dodoc("CHANGES", "README") - diff --git a/util/crypt/skey/files/confdir.patch b/util/crypt/skey/files/confdir.patch deleted file mode 100644 index 3054a29660..0000000000 --- a/util/crypt/skey/files/confdir.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nur skey-1.1.5-old//skeyprune.pl skey-1.1.5/skeyprune.pl ---- skey-1.1.5-old//skeyprune.pl 2010-09-12 15:03:35.695999732 +0300 -+++ skey-1.1.5/skeyprune.pl 2010-09-12 15:06:03.817000568 +0300 -@@ -14,7 +14,7 @@ - die "Usage: $0 [days]\n" if $#ARGC > 0; - - # Pathnames --$keyfile = '/etc/skeykeys'; -+$keyfile = '/etc/skey/skeykeys'; - $temp = "$keyfile.tmp$$"; - - # Quick mapping of month name -> number diff --git a/util/crypt/skey/files/default_hash.patch b/util/crypt/skey/files/default_hash.patch deleted file mode 100644 index 5b0fc79191..0000000000 --- a/util/crypt/skey/files/default_hash.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nur skey-1.1.5-old//skeyinit.1 skey-1.1.5/skeyinit.1 ---- skey-1.1.5-old//skeyinit.1 2010-09-12 15:03:35.695999732 +0300 -+++ skey-1.1.5/skeyinit.1 2010-09-12 15:10:43.478000350 +0300 -@@ -47,7 +47,7 @@ - (default is 100). - .It Fl t Ar hash - Selects the hash algorithm to use. --Available choices are md4 (the default), md5 or sha1. -+Available choices are md4, md5 (the default) or sha1. - .It Ar user - The username to be changed/added. - By default the current user is operated on, only root may diff --git a/util/crypt/skey/files/fix_library_info.patch b/util/crypt/skey/files/fix_library_info.patch deleted file mode 100644 index 08fa934df7..0000000000 --- a/util/crypt/skey/files/fix_library_info.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -Nur skey-1.1.5-old//skey.3 skey-1.1.5/skey.3 ---- skey-1.1.5-old//skey.3 2010-09-12 15:03:35.696999758 +0300 -+++ skey-1.1.5/skey.3 2010-09-12 15:12:24.658996394 +0300 -@@ -245,10 +245,8 @@ - .Bl -tag -width /usr/lib/libskey_p.a -compact - .It Pa /usr/lib/libskey.a - static skey library --.It Pa /usr/lib/libskey.so -+.It Pa /lib/libskey.so - dynamic skey library --.It Pa /usr/lib/libskey_p.a --static skey library compiled for profiling - .El - .Sh SEE ALSO - .Xr skey 1 , diff --git a/util/crypt/skey/files/skey-1.1.5-binary-search.patch b/util/crypt/skey/files/skey-1.1.5-binary-search.patch deleted file mode 100644 index 47b18ba714..0000000000 --- a/util/crypt/skey/files/skey-1.1.5-binary-search.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- skey-1.1.5-orig/put.c 2008-09-21 10:12:06.000000000 +0200 -+++ skey-1.1.5/put.c 2008-09-21 10:19:54.000000000 +0200 -@@ -2206,27 +2206,17 @@ - { - int i, j; - -- for (;;) { -+ while (low <= high) { - i = (low + high) / 2; - - if ((j = strncmp(w, Wp[i], 4)) == 0) - return i; /* Found it */ -- if (high == low + 1) -- { -- /* Avoid effects of integer truncation in /2 */ -- if (strncmp(w, Wp[high], 4) == 0) -- return high; -- else -- return -1; -- } -- -- if (low >= high) -- return -1; /* I don't *think* this can happen... */ - if (j < 0) -- high = i; /* Search lower half */ -+ high = i - 1; /* Search lower half */ - else -- low = i; /* Search upper half */ -+ low = i + 1; /* Search upper half */ - } -+ return -1; - } - - static void insert(char *s, int x, int start, int length) diff --git a/util/crypt/skey/files/skey-1.1.5-bind-now.patch b/util/crypt/skey/files/skey-1.1.5-bind-now.patch deleted file mode 100644 index a56f81e9fc..0000000000 --- a/util/crypt/skey/files/skey-1.1.5-bind-now.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- Makefile.in.orig 2005-08-19 18:14:48.000000000 -0400 -+++ Makefile.in 2005-08-19 18:15:45.000000000 -0400 -@@ -67,10 +67,10 @@ - ${CC} -o $@ ${SKEYOBJS} ${LDFLAGS} -lskey ${LIBS} - - skeyinit: libskey.so ${SKEYINITOBJS} -- ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} -+ ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} -Wl,-z,now - - skeyinfo: libskey.so ${SKEYINFOOBJS} -- ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} -+ ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} -Wl,-z,now - - ${MANPAGES} ${SCRIPTS}:: - ${FIXPATHSCMD} ${srcdir}/$@ diff --git a/util/crypt/skey/files/skey-1.1.5-fPIC.patch b/util/crypt/skey/files/skey-1.1.5-fPIC.patch deleted file mode 100644 index 924cfb4582..0000000000 --- a/util/crypt/skey/files/skey-1.1.5-fPIC.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- Makefile.in 2004-02-25 10:16:15.219448392 +0000 -+++ Makefile.in 2004-02-25 10:16:39.087583762 +0000 -@@ -50,6 +50,9 @@ - - ${LIBOBJS}: config.h - -+${LIBOBJS}: %.o: %.c -+ ${CC} ${CFLAGS} -fPIC -c $< -o $@ -+ - libskey.a: ${LIBOBJS} - ${AR} rv $@ ${LIBOBJS} - ${RANLIB} $@ diff --git a/util/crypt/skey/files/skey-1.1.5-gentoo.diff b/util/crypt/skey/files/skey-1.1.5-gentoo.diff deleted file mode 100644 index 56e7e25889..0000000000 --- a/util/crypt/skey/files/skey-1.1.5-gentoo.diff +++ /dev/null @@ -1,5380 +0,0 @@ -diff -ruN skey-1.1.5.orig/CHANGES skey-1.1.5/CHANGES ---- skey-1.1.5.orig/CHANGES 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/CHANGES 2003-11-06 17:46:45.000000000 +0000 -@@ -1,6 +1,19 @@ - *** Changes in version 1.1.5 - - - Bug fixes for errx/warnx -+(05/11/2003) taviso@gentoo.org -+ - ported some updates from the NetBSD project to Linux. -+ - removed a load of cast to voids. -+ - syntax changes. -+ - killing skeyaudit, using a shell script modified from NetBSD. -+ - cleanups to stop warnings with gcc. -+ - building a library for dynamic linking. -+ - swapping some str{cat,cpy} for strn{cat,cpy} -+ - killing rmd160 support. -+ - removing strlcpy function, not useful. -+ - quick hack for shadow support. -+ - quick hack for cracklib support. -+ - various other stuff. - - *** Changes in version 1.1.4 - -diff -ruN skey-1.1.5.orig/config.h.in skey-1.1.5/config.h.in ---- skey-1.1.5.orig/config.h.in 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/config.h.in 2003-11-06 17:46:45.000000000 +0000 -@@ -109,6 +109,9 @@ - /* Define if you have the strtol function. */ - #undef HAVE_STRTOL - -+/* Define if you have the header file. */ -+#undef HAVE_CRACK_H -+ - /* Define if you have the header file. */ - #undef HAVE_CRYPT_H - -@@ -130,12 +133,12 @@ - /* Define if you have the header file. */ - #undef HAVE_MD5GLOBAL_H - --/* Define if you have the header file. */ --#undef HAVE_RMD160_H -- - /* Define if you have the header file. */ - #undef HAVE_SHA1_H - -+/* Define if you have the header file. */ -+#undef HAVE_SHADOW_H -+ - /* Define if you have the header file. */ - #undef HAVE_SYS_CDEFS_H - -diff -ruN skey-1.1.5.orig/configure skey-1.1.5/configure ---- skey-1.1.5.orig/configure 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/configure 2003-11-06 17:47:49.000000000 +0000 -@@ -960,47 +960,11 @@ - echo "$ac_t""no" 1>&6 - fi - --# Extract the first word of "sendmail", so it can be a program name with args. --set dummy sendmail; ac_word=$2 --echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 --echo "configure:967: checking for $ac_word" >&5 --if eval "test \"`echo '$''{'ac_cv_path_SENDMAIL'+set}'`\" = set"; then -- echo $ac_n "(cached) $ac_c" 1>&6 --else -- case "$SENDMAIL" in -- /*) -- ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. -- ;; -- ?:/*) -- ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a dos path. -- ;; -- *) -- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -- ac_dummy="$PATH:/usr/sbin:/usr/lib:/usr/bin" -- for ac_dir in $ac_dummy; do -- test -z "$ac_dir" && ac_dir=. -- if test -f $ac_dir/$ac_word; then -- ac_cv_path_SENDMAIL="$ac_dir/$ac_word" -- break -- fi -- done -- IFS="$ac_save_ifs" -- test -z "$ac_cv_path_SENDMAIL" && ac_cv_path_SENDMAIL="/usr/lib/sendmail" -- ;; --esac --fi --SENDMAIL="$ac_cv_path_SENDMAIL" --if test -n "$SENDMAIL"; then -- echo "$ac_t""$SENDMAIL" 1>&6 --else -- echo "$ac_t""no" 1>&6 --fi -- - - - - echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 --echo "configure:1004: checking for crypt in -lcrypt" >&5 -+echo "configure:968: checking for crypt in -lcrypt" >&5 - ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` - if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -@@ -1008,7 +972,7 @@ - ac_save_LIBS="$LIBS" - LIBS="-lcrypt $LIBS" - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" - else -@@ -1040,7 +1004,7 @@ - fi - - echo $ac_n "checking for flock in -lucb""... $ac_c" 1>&6 --echo "configure:1044: checking for flock in -lucb" >&5 -+echo "configure:1008: checking for flock in -lucb" >&5 - ac_lib_var=`echo ucb'_'flock | sed 'y%./+-%__p_%'` - if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -@@ -1048,7 +1012,7 @@ - ac_save_LIBS="$LIBS" - LIBS="-lucb $LIBS" - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:1027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" - else -@@ -1079,10 +1043,50 @@ - echo "$ac_t""no" 1>&6 - fi - -+echo $ac_n "checking for FascistCheck in -lcrack""... $ac_c" 1>&6 -+echo "configure:1048: checking for FascistCheck in -lcrack" >&5 -+ac_lib_var=`echo crack'_'FascistCheck | sed 'y%./+-%__p_%'` -+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then -+ echo $ac_n "(cached) $ac_c" 1>&6 -+else -+ ac_save_LIBS="$LIBS" -+LIBS="-lcrack $LIBS" -+cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+ rm -rf conftest* -+ eval "ac_cv_lib_$ac_lib_var=yes" -+else -+ echo "configure: failed program was:" >&5 -+ cat conftest.$ac_ext >&5 -+ rm -rf conftest* -+ eval "ac_cv_lib_$ac_lib_var=no" -+fi -+rm -f conftest* -+LIBS="$ac_save_LIBS" -+ -+fi -+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then -+ echo "$ac_t""yes" 1>&6 -+ LIBS="$LIBS -lcrack" -+else -+ echo "$ac_t""no" 1>&6 -+fi -+ - - - echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 --echo "configure:1086: checking how to run the C preprocessor" >&5 -+echo "configure:1090: checking how to run the C preprocessor" >&5 - # On Suns, sometimes $CPP names a directory. - if test -n "$CPP" && test -d "$CPP"; then - CPP= -@@ -1097,13 +1101,13 @@ - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext < - Syntax Error - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" --{ (eval echo configure:1107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -+{ (eval echo configure:1111: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - : -@@ -1114,13 +1118,13 @@ - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext < - Syntax Error - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" --{ (eval echo configure:1124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -+{ (eval echo configure:1128: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - : -@@ -1131,13 +1135,13 @@ - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext < - Syntax Error - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" --{ (eval echo configure:1141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -+{ (eval echo configure:1145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - : -@@ -1162,12 +1166,12 @@ - echo "$ac_t""$CPP" 1>&6 - - echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 --echo "configure:1166: checking for ANSI C header files" >&5 -+echo "configure:1170: checking for ANSI C header files" >&5 - if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #include -@@ -1175,7 +1179,7 @@ - #include - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" --{ (eval echo configure:1179: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -+{ (eval echo configure:1183: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - rm -rf conftest* -@@ -1192,7 +1196,7 @@ - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat > conftest.$ac_ext < - EOF -@@ -1210,7 +1214,7 @@ - if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat > conftest.$ac_ext < - EOF -@@ -1231,7 +1235,7 @@ - : - else - cat > conftest.$ac_ext < - #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -@@ -1242,7 +1246,7 @@ - exit (0); } - - EOF --if { (eval echo configure:1246: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - : - else -@@ -1266,12 +1270,12 @@ - fi - - echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 --echo "configure:1270: checking for sys/wait.h that is POSIX.1 compatible" >&5 -+echo "configure:1274: checking for sys/wait.h that is POSIX.1 compatible" >&5 - if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #include -@@ -1287,7 +1291,7 @@ - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; return 0; } - EOF --if { (eval echo configure:1291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_header_sys_wait_h=yes - else -@@ -1307,21 +1311,21 @@ - - fi - --for ac_hdr in fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h rmd160.h md4.h md5.h md5global.h err.h crypt.h -+for ac_hdr in fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h md4.h md5.h md5global.h err.h crypt.h shadow.h crack.h - do - ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` - echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 --echo "configure:1315: checking for $ac_hdr" >&5 -+echo "configure:1319: checking for $ac_hdr" >&5 - if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" --{ (eval echo configure:1325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -+{ (eval echo configure:1329: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - rm -rf conftest* -@@ -1349,12 +1353,12 @@ - - - echo $ac_n "checking for working const""... $ac_c" 1>&6 --echo "configure:1353: checking for working const" >&5 -+echo "configure:1357: checking for working const" >&5 - if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1411: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes - else -@@ -1424,14 +1428,14 @@ - fi - - echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 --echo "configure:1428: checking whether byte ordering is bigendian" >&5 -+echo "configure:1432: checking whether byte ordering is bigendian" >&5 - if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - ac_cv_c_bigendian=unknown - # See if sys/param.h defines the BYTE_ORDER macro. - cat > conftest.$ac_ext < - #include -@@ -1442,11 +1446,11 @@ - #endif - ; return 0; } - EOF --if { (eval echo configure:1446: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1450: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - # It does; now see whether it defined to BIG_ENDIAN or not. - cat > conftest.$ac_ext < - #include -@@ -1457,7 +1461,7 @@ - #endif - ; return 0; } - EOF --if { (eval echo configure:1461: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_bigendian=yes - else -@@ -1477,7 +1481,7 @@ - { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_c_bigendian=no - else -@@ -1514,12 +1518,12 @@ - fi - - echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 --echo "configure:1518: checking for uid_t in sys/types.h" >&5 -+echo "configure:1522: checking for uid_t in sys/types.h" >&5 - if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - EOF -@@ -1548,12 +1552,12 @@ - fi - - echo $ac_n "checking for off_t""... $ac_c" 1>&6 --echo "configure:1552: checking for off_t" >&5 -+echo "configure:1556: checking for off_t" >&5 - if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #if STDC_HEADERS -@@ -1581,12 +1585,12 @@ - fi - - echo $ac_n "checking for size_t""... $ac_c" 1>&6 --echo "configure:1585: checking for size_t" >&5 -+echo "configure:1589: checking for size_t" >&5 - if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #if STDC_HEADERS -@@ -1614,12 +1618,12 @@ - fi - - echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 --echo "configure:1618: checking whether struct tm is in sys/time.h or time.h" >&5 -+echo "configure:1622: checking whether struct tm is in sys/time.h or time.h" >&5 - if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #include -@@ -1627,7 +1631,7 @@ - struct tm *tp; tp->tm_sec; - ; return 0; } - EOF --if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_struct_tm=time.h - else -@@ -1649,7 +1653,7 @@ - - - echo $ac_n "checking size of char""... $ac_c" 1>&6 --echo "configure:1653: checking size of char" >&5 -+echo "configure:1657: checking size of char" >&5 - if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1657,7 +1661,7 @@ - ac_cv_sizeof_char=1 - else - cat > conftest.$ac_ext < - main() -@@ -1668,7 +1672,7 @@ - exit(0); - } - EOF --if { (eval echo configure:1672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_sizeof_char=`cat conftestval` - else -@@ -1688,7 +1692,7 @@ - - - echo $ac_n "checking size of short int""... $ac_c" 1>&6 --echo "configure:1692: checking size of short int" >&5 -+echo "configure:1696: checking size of short int" >&5 - if eval "test \"`echo '$''{'ac_cv_sizeof_short_int'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1696,7 +1700,7 @@ - ac_cv_sizeof_short_int=2 - else - cat > conftest.$ac_ext < - main() -@@ -1707,7 +1711,7 @@ - exit(0); - } - EOF --if { (eval echo configure:1711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_sizeof_short_int=`cat conftestval` - else -@@ -1727,7 +1731,7 @@ - - - echo $ac_n "checking size of int""... $ac_c" 1>&6 --echo "configure:1731: checking size of int" >&5 -+echo "configure:1735: checking size of int" >&5 - if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1735,7 +1739,7 @@ - ac_cv_sizeof_int=4 - else - cat > conftest.$ac_ext < - main() -@@ -1746,7 +1750,7 @@ - exit(0); - } - EOF --if { (eval echo configure:1750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_sizeof_int=`cat conftestval` - else -@@ -1766,7 +1770,7 @@ - - - echo $ac_n "checking size of long int""... $ac_c" 1>&6 --echo "configure:1770: checking size of long int" >&5 -+echo "configure:1774: checking size of long int" >&5 - if eval "test \"`echo '$''{'ac_cv_sizeof_long_int'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1774,7 +1778,7 @@ - ac_cv_sizeof_long_int=4 - else - cat > conftest.$ac_ext < - main() -@@ -1785,7 +1789,7 @@ - exit(0); - } - EOF --if { (eval echo configure:1789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1793: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_sizeof_long_int=`cat conftestval` - else -@@ -1805,7 +1809,7 @@ - - - echo $ac_n "checking size of long long int""... $ac_c" 1>&6 --echo "configure:1809: checking size of long long int" >&5 -+echo "configure:1813: checking size of long long int" >&5 - if eval "test \"`echo '$''{'ac_cv_sizeof_long_long_int'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -1813,7 +1817,7 @@ - ac_cv_sizeof_long_long_int=8 - else - cat > conftest.$ac_ext < - main() -@@ -1824,7 +1828,7 @@ - exit(0); - } - EOF --if { (eval echo configure:1828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:1832: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_sizeof_long_long_int=`cat conftestval` - else -@@ -1854,7 +1858,7 @@ - fi - CFLAGS="$CFLAGS -D_HPUX_SOURCE" - echo $ac_n "checking for HPUX trusted system password database""... $ac_c" 1>&6 --echo "configure:1858: checking for HPUX trusted system password database" >&5 -+echo "configure:1862: checking for HPUX trusted system password database" >&5 - if test -f /tcb/files/auth/system/default; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<\EOF -@@ -1903,16 +1907,16 @@ - - - echo $ac_n "checking for intXX_t types""... $ac_c" 1>&6 --echo "configure:1907: checking for intXX_t types" >&5 -+echo "configure:1911: checking for intXX_t types" >&5 - cat > conftest.$ac_ext < - int main() { - int16_t a; int32_t b; a = 1235; b = 1235; - ; return 0; } - EOF --if { (eval echo configure:1916: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - - cat >> confdefs.h <<\EOF -@@ -1932,16 +1936,16 @@ - rm -f conftest* - - echo $ac_n "checking for u_intXX_t types""... $ac_c" 1>&6 --echo "configure:1936: checking for u_intXX_t types" >&5 -+echo "configure:1940: checking for u_intXX_t types" >&5 - cat > conftest.$ac_ext < - int main() { - u_int16_t c; u_int32_t d; c = 1235; d = 1235; - ; return 0; } - EOF --if { (eval echo configure:1945: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1949: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - - cat >> confdefs.h <<\EOF -@@ -1964,9 +1968,9 @@ - "x$ac_cv_header_sys_bitypes_h" = "xyes" - then - echo $ac_n "checking for intXX_t and u_intXX_t types in sys/bitypes.h""... $ac_c" 1>&6 --echo "configure:1968: checking for intXX_t and u_intXX_t types in sys/bitypes.h" >&5 -+echo "configure:1972: checking for intXX_t and u_intXX_t types in sys/bitypes.h" >&5 - cat > conftest.$ac_ext < - int main() { -@@ -1978,7 +1982,7 @@ - - ; return 0; } - EOF --if { (eval echo configure:1982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:1986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - - cat >> confdefs.h <<\EOF -@@ -2002,16 +2006,16 @@ - fi - - echo $ac_n "checking for uintXX_t types""... $ac_c" 1>&6 --echo "configure:2006: checking for uintXX_t types" >&5 -+echo "configure:2010: checking for uintXX_t types" >&5 - cat > conftest.$ac_ext < - int main() { - uint16_t c; uint32_t d; c = 1235; d = 1235; - ; return 0; } - EOF --if { (eval echo configure:2015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:2019: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - - cat >> confdefs.h <<\EOF -@@ -2054,7 +2058,7 @@ - - - echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 --echo "configure:2058: checking for 8-bit clean memcmp" >&5 -+echo "configure:2062: checking for 8-bit clean memcmp" >&5 - if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else -@@ -2062,7 +2066,7 @@ - ac_cv_func_memcmp_clean=no - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -+if { (eval echo configure:2080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null - then - ac_cv_func_memcmp_clean=yes - else -@@ -2090,12 +2094,12 @@ - test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" - - echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 --echo "configure:2094: checking return type of signal handlers" >&5 -+echo "configure:2098: checking return type of signal handlers" >&5 - if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - #include -@@ -2112,7 +2116,7 @@ - int i; - ; return 0; } - EOF --if { (eval echo configure:2116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then -+if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_type_signal=void - else -@@ -2131,12 +2135,12 @@ - - - echo $ac_n "checking for strftime""... $ac_c" 1>&6 --echo "configure:2135: checking for strftime" >&5 -+echo "configure:2139: checking for strftime" >&5 - if eval "test \"`echo '$''{'ac_cv_func_strftime'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2167: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_strftime=yes" - else -@@ -2181,7 +2185,7 @@ - echo "$ac_t""no" 1>&6 - # strftime is in -lintl on SCO UNIX. - echo $ac_n "checking for strftime in -lintl""... $ac_c" 1>&6 --echo "configure:2185: checking for strftime in -lintl" >&5 -+echo "configure:2189: checking for strftime in -lintl" >&5 - ac_lib_var=`echo intl'_'strftime | sed 'y%./+-%__p_%'` - if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -@@ -2189,7 +2193,7 @@ - ac_save_LIBS="$LIBS" - LIBS="-lintl $LIBS" - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" - else -@@ -2227,12 +2231,12 @@ - fi - - echo $ac_n "checking for vprintf""... $ac_c" 1>&6 --echo "configure:2231: checking for vprintf" >&5 -+echo "configure:2235: checking for vprintf" >&5 - if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_vprintf=yes" - else -@@ -2279,12 +2283,12 @@ - - if test "$ac_cv_func_vprintf" != yes; then - echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 --echo "configure:2283: checking for _doprnt" >&5 -+echo "configure:2287: checking for _doprnt" >&5 - if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func__doprnt=yes" - else -@@ -2334,12 +2338,12 @@ - for ac_func in gethostname strcspn strdup strerror strspn strtol flock fcntl lockf strlcpy setusercontext - do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 --echo "configure:2338: checking for $ac_func" >&5 -+echo "configure:2342: checking for $ac_func" >&5 - if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then -+if { (eval echo configure:2370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" - else -diff -ruN skey-1.1.5.orig/configure.in skey-1.1.5/configure.in ---- skey-1.1.5.orig/configure.in 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/configure.in 2003-11-06 17:47:14.000000000 +0000 -@@ -9,19 +9,19 @@ - AC_CHECK_PROG(AR, ar, ar) - AC_PATH_PROG(PERL, perl) - AC_PATH_PROG(TOUCH, touch) --AC_PATH_PROG(SENDMAIL, sendmail, /usr/lib/sendmail, $PATH:/usr/sbin:/usr/lib:/usr/bin) - AC_SUBST(PERL) - AC_SUBST(SENDMAIL) - - dnl Checks for libraries. - AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt") - AC_CHECK_LIB(ucb, flock, LIBS="$LIBS -lucb" LDFLAGS="$LDFLAGS -L/usr/ucblib") -+AC_CHECK_LIB(crack, FascistCheck, LIBS="$LIBS -lcrack") - - - dnl Checks for header files. - AC_HEADER_STDC - AC_HEADER_SYS_WAIT --AC_CHECK_HEADERS(fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h rmd160.h md4.h md5.h md5global.h err.h crypt.h) -+AC_CHECK_HEADERS(fcntl.h limits.h sys/file.h sys/time.h sys/cdefs.h syslog.h unistd.h sha1.h md4.h md5.h md5global.h err.h crypt.h shadow.h crack.h) - - dnl Checks for typedefs, structures, and compiler characteristics. - AC_C_CONST -diff -ruN skey-1.1.5.orig/login_cap.c skey-1.1.5/login_cap.c ---- skey-1.1.5.orig/login_cap.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/login_cap.c 2003-11-06 17:46:45.000000000 +0000 -@@ -37,6 +37,7 @@ - #include - #include - #include -+#include - #include - - /* -diff -ruN skey-1.1.5.orig/Makefile.in skey-1.1.5/Makefile.in ---- skey-1.1.5.orig/Makefile.in 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/Makefile.in 2003-11-06 17:47:42.000000000 +0000 -@@ -27,12 +27,11 @@ - TOUCH=@TOUCH@ - LDFLAGS=-L. @LDFLAGS@ - --TARGETS=skey skeyinit skeyinfo skeyaudit --LIBOBJS=skeylogin.o skeysubr.o put.o errx.o md4c.o md5c.o rmd160.o rmd160hl.o sha1.o sha1hl.o flock.o strlcpy.o login_cap.o -+TARGETS=skey skeyinit skeyinfo libskey.a -+LIBOBJS=skeylogin.o skeysubr.o put.o errx.o md4c.o md5c.o sha1.o sha1hl.o flock.o login_cap.o - SKEYOBJS=skey.o - SKEYINITOBJS=skeyinit.o - SKEYINFOOBJS=skeyinfo.o --SKEYAUDITOBJS=skeyaudit.o - - - SCRIPTS=skeyprune.pl -@@ -41,11 +40,11 @@ - CATMAN = skey.0 skeyinit.0 skeyinfo.0 skeyaudit.0 skeyprune.0 - MANPAGES = @MANTYPE@ - --PATHSUBS = -D/etc/skeykeys=${sysconfdir}/skeykeys -D/usr/bin/perl=${PERL} -D/usr/lib/sendmail=${SENDMAIL} -+PATHSUBS = -D/etc/skeykeys=${sysconfdir}/skeykeys -D/usr/bin/perl=${PERL} - - FIXPATHSCMD = $(PERL) $(srcdir)/fixpaths $(PATHSUBS) - --HDRS= skey.h sha1.h rmd160.h -+HDRS= skey.h sha1.h - - all: ${TARGETS} ${MANPAGES} - -@@ -55,24 +54,27 @@ - ${AR} rv $@ ${LIBOBJS} - ${RANLIB} $@ - --skey: libskey.a ${SKEYOBJS} -+libskey.so: ${LIBOBJS} -+ ${CC} ${LDFLAGS} -shared -Wl,-soname,libskey.so.1 -o libskey.so.1.1.5 ${LIBOBJS} -+ ln -fs libskey.so.1.1.5 libskey.so -+ ln -fs libskey.so.1.1.5 libskey.so.1 -+ ln -fs libskey.so.1.1.5 libskey.so.1.1 -+ -+skey: libskey.so ${SKEYOBJS} - ${CC} -o $@ ${SKEYOBJS} ${LDFLAGS} -lskey ${LIBS} - --skeyinit: libskey.a ${SKEYINITOBJS} -+skeyinit: libskey.so ${SKEYINITOBJS} - ${CC} -o $@ ${SKEYINITOBJS} ${LDFLAGS} -lskey ${LIBS} - --skeyinfo: libskey.a ${SKEYINFOOBJS} -+skeyinfo: libskey.so ${SKEYINFOOBJS} - ${CC} -o $@ ${SKEYINFOOBJS} ${LDFLAGS} -lskey ${LIBS} - --skeyaudit: libskey.a ${SKEYAUDITOBJS} -- ${CC} -o $@ ${SKEYAUDITOBJS} ${LDFLAGS} -lskey ${LIBS} -- - ${MANPAGES} ${SCRIPTS}:: - ${FIXPATHSCMD} ${srcdir}/$@ - - clean: - rm -f *.o *.a ${TARGETS} config.status config.cache config.log -- rm -f *.out core -+ rm -f *.out core *.so *.so.* - - distclean: clean - rm -f Makefile config.h core *~ -@@ -97,6 +99,10 @@ - $(INSTALL) -d $(DESTDIR)$(includedir) - $(INSTALL) -d $(DESTDIR)$(sysconfdir) - ${INSTALL_DATA} libskey.a $(DESTDIR)$(libdir) -+ ${INSTALL_DATA} libskey.so.1.1.5 $(DESTDIR)$(libdir) -+ ${INSTALL_DATA} libskey.so.1.1 $(DESTDIR)$(libdir) -+ ${INSTALL_DATA} libskey.so.1 $(DESTDIR)$(libdir) -+ ${INSTALL_DATA} libskey.so $(DESTDIR)$(libdir) - ${INSTALL_DATA} ${HDRS} $(DESTDIR)$(includedir) - @for target in ${TARGETS}; do \ - ${INSTALL_PROGRAM} $$target $(DESTDIR)$(bindir); \ -@@ -119,9 +125,9 @@ - -rm -f $(DESTDIR)$(bindir)/skeyaudit - -rm -f $(DESTDIR)$(bindir)/skeyprune - -rm -f $(DESTDIR)$(libdir)/libskey.a -+ -rm -f $(DESTDIR)$(libdir)/libskey.so* - -rm -f $(DESTDIR)$(includedir)/skey.h - -rm -f $(DESTDIR)$(includedir)/sha1.h -- -rm -f $(DESTDIR)$(includedir)/rmd160.h - -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skey.1 - -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skeyinfo.1 - -rm -f $(DESTDIR)$(mandir)/$(mansubdir)1/skeyinit.1 -diff -ruN skey-1.1.5.orig/put.c skey-1.1.5/put.c ---- skey-1.1.5.orig/put.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/put.c 2003-11-06 17:46:45.000000000 +0000 -@@ -14,7 +14,7 @@ - #include - #include - #include --/*#include */ -+#include - #include "config.h" - - #include "skey.h" -@@ -22,10 +22,10 @@ - static unsigned int extract __P ((char *s, int start, int length)); - static void standard __P ((char *word)); - static void insert __P ((char *s, int x, int start, int length)); --static int wsrch __P ((char *w, int low, int high)); -+static int wsrch __P ((const char *w, int low, int high)); - - /* Dictionary for integer-word translations */ --static char Wp[2048][4] = { -+char Wp[2048][4] = { - "A", - "ABE", - "ACE", -@@ -2079,19 +2079,13 @@ - /* Encode 8 bytes in 'c' as a string of English words. - * Returns a pointer to a static buffer - */ --char * --btoe(engout, c) -- char *c; -- char *engout; -+char *btoe(char *engout, const char *c) - { -- char cp[10]; /* add in room for the parity 2 bits + extract() slop */ -+ char cp[9]; /* add in room for the parity 2 bits */ - int p, i; - - engout[0] = '\0'; -- -- /* workaround for extract() reads beyond end of data */ -- (void)memset(cp, 0, sizeof(cp)); -- (void)memcpy(cp, c, 8); -+ memcpy(cp, c, 8); - - /* compute parity */ - for (p = 0, i = 0; i < 64; i += 2) -@@ -2099,20 +2093,20 @@ - - cp[8] = (char)p << 6; - -- (void)strncat(engout, &Wp[extract (cp, 0, 11)][0], 4); -- (void)strcat(engout, " "); -- (void)strncat(engout, &Wp[extract (cp, 11, 11)][0], 4); -- (void)strcat(engout, " "); -- (void)strncat(engout, &Wp[extract (cp, 22, 11)][0], 4); -- (void)strcat(engout, " "); -- (void)strncat(engout, &Wp[extract (cp, 33, 11)][0], 4); -- (void)strcat(engout, " "); -- (void)strncat(engout, &Wp[extract (cp, 44, 11)][0], 4); -- (void)strcat(engout, " "); -- (void)strncat(engout, &Wp[extract (cp, 55, 11)][0], 4); -+ strncat(engout, &Wp[extract (cp, 0, 11)][0], 4); -+ strcat(engout, " "); -+ strncat(engout, &Wp[extract (cp, 11, 11)][0], 4); -+ strcat(engout, " "); -+ strncat(engout, &Wp[extract (cp, 22, 11)][0], 4); -+ strcat(engout, " "); -+ strncat(engout, &Wp[extract (cp, 33, 11)][0], 4); -+ strcat(engout, " "); -+ strncat(engout, &Wp[extract (cp, 44, 11)][0], 4); -+ strcat(engout, " "); -+ strncat(engout, &Wp[extract (cp, 55, 11)][0], 4); - - #ifdef notdef -- (void)fprintf(stderr, "engout is %s\n\r", engout); -+ printf ("engout is %s\n\r", engout); - #endif - return(engout); - } -@@ -2123,41 +2117,42 @@ - * -1 badly formed in put ie > 4 char word - * -2 words OK but parity is wrong - */ --int --etob(out, e) -- char *out; -- char *e; -+int etob(char *out, const char *e) - { - char *word; - int i, p, v, l, low, high; -- char b[SKEY_BINKEY_SIZE+1]; -+ char b[9]; - char input[36]; -+ char *last; - - if (e == NULL) -- return(-1); -+ return -1; - -- (void)strncpy(input, e, sizeof(input) - 1); -- input[sizeof(input) - 1] = '\0'; -- (void)memset(b, 0, sizeof(b)); -- (void)memset(out, 0, SKEY_BINKEY_SIZE); -- for (i = 0, p = 0; i < 6; i++, p += 11) { -- if ((word = strtok(i == 0 ? input : NULL, " ")) == NULL) -- return(-1); -- -- l = strlen(word); -- if (l > 4 || l < 1) { -- return(-1); -- } else if (l < 4) { -+ strncpy (input, e, sizeof(input)); -+ memset(b, 0, sizeof(b)); -+ memset(out, 0, 8); -+ for (i = 0, p = 0; i < 6; i++, p += 11) -+ { -+ if ((word = strtok_r(i == 0 ? input : NULL, " ", &last)) == NULL) -+ return -1; -+ -+ l = strlen (word); -+ if (l > 4 || l < 1) -+ return -1; -+ else if (l < 4) -+ { - low = 0; - high = 570; -- } else { -+ } -+ else -+ { - low = 571; - high = 2047; - } - standard(word); - - if ((v = wsrch(word, low, high)) < 0) -- return(0); -+ return 0; - - insert(b, v, p, 11); - } -@@ -2167,55 +2162,47 @@ - p += extract (b, i, 2); - - if ((p & 3) != extract (b, 64, 2)) -- return(-2); -+ return -2; - -- (void)memcpy(out, b, SKEY_BINKEY_SIZE); -+ memcpy(out, b, 8); - -- return(1); -+ return 1; - } - - /* Display 8 bytes as a series of 16-bit hex digits */ --char * --put8(out, s) -- char *out; -- char *s; -+char *put8(char *out, const char *s) - { -- (void)sprintf(out, "%02X%02X %02X%02X %02X%02X %02X%02X", -+ sprintf(out, "%02X%02X %02X%02X %02X%02X %02X%02X", - s[0] & 0xff, s[1] & 0xff, s[2] & 0xff, - s[3] & 0xff, s[4] & 0xff, s[5] & 0xff, - s[6] & 0xff, s[7] & 0xff); -- return(out); -+ return out; - } - - #ifdef notdef - /* Encode 8 bytes in 'cp' as stream of ascii letters. - * Provided as a possible alternative to btoe() - */ --char * --btoc(cp) -- char *cp; -+char *btoc(char *cp) - { - int i; - static char out[31]; - - /* code out put by characters 6 bits each added to 0x21 (!) */ -- for (i = 0; i <= 10; i++) { -+ for (i = 0; i <= 10; i++) -+ { - /* last one is only 4 bits not 6 */ - out[i] = '!' + extract (cp, 6 * i, i >= 10 ? 4 : 6); - } - out[i] = '\0'; -- return(out); -+ return out; - } - #endif - - /* Internal subroutines for word encoding/decoding */ - - /* Dictionary binary search */ --static int --wsrch(w, low, high) -- char *w; -- int low; -- int high; -+static int wsrch(const char *w, int low, int high) - { - int i, j; - -@@ -2223,18 +2210,18 @@ - i = (low + high) / 2; - - if ((j = strncmp(w, Wp[i], 4)) == 0) -- return(i); /* Found it */ -- -- if (high == low + 1) { -+ return i; /* Found it */ -+ if (high == low + 1) -+ { - /* Avoid effects of integer truncation in /2 */ - if (strncmp(w, Wp[high], 4) == 0) -- return(high); -+ return high; - else -- return(-1); -+ return -1; - } - - if (low >= high) -- return(-1); /* I don't *think* this can happen... */ -+ return -1; /* I don't *think* this can happen... */ - if (j < 0) - high = i; /* Search lower half */ - else -@@ -2242,12 +2229,7 @@ - } - } - --static void --insert(s, x, start, length) -- char *s; -- int x; -- int start; -- int length; -+static void insert(char *s, int x, int start, int length) - { - unsigned char cl; - unsigned char cc; -@@ -2261,25 +2243,28 @@ - assert(start + length <= 66); - - shift = ((8 - ((start + length) % 8)) % 8); -- y = x << shift; -+ y = (int) x << shift; - cl = (y >> 16) & 0xff; - cc = (y >> 8) & 0xff; - cr = y & 0xff; -- if (shift + length > 16) { -+ if (shift + length > 16) -+ { - s[start / 8] |= cl; - s[start / 8 + 1] |= cc; - s[start / 8 + 2] |= cr; -- } else if (shift + length > 8) { -+ } -+ else if (shift + length > 8) -+ { - s[start / 8] |= cc; - s[start / 8 + 1] |= cr; -- } else { -+ } -+ else -+ { - s[start / 8] |= cr; - } - } - --static void --standard(word) -- register char *word; -+static void standard(char *word) - { - while (*word) { - if (!isascii(*word)) -@@ -2297,11 +2282,7 @@ - } - - /* Extract 'length' bits from the char array 's' starting with bit 'start' */ --static unsigned int --extract(s, start, length) -- char *s; -- int start; -- int length; -+static unsigned int extract(char *s, int start, int length) - { - unsigned char cl; - unsigned char cc; -@@ -2320,5 +2301,5 @@ - x = x >> (24 - (length + (start % 8))); - x = (x & (0xffff >> (16 - length))); - -- return(x); -+ return x; - } -diff -ruN skey-1.1.5.orig/rmd160.c skey-1.1.5/rmd160.c ---- skey-1.1.5.orig/rmd160.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/rmd160.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,428 +0,0 @@ --/********************************************************************\ -- * -- * FILE: rmd160.c -- * -- * CONTENTS: A sample C-implementation of the RIPEMD-160 -- * hash-function. -- * TARGET: any computer with an ANSI C compiler -- * -- * AUTHOR: Antoon Bosselaers, ESAT-COSIC -- * (Arranged for libc by Todd C. Miller) -- * DATE: 1 March 1996 -- * VERSION: 1.0 -- * -- * Copyright (c) Katholieke Universiteit Leuven -- * 1996, All Rights Reserved -- * --\********************************************************************/ --#ifndef HAVE_RMD160_H -- --/* header files */ --#include --#include --#include --#include --#include "config.h" --#include "rmd160.h" -- --/********************************************************************/ -- --/* macro definitions */ -- --/* collect four bytes into one word: */ --#define BYTES_TO_DWORD(strptr) \ -- (((u_int32_t) *((strptr)+3) << 24) | \ -- ((u_int32_t) *((strptr)+2) << 16) | \ -- ((u_int32_t) *((strptr)+1) << 8) | \ -- ((u_int32_t) *(strptr))) -- --/* ROL(x, n) cyclically rotates x over n bits to the left */ --/* x must be of an unsigned 32 bits type and 0 <= n < 32. */ --#define ROL(x, n) (((x) << (n)) | ((x) >> (32-(n)))) -- --/* the three basic functions F(), G() and H() */ --#define F(x, y, z) ((x) ^ (y) ^ (z)) --#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) --#define H(x, y, z) (((x) | ~(y)) ^ (z)) --#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) --#define J(x, y, z) ((x) ^ ((y) | ~(z))) -- --/* the eight basic operations FF() through III() */ --#define FF(a, b, c, d, e, x, s) { \ -- (a) += F((b), (c), (d)) + (x); \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define GG(a, b, c, d, e, x, s) { \ -- (a) += G((b), (c), (d)) + (x) + 0x5a827999U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define HH(a, b, c, d, e, x, s) { \ -- (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define II(a, b, c, d, e, x, s) { \ -- (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcU; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define JJ(a, b, c, d, e, x, s) { \ -- (a) += J((b), (c), (d)) + (x) + 0xa953fd4eU; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define FFF(a, b, c, d, e, x, s) { \ -- (a) += F((b), (c), (d)) + (x); \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define GGG(a, b, c, d, e, x, s) { \ -- (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define HHH(a, b, c, d, e, x, s) { \ -- (a) += H((b), (c), (d)) + (x) + 0x6d703ef3U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define III(a, b, c, d, e, x, s) { \ -- (a) += I((b), (c), (d)) + (x) + 0x5c4dd124U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} --#define JJJ(a, b, c, d, e, x, s) { \ -- (a) += J((b), (c), (d)) + (x) + 0x50a28be6U; \ -- (a) = ROL((a), (s)) + (e); \ -- (c) = ROL((c), 10); \ --} -- --/********************************************************************/ -- --void --RMD160Init(context) -- RMD160_CTX *context; --{ -- -- /* ripemd-160 initialization constants */ -- context->state[0] = 0x67452301U; -- context->state[1] = 0xefcdab89U; -- context->state[2] = 0x98badcfeU; -- context->state[3] = 0x10325476U; -- context->state[4] = 0xc3d2e1f0U; -- context->length[0] = context->length[1] = 0; -- context->buflen = 0; --} -- --/********************************************************************/ -- --void --RMD160Transform(state, block) -- u_int32_t state[5]; -- const u_int32_t block[16]; --{ -- u_int32_t aa = state[0], bb = state[1], cc = state[2], -- dd = state[3], ee = state[4]; -- u_int32_t aaa = state[0], bbb = state[1], ccc = state[2], -- ddd = state[3], eee = state[4]; -- -- /* round 1 */ -- FF(aa, bb, cc, dd, ee, block[ 0], 11); -- FF(ee, aa, bb, cc, dd, block[ 1], 14); -- FF(dd, ee, aa, bb, cc, block[ 2], 15); -- FF(cc, dd, ee, aa, bb, block[ 3], 12); -- FF(bb, cc, dd, ee, aa, block[ 4], 5); -- FF(aa, bb, cc, dd, ee, block[ 5], 8); -- FF(ee, aa, bb, cc, dd, block[ 6], 7); -- FF(dd, ee, aa, bb, cc, block[ 7], 9); -- FF(cc, dd, ee, aa, bb, block[ 8], 11); -- FF(bb, cc, dd, ee, aa, block[ 9], 13); -- FF(aa, bb, cc, dd, ee, block[10], 14); -- FF(ee, aa, bb, cc, dd, block[11], 15); -- FF(dd, ee, aa, bb, cc, block[12], 6); -- FF(cc, dd, ee, aa, bb, block[13], 7); -- FF(bb, cc, dd, ee, aa, block[14], 9); -- FF(aa, bb, cc, dd, ee, block[15], 8); -- -- /* round 2 */ -- GG(ee, aa, bb, cc, dd, block[ 7], 7); -- GG(dd, ee, aa, bb, cc, block[ 4], 6); -- GG(cc, dd, ee, aa, bb, block[13], 8); -- GG(bb, cc, dd, ee, aa, block[ 1], 13); -- GG(aa, bb, cc, dd, ee, block[10], 11); -- GG(ee, aa, bb, cc, dd, block[ 6], 9); -- GG(dd, ee, aa, bb, cc, block[15], 7); -- GG(cc, dd, ee, aa, bb, block[ 3], 15); -- GG(bb, cc, dd, ee, aa, block[12], 7); -- GG(aa, bb, cc, dd, ee, block[ 0], 12); -- GG(ee, aa, bb, cc, dd, block[ 9], 15); -- GG(dd, ee, aa, bb, cc, block[ 5], 9); -- GG(cc, dd, ee, aa, bb, block[ 2], 11); -- GG(bb, cc, dd, ee, aa, block[14], 7); -- GG(aa, bb, cc, dd, ee, block[11], 13); -- GG(ee, aa, bb, cc, dd, block[ 8], 12); -- -- /* round 3 */ -- HH(dd, ee, aa, bb, cc, block[ 3], 11); -- HH(cc, dd, ee, aa, bb, block[10], 13); -- HH(bb, cc, dd, ee, aa, block[14], 6); -- HH(aa, bb, cc, dd, ee, block[ 4], 7); -- HH(ee, aa, bb, cc, dd, block[ 9], 14); -- HH(dd, ee, aa, bb, cc, block[15], 9); -- HH(cc, dd, ee, aa, bb, block[ 8], 13); -- HH(bb, cc, dd, ee, aa, block[ 1], 15); -- HH(aa, bb, cc, dd, ee, block[ 2], 14); -- HH(ee, aa, bb, cc, dd, block[ 7], 8); -- HH(dd, ee, aa, bb, cc, block[ 0], 13); -- HH(cc, dd, ee, aa, bb, block[ 6], 6); -- HH(bb, cc, dd, ee, aa, block[13], 5); -- HH(aa, bb, cc, dd, ee, block[11], 12); -- HH(ee, aa, bb, cc, dd, block[ 5], 7); -- HH(dd, ee, aa, bb, cc, block[12], 5); -- -- /* round 4 */ -- II(cc, dd, ee, aa, bb, block[ 1], 11); -- II(bb, cc, dd, ee, aa, block[ 9], 12); -- II(aa, bb, cc, dd, ee, block[11], 14); -- II(ee, aa, bb, cc, dd, block[10], 15); -- II(dd, ee, aa, bb, cc, block[ 0], 14); -- II(cc, dd, ee, aa, bb, block[ 8], 15); -- II(bb, cc, dd, ee, aa, block[12], 9); -- II(aa, bb, cc, dd, ee, block[ 4], 8); -- II(ee, aa, bb, cc, dd, block[13], 9); -- II(dd, ee, aa, bb, cc, block[ 3], 14); -- II(cc, dd, ee, aa, bb, block[ 7], 5); -- II(bb, cc, dd, ee, aa, block[15], 6); -- II(aa, bb, cc, dd, ee, block[14], 8); -- II(ee, aa, bb, cc, dd, block[ 5], 6); -- II(dd, ee, aa, bb, cc, block[ 6], 5); -- II(cc, dd, ee, aa, bb, block[ 2], 12); -- -- /* round 5 */ -- JJ(bb, cc, dd, ee, aa, block[ 4], 9); -- JJ(aa, bb, cc, dd, ee, block[ 0], 15); -- JJ(ee, aa, bb, cc, dd, block[ 5], 5); -- JJ(dd, ee, aa, bb, cc, block[ 9], 11); -- JJ(cc, dd, ee, aa, bb, block[ 7], 6); -- JJ(bb, cc, dd, ee, aa, block[12], 8); -- JJ(aa, bb, cc, dd, ee, block[ 2], 13); -- JJ(ee, aa, bb, cc, dd, block[10], 12); -- JJ(dd, ee, aa, bb, cc, block[14], 5); -- JJ(cc, dd, ee, aa, bb, block[ 1], 12); -- JJ(bb, cc, dd, ee, aa, block[ 3], 13); -- JJ(aa, bb, cc, dd, ee, block[ 8], 14); -- JJ(ee, aa, bb, cc, dd, block[11], 11); -- JJ(dd, ee, aa, bb, cc, block[ 6], 8); -- JJ(cc, dd, ee, aa, bb, block[15], 5); -- JJ(bb, cc, dd, ee, aa, block[13], 6); -- -- /* parallel round 1 */ -- JJJ(aaa, bbb, ccc, ddd, eee, block[ 5], 8); -- JJJ(eee, aaa, bbb, ccc, ddd, block[14], 9); -- JJJ(ddd, eee, aaa, bbb, ccc, block[ 7], 9); -- JJJ(ccc, ddd, eee, aaa, bbb, block[ 0], 11); -- JJJ(bbb, ccc, ddd, eee, aaa, block[ 9], 13); -- JJJ(aaa, bbb, ccc, ddd, eee, block[ 2], 15); -- JJJ(eee, aaa, bbb, ccc, ddd, block[11], 15); -- JJJ(ddd, eee, aaa, bbb, ccc, block[ 4], 5); -- JJJ(ccc, ddd, eee, aaa, bbb, block[13], 7); -- JJJ(bbb, ccc, ddd, eee, aaa, block[ 6], 7); -- JJJ(aaa, bbb, ccc, ddd, eee, block[15], 8); -- JJJ(eee, aaa, bbb, ccc, ddd, block[ 8], 11); -- JJJ(ddd, eee, aaa, bbb, ccc, block[ 1], 14); -- JJJ(ccc, ddd, eee, aaa, bbb, block[10], 14); -- JJJ(bbb, ccc, ddd, eee, aaa, block[ 3], 12); -- JJJ(aaa, bbb, ccc, ddd, eee, block[12], 6); -- -- /* parallel round 2 */ -- III(eee, aaa, bbb, ccc, ddd, block[ 6], 9); -- III(ddd, eee, aaa, bbb, ccc, block[11], 13); -- III(ccc, ddd, eee, aaa, bbb, block[ 3], 15); -- III(bbb, ccc, ddd, eee, aaa, block[ 7], 7); -- III(aaa, bbb, ccc, ddd, eee, block[ 0], 12); -- III(eee, aaa, bbb, ccc, ddd, block[13], 8); -- III(ddd, eee, aaa, bbb, ccc, block[ 5], 9); -- III(ccc, ddd, eee, aaa, bbb, block[10], 11); -- III(bbb, ccc, ddd, eee, aaa, block[14], 7); -- III(aaa, bbb, ccc, ddd, eee, block[15], 7); -- III(eee, aaa, bbb, ccc, ddd, block[ 8], 12); -- III(ddd, eee, aaa, bbb, ccc, block[12], 7); -- III(ccc, ddd, eee, aaa, bbb, block[ 4], 6); -- III(bbb, ccc, ddd, eee, aaa, block[ 9], 15); -- III(aaa, bbb, ccc, ddd, eee, block[ 1], 13); -- III(eee, aaa, bbb, ccc, ddd, block[ 2], 11); -- -- /* parallel round 3 */ -- HHH(ddd, eee, aaa, bbb, ccc, block[15], 9); -- HHH(ccc, ddd, eee, aaa, bbb, block[ 5], 7); -- HHH(bbb, ccc, ddd, eee, aaa, block[ 1], 15); -- HHH(aaa, bbb, ccc, ddd, eee, block[ 3], 11); -- HHH(eee, aaa, bbb, ccc, ddd, block[ 7], 8); -- HHH(ddd, eee, aaa, bbb, ccc, block[14], 6); -- HHH(ccc, ddd, eee, aaa, bbb, block[ 6], 6); -- HHH(bbb, ccc, ddd, eee, aaa, block[ 9], 14); -- HHH(aaa, bbb, ccc, ddd, eee, block[11], 12); -- HHH(eee, aaa, bbb, ccc, ddd, block[ 8], 13); -- HHH(ddd, eee, aaa, bbb, ccc, block[12], 5); -- HHH(ccc, ddd, eee, aaa, bbb, block[ 2], 14); -- HHH(bbb, ccc, ddd, eee, aaa, block[10], 13); -- HHH(aaa, bbb, ccc, ddd, eee, block[ 0], 13); -- HHH(eee, aaa, bbb, ccc, ddd, block[ 4], 7); -- HHH(ddd, eee, aaa, bbb, ccc, block[13], 5); -- -- /* parallel round 4 */ -- GGG(ccc, ddd, eee, aaa, bbb, block[ 8], 15); -- GGG(bbb, ccc, ddd, eee, aaa, block[ 6], 5); -- GGG(aaa, bbb, ccc, ddd, eee, block[ 4], 8); -- GGG(eee, aaa, bbb, ccc, ddd, block[ 1], 11); -- GGG(ddd, eee, aaa, bbb, ccc, block[ 3], 14); -- GGG(ccc, ddd, eee, aaa, bbb, block[11], 14); -- GGG(bbb, ccc, ddd, eee, aaa, block[15], 6); -- GGG(aaa, bbb, ccc, ddd, eee, block[ 0], 14); -- GGG(eee, aaa, bbb, ccc, ddd, block[ 5], 6); -- GGG(ddd, eee, aaa, bbb, ccc, block[12], 9); -- GGG(ccc, ddd, eee, aaa, bbb, block[ 2], 12); -- GGG(bbb, ccc, ddd, eee, aaa, block[13], 9); -- GGG(aaa, bbb, ccc, ddd, eee, block[ 9], 12); -- GGG(eee, aaa, bbb, ccc, ddd, block[ 7], 5); -- GGG(ddd, eee, aaa, bbb, ccc, block[10], 15); -- GGG(ccc, ddd, eee, aaa, bbb, block[14], 8); -- -- /* parallel round 5 */ -- FFF(bbb, ccc, ddd, eee, aaa, block[12] , 8); -- FFF(aaa, bbb, ccc, ddd, eee, block[15] , 5); -- FFF(eee, aaa, bbb, ccc, ddd, block[10] , 12); -- FFF(ddd, eee, aaa, bbb, ccc, block[ 4] , 9); -- FFF(ccc, ddd, eee, aaa, bbb, block[ 1] , 12); -- FFF(bbb, ccc, ddd, eee, aaa, block[ 5] , 5); -- FFF(aaa, bbb, ccc, ddd, eee, block[ 8] , 14); -- FFF(eee, aaa, bbb, ccc, ddd, block[ 7] , 6); -- FFF(ddd, eee, aaa, bbb, ccc, block[ 6] , 8); -- FFF(ccc, ddd, eee, aaa, bbb, block[ 2] , 13); -- FFF(bbb, ccc, ddd, eee, aaa, block[13] , 6); -- FFF(aaa, bbb, ccc, ddd, eee, block[14] , 5); -- FFF(eee, aaa, bbb, ccc, ddd, block[ 0] , 15); -- FFF(ddd, eee, aaa, bbb, ccc, block[ 3] , 13); -- FFF(ccc, ddd, eee, aaa, bbb, block[ 9] , 11); -- FFF(bbb, ccc, ddd, eee, aaa, block[11] , 11); -- -- /* combine results */ -- ddd += cc + state[1]; /* final result for state[0] */ -- state[1] = state[2] + dd + eee; -- state[2] = state[3] + ee + aaa; -- state[3] = state[4] + aa + bbb; -- state[4] = state[0] + bb + ccc; -- state[0] = ddd; --} -- --/********************************************************************/ -- --void --RMD160Update(context, data, nbytes) -- RMD160_CTX *context; -- const u_char *data; -- u_int32_t nbytes; --{ -- u_int32_t X[16]; -- u_int32_t ofs = 0; -- u_int32_t i; --#ifdef WORDS_BIGENDIAN -- u_int32_t j; --#endif -- -- /* update length[] */ -- if (context->length[0] + nbytes < context->length[0]) -- context->length[1]++; /* overflow to msb of length */ -- context->length[0] += nbytes; -- -- (void)memset(X, 0, sizeof(X)); -- -- if ( context->buflen + nbytes < 64 ) -- { -- (void)memcpy(context->bbuffer + context->buflen, data, nbytes); -- context->buflen += nbytes; -- } -- else -- { -- /* process first block */ -- ofs = 64 - context->buflen; -- (void)memcpy(context->bbuffer + context->buflen, data, ofs); --#ifndef WORDS_BIGENDIAN -- (void)memcpy(X, context->bbuffer, sizeof(X)); --#else -- for (j=0; j < 16; j++) -- X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j)); --#endif -- RMD160Transform(context->state, X); -- nbytes -= ofs; -- -- /* process remaining complete blocks */ -- for (i = 0; i < (nbytes >> 6); i++) { --#ifndef WORDS_BIGENDIAN -- (void)memcpy(X, data + (64 * i) + ofs, sizeof(X)); --#else -- for (j=0; j < 16; j++) -- X[j] = BYTES_TO_DWORD(data + (64 * i) + (4 * j) + ofs); --#endif -- RMD160Transform(context->state, X); -- } -- -- /* -- * Put last bytes from data into context's buffer -- */ -- context->buflen = nbytes & 63; -- memcpy(context->bbuffer, data + (64 * i) + ofs, context->buflen); -- } --} -- --/********************************************************************/ -- --void --RMD160Final(digest, context) -- u_char digest[20]; -- RMD160_CTX *context; --{ -- u_int32_t i; -- u_int32_t X[16]; --#ifdef WORDS_BIGENDIAN -- u_int32_t j; --#endif -- -- /* append the bit m_n == 1 */ -- context->bbuffer[context->buflen] = '\200'; -- -- (void)memset(context->bbuffer + context->buflen + 1, 0, -- 63 - context->buflen); --#ifndef WORDS_BIGENDIAN -- (void)memcpy(X, context->bbuffer, sizeof(X)); --#else -- for (j=0; j < 16; j++) -- X[j] = BYTES_TO_DWORD(context->bbuffer + (4 * j)); --#endif -- if ((context->buflen) > 55) { -- /* length goes to next block */ -- RMD160Transform(context->state, X); -- (void)memset(X, 0, sizeof(X)); -- } -- -- /* append length in bits */ -- X[14] = context->length[0] << 3; -- X[15] = (context->length[0] >> 29) | -- (context->length[1] << 3); -- RMD160Transform(context->state, X); -- -- if (digest != NULL) { -- for (i = 0; i < 20; i += 4) { -- /* extracts the 8 least significant bits. */ -- digest[i] = context->state[i>>2]; -- digest[i + 1] = (context->state[i>>2] >> 8); -- digest[i + 2] = (context->state[i>>2] >> 16); -- digest[i + 3] = (context->state[i>>2] >> 24); -- } -- } --} -- --/************************ end of file rmd160.c **********************/ --#endif -diff -ruN skey-1.1.5.orig/rmd160.h skey-1.1.5/rmd160.h ---- skey-1.1.5.orig/rmd160.h 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/rmd160.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,48 +0,0 @@ --/* $OpenBSD: rmd160.h,v 1.4 1999/08/16 09:59:04 millert Exp $ */ -- --/********************************************************************\ -- * -- * FILE: rmd160.h -- * -- * CONTENTS: Header file for a sample C-implementation of the -- * RIPEMD-160 hash-function. -- * TARGET: any computer with an ANSI C compiler -- * -- * AUTHOR: Antoon Bosselaers, ESAT-COSIC -- * DATE: 1 March 1996 -- * VERSION: 1.0 -- * -- * Copyright (c) Katholieke Universiteit Leuven -- * 1996, All Rights Reserved -- * --\********************************************************************/ -- --#ifndef _RMD160_H /* make sure this file is read only once */ --#define _RMD160_H -- --/********************************************************************/ -- --/* structure definitions */ -- --typedef struct { -- u_int32_t state[5]; /* state (ABCDE) */ -- u_int32_t length[2]; /* number of bits */ -- u_char bbuffer[64]; /* overflow buffer */ -- u_int32_t buflen; /* number of chars in bbuffer */ --} RMD160_CTX; -- --/********************************************************************/ -- --/* function prototypes */ -- --void RMD160Init __P((RMD160_CTX *context)); --void RMD160Transform __P((u_int32_t state[5], const u_int32_t block[16])); --void RMD160Update __P((RMD160_CTX *context, const u_char *data, u_int32_t nbytes)); --void RMD160Final __P((u_char digest[20], RMD160_CTX *context)); --char *RMD160End __P((RMD160_CTX *, char *)); --char *RMD160File __P((char *, char *)); --char *RMD160Data __P((const u_char *, size_t, char *)); -- --#endif /* _RMD160_H */ -- --/*********************** end of file rmd160.h ***********************/ -diff -ruN skey-1.1.5.orig/rmd160hl.c skey-1.1.5/rmd160hl.c ---- skey-1.1.5.orig/rmd160hl.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/rmd160hl.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,85 +0,0 @@ --/* rmd160hl.c -- * ---------------------------------------------------------------------------- -- * "THE BEER-WARE LICENSE" (Revision 42): -- * wrote this file. As long as you retain this notice you -- * can do whatever you want with this stuff. If we meet some day, and you think -- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp -- * ---------------------------------------------------------------------------- -- */ -- --#if defined(LIBC_SCCS) && !defined(lint) --static char rcsid[] = "$OpenBSD: rmd160hl.c,v 1.2 1999/08/17 09:13:12 millert Exp $"; --#endif /* LIBC_SCCS and not lint */ -- --#include --#include --#include --#include --#include --#include --#include --#include "config.h" --#ifdef HAVE_RMD160_H --#include --#else --#include "rmd160.h" --#endif -- --/* ARGSUSED */ --char * --RMD160End(ctx, buf) -- RMD160_CTX *ctx; -- char *buf; --{ -- int i; -- char *p = buf; -- u_char digest[20]; -- static const char hex[]="0123456789abcdef"; -- -- if (p == NULL && (p = malloc(41)) == NULL) -- return 0; -- -- RMD160Final(digest,ctx); -- for (i = 0; i < 20; i++) { -- p[i + i] = hex[digest[i] >> 4]; -- p[i + i + 1] = hex[digest[i] & 0x0f]; -- } -- p[i + i] = '\0'; -- return(p); --} -- --char * --RMD160File (filename, buf) -- char *filename; -- char *buf; --{ -- u_char buffer[BUFSIZ]; -- RMD160_CTX ctx; -- int fd, num, oerrno; -- -- RMD160Init(&ctx); -- -- if ((fd = open(filename, O_RDONLY)) < 0) -- return(0); -- -- while ((num = read(fd, buffer, sizeof(buffer))) > 0) -- RMD160Update(&ctx, buffer, num); -- -- oerrno = errno; -- close(fd); -- errno = oerrno; -- return(num < 0 ? 0 : RMD160End(&ctx, buf)); --} -- --char * --RMD160Data (data, len, buf) -- const u_char *data; -- size_t len; -- char *buf; --{ -- RMD160_CTX ctx; -- -- RMD160Init(&ctx); -- RMD160Update(&ctx, data, len); -- return(RMD160End(&ctx, buf)); --} -diff -ruN skey-1.1.5.orig/skey.1 skey-1.1.5/skey.1 ---- skey-1.1.5.orig/skey.1 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skey.1 2003-11-06 17:46:45.000000000 +0000 -@@ -1,95 +1,165 @@ --.\" $OpenBSD: skey.1,v 1.21 2000/11/09 17:52:38 aaron Exp $ --.\" @(#)skey.1 1.1 10/28/93 -+.\" $NetBSD: skey.1,v 1.21 2003/09/07 16:22:24 wiz Exp $ - .\" --.Dd October 28, 1993 -+.\" from: @(#)skey.1 1.1 10/28/93 -+.\" -+.Dd July 25, 2001 - .Dt SKEY 1 - .Os - .Sh NAME --.Nm skey, otp-md4, otp-md5, otp-sha1, otp-rmd160 -+.Nm skey - .Nd respond to an OTP challenge - .Sh SYNOPSIS --.Nm skey --.Op Fl x --.Oo --.Fl md4 | Fl md5 | Fl sha1 | --.Fl rmd160 --.Oc -+.Nm - .Op Fl n Ar count --.Op Fl p Ar passwd --[/] key -+.Op Fl p Ar password -+.Op Fl t Ar hash -+.Op Fl x -+.Ar sequence# -+.Op / -+.Ar key - .Sh DESCRIPTION --.Nm S/key --is a procedure for using one-time passwords to authenticate access to --computer systems. --It uses 64 bits of information transformed by the --MD4, MD5, SHA1, or RIPEMD-160 algorithms. --The user supplies the 64 bits --in the form of 6 English words that are generated by a secure computer. --This implementation of --.Nm s/key --is RFC 1938 compliant. -+.Em S/Key -+is a One Time Password (OTP) authentication system. -+It is intended to be used when the communication channel between -+a user and host is not secure (e.g. not encrypted or hardwired). -+Since each password is used only once, even if it is "seen" by a -+hostile third party, it cannot be used again to gain access to the host. - .Pp --When --.Nm skey --is invoked as --.Nm otp-method , --.Nm skey --will use --.Ar method --as the hash function where --.Ar method --is currently one of md4, md5, sha1, or rmd160. -+.Em S/Key -+uses 64 bits of information, transformed by the -+.Tn MD4 -+algorithm into 6 English words. -+The user supplies the words to authenticate himself to programs like -+.Xr login 1 -+or -+.Xr ftpd 8 . -+.Pp -+Example use of the -+.Em S/Key -+program -+.Nm : -+.Bd -literal -offset indent -+% skey 99 th91334 -+Enter password: \*[Lt]your secret password is entered here\*[Gt] -+OMEN US HORN OMIT BACK AHOY -+% -+.Ed -+.Pp -+The string that is given back by -+.Nm -+can then be used to log into a system. -+.Pp -+The programs that are part of the -+.Em S/Key -+system are: -+.Bl -tag -width skeyauditxxx -+.It Xr skeyinit 1 -+used to set up your -+.Em S/Key . -+.It Nm -+used to get the one time password(s). -+.It Xr skeyinfo 1 -+used to initialize the -+.Em S/Key -+database for the specified user. -+It also tells the user what the next challenge will be. -+.It Xr skeyaudit 1 -+used to inform users that they will soon have to rerun -+.Xr skeyinit 1 . -+.El - .Pp --If you misspell your password while running --.Nm skey , -+When you run -+.Xr skeyinit 1 -+you inform the system of your -+secret password. -+Running -+.Nm -+then generates the -+one-time password(s), after requiring your secret password. -+If however, you misspell your secret password that you have given to -+.Xr skeyinit 1 -+while running -+.Xr skey 1 - you will get a list of passwords --that will not work, and no indication of the problem. -+that will not work, and no indication about the problem. - .Pp --Password sequence numbers count backwards. -+Password sequence numbers count backward from 99. - You can enter the passwords using small letters, even though --.Nm skey -+.Xr skey 1 - prints them capitalized. - .Pp --The options are as follows: --.Bl -tag -width Ds --.It Fl n Ar count --Prints out -+The -+.Fl n Ar count -+argument asks for - .Ar count --one-time passwords. --The default is to print one. --.It Fl p Ar password --Uses --.Ar password --as the secret password. --Use of this option is discouraged as --your secret password could be visible in a process listing. --.It Fl x --Causes output to be in hexadecimal instead of ASCII. --.It Fl md4 --Selects MD4 as the hash algorithm. --.It Fl md5 --Selects MD5 as the hash algorithm. --.It Fl sha1 --Selects SHA-1 (NIST Secure Hash Algorithm Revision 1) as the hash algorithm. --.It Fl rmd160 --Selects RMD-160 (160 bit Ripe Message Digest) as the hash algorithm. --.El -+password sequences to be printed out ending with the requested -+sequence number. -+.Pp -+The hash algorithm is selected using the -+.Fl t Ar hash -+option, possible choices here are md4, md5 or sha1. -+.Pp -+The -+.Fl p Ar password -+allows the user to specify the -+.Em S/Key -+password on the command line. -+.Pp -+To output the S/Key list in hexadecimal instead of words, -+use the -+.Fl x -+option. - .Sh EXAMPLES --.sp 0 -- % skey 99 th91334 --.sp 0 -- Enter secret password: --.sp 0 -- OMEN US HORN OMIT BACK AHOY --.sp 0 -- % -+Initialize generation of one time passwords: -+.Bd -literal -offset indent -+host% skeyinit -+Password: \*[Lt]normal login password\*[Gt] -+[Adding username] -+Enter secret password: \*[Lt]new secret password\*[Gt] -+Again secret password: \*[Lt]new secret password again\*[Gt] -+ID username s/key is 99 host12345 -+Next login password: SOME SIX WORDS THAT WERE COMPUTED -+.Ed -+.Pp -+Produce a list of one time passwords to take with to a conference: -+.Bd -literal -offset indent -+host% skey -n 3 99 host12345 -+Enter secret password: \*[Lt]secret password as used with skeyinit\*[Gt] -+97: NOSE FOOT RUSH FEAR GREY JUST -+98: YAWN LEO DEED BIND WACK BRAE -+99: SOME SIX WORDS THAT WERE COMPUTED -+.Ed -+.Pp -+Logging in to a host where -+.Nm -+is installed: -+.Bd -literal -offset indent -+host% telnet host -+ -+login: \*[Lt]username\*[Gt] -+Password [s/key 97 host12345]: -+.Ed -+.Pp -+Note that the user can use either his/her -+.Em S/Key -+password at the prompt but also the normal one unless the -+.Fl s -+flag is given to -+.Xr login 1 . - .Sh SEE ALSO - .Xr login 1 , -+.Xr skeyaudit 1 , - .Xr skeyinfo 1 , --.Xr skeyinit 1 -+.Xr skeyinit 1 , -+.Xr ftpd 8 - .Pp --.Em RFC1938 -+.Em RFC 2289 - .Sh TRADEMARKS AND PATENTS --S/Key is a Trademark of Bellcore. -+.Em S/Key -+is a trademark of -+.Tn Bellcore . - .Sh AUTHORS --Phil Karn, Neil M. Haller, John S. Walden, Scott Chasin -+Phil Karn, -+Neil M. Haller, -+John S. Walden, -+Scott Chasin -diff -ruN skey-1.1.5.orig/skey.3 skey-1.1.5/skey.3 ---- skey-1.1.5.orig/skey.3 1970-01-01 01:00:00.000000000 +0100 -+++ skey-1.1.5/skey.3 2003-11-06 17:46:45.000000000 +0000 -@@ -0,0 +1,264 @@ -+.\" $NetBSD: skey.3,v 1.8 2003/06/06 13:42:50 wiz Exp $ -+.\" -+.\" Copyright (c) 2001 The NetBSD Foundation, Inc. -+.\" All rights reserved. -+.\" -+.\" This code is derived from software contributed to The NetBSD Foundation -+.\" by Gregory McGarry. -+.\" -+.\" 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. -+.\" 3. All advertising materials mentioning features or use of this software -+.\" must display the following acknowledgement: -+.\" This product includes software developed by the NetBSD -+.\" Foundation, Inc. and its contributors. -+.\" 4. Neither the name of The NetBSD Foundation nor the names of its -+.\" contributors may be used to endorse or promote products derived -+.\" from this software without specific prior written permission. -+.\" -+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -+.\" ``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 FOUNDATION OR CONTRIBUTORS -+.\" 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. -+.\" -+.Dd November 10, 2001 -+.Dt SKEY 3 -+.Os -+.Sh NAME -+.Nm skey , -+.Nm skeychallenge , -+.Nm skeylookup , -+.Nm skeygetnext , -+.Nm skeyverify , -+.Nm skeyzero , -+.Nm getskeyprompt , -+.Nm skey_set_algorithm , -+.Nm skey_get_algorithm , -+.Nm skey_haskey , -+.Nm skey_keyinfo , -+.Nm skey_passcheck , -+.Nm skey_authenticate -+.Nd one-time password (OTP) library -+.Sh LIBRARY -+S/key One-Time Password Library (libskey, -lskey) -+.Sh SYNOPSIS -+.In skey.h -+.Ft int -+.Fn skeychallenge "struct skey *mp" "const char *name" "char *ss" \ -+"size_t sslen" -+.Ft int -+.Fn skeylookup "struct skey *mp" "const char *name" -+.Ft int -+.Fn skeygetnext "struct skey *mp" -+.Ft int -+.Fn skeyverify "struct skey *mp" "char *response" -+.Ft int -+.Fn skeyzero "struct skey *mp" "char *response" -+.Ft int -+.Fn getskeyprompt "struct skey *mp" "char *name" "char *prompt" -+.Ft const char * -+.Fn skey_set_algorithm "const char *new" -+.Ft const char * -+.Fn skey_get_algorithm "void" -+.Ft int -+.Fn skey_haskey "const char *username" -+.Ft const char * -+.Fn skey_keyinfo "const char *username" -+.Ft int -+.Fn skey_passcheck "const char *username" "char *passwd" -+.Ft int -+.Fn skey_authenticate "const char *username" -+.Ft void -+.Fn f "char *x" -+.Ft int -+.Fn keycrunch "char *result" "const char *seed" "const char *passwd" -+.Ft void -+.Fn rip "char *buf" -+.Ft char * -+.Fn readpass "char *buf " "int n" -+.Ft char * -+.Fn readskey "char *buf" "int n" -+.Ft int -+.Fn atob8 "char *out" "const char *in" -+.Ft int -+.Fn btoa8 "char *out" "const char *in" -+.Ft int -+.Fn htoi "int c" -+.Ft const char * -+.Fn skipspace "const char *cp" -+.Ft void -+.Fn backspace "char *buf" -+.Ft void -+.Fn sevenbit "char *buf" -+.Ft char * -+.Fn btoe "char *engout" "const char *c" -+.Ft int -+.Fn etob "char *out" "const char *e" -+.Ft char * -+.Fn put8 "char *out" "const char *s" -+.Sh DESCRIPTION -+The -+.Nm -+library provides routines for accessing -+.Nx Ns 's -+one-time password (OTP) authentication system. -+.Pp -+Most S/Key operations take a pointer to a -+.Em struct skey , -+which should be considered as an opaque identifier. -+.Sh FUNCTIONS -+The following high-level functions are available: -+.Bl -tag -width compact -+.It Fn skeychallenge "mp" "name" "ss" "sslen" -+Return a S/Key challenge for user -+.Fa name . -+If successful, the caller's skey structure -+.Fa mp -+is filled and 0 is returned. -+If unsuccessful (e.g. if name is unknown), -+\-1 is returned. -+.It Fn skeylookup "mp" "name" -+Find an entry for user -+.Fa name -+in the one-time password database. -+Returns 0 if the entry is found and 1 if the entry is not found. -+If an error occurs accessing the database, \-1 is returned. -+.It Fn skeygetnext "mp" -+Get the next entry in the one-time password database. -+Returns 0 on success and the entry is stored in -+.Ar mp -+and 1 if no more entries are available. -+If an error occurs accessing the database, \-1 is returned. -+.It Fn skeyverify "mp" "response" -+Verify response -+.Fa response -+to a S/Key challenge. -+Returns 0 if the verification is successful and 1 if the verification failed. -+If an error occurs accessing the database, \-1 is returned. -+.It Fn skeyzero "mp" "response" -+Comment out user's entry in the S/Key database. -+Returns 0 on success and the database is updated, -+otherwise \-1 is returned and the database remains unchanged. -+.It Fn getskeyprompt "mp" "name" "prompt" -+Issue a S/Key challenge for user -+.Ar name . -+If successful, fill in the caller's skey structure -+.Fa mp -+and return 0. -+If unsuccessful (e.g. if name is unknown) \-1 is returned. -+.El -+.Pp -+The following lower-level functions are available: -+.Bl -tag -width compact -+.It Fn skey_set_algorithm "new" -+Set hash algorithm type. -+Valid values for -+.Fa new -+are "md4", "md5" and "sha1". -+.It Fn skey_get_algorithm "void" -+Get current hash type. -+.It Fn skey_haskey "username" -+Returns 0 if the user -+.Fa username -+exists and 1 if the user doesn't exist. -+Returns \-1 on file error. -+.It Fn skey_keyinfo "username" -+Returns the current sequence number and seed for user -+.Ar username . -+.It Fn skey_passcheck "username" "passwd" -+Checks to see if answer is the correct one to the current challenge. -+.It Fn skey_authenticate "username" -+Used when calling program will allow input of the user's response to -+the challenge. -+Returns zero on success or \-1 on failure. -+.El -+.Pp -+The following miscellaneous functions are available: -+.Bl -tag -width compact -+.It Fn f "x" -+One-way function to take 8 bytes pointed to by -+.Fa x -+and return 8 bytes in place. -+.It Fn keycrunch "char *result" "const char *seed" "const char *passwd" -+Crunch a key. -+.It Fn rip "buf" -+Strip trailing CR/LF characters from a line of text -+.Fa buf . -+.It Fn readpass "buf" "n" -+Read in secret passwd (turns off echo). -+.It Fn readskey "buf" "n" -+Read in an s/key OTP (does not turn off echo). -+.It Fn atob8 "out" "in" -+Convert 8-byte hex-ascii string -+.Fa in -+to binary array -+.Fa out . -+Returns 0 on success, \-1 on error. -+.It Fn btoa8 "out" "in" -+Convert 8-byte binary array -+.Fa in -+to hex-ascii string -+.Fa out . -+Returns 0 on success, \-1 on error. -+.It Fn htoi "int c" -+Convert hex digit to binary integer. -+.It Fn skipspace "cp" -+Skip leading spaces from the string -+.Fa cp . -+.It Fn backspace "buf" -+Remove backspaced over characters from the string -+.Fa buf . -+.It Fn sevenbit "buf" -+Ensure line -+.Fa buf -+is all seven bits. -+.It Fn btoe "engout" "c" -+Encode 8 bytes in -+.Ar c -+as a string of English words. -+Returns a pointer to a static buffer in -+.Fa engout . -+.It Fn etob "out" "e" -+Convert English to binary. -+Returns 0 if the word is not in the database, 1 if all good words and -+parity is valid, \-1 if badly formed input (i.e. \*[Gt] 4 char word) -+and -2 if words are valid but parity is wrong. -+.It Fn put8 "out" "s" -+Display 8 bytes -+.Fa s -+as a series of 16-bit hex digits. -+.El -+.Sh FILES -+.Bl -tag -width /usr/lib/libskey_p.a -compact -+.It Pa /usr/lib/libskey.a -+static skey library -+.It Pa /usr/lib/libskey.so -+dynamic skey library -+.It Pa /usr/lib/libskey_p.a -+static skey library compiled for profiling -+.El -+.Sh SEE ALSO -+.Xr skey 1 , -+.Xr skeyaudit 1 , -+.Xr skeyinfo 1 -+.Sh BUGS -+The -+.Nm -+library functions are not re-entrant or thread-safe. -+.Pp -+The -+.Nm -+library defines many poorly named functions which pollute the name space. -diff -ruN skey-1.1.5.orig/skeyaudit.1 skey-1.1.5/skeyaudit.1 ---- skey-1.1.5.orig/skeyaudit.1 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyaudit.1 2003-11-06 17:46:45.000000000 +0000 -@@ -1,46 +1,29 @@ --.\" $OpenBSD: skeyaudit.1,v 1.8 2000/11/09 17:52:38 aaron Exp $ -+.\" $NetBSD: skeyaudit.1,v 1.6 2001/04/09 12:34:14 wiz Exp $ - .\" --.Dd 22 July 1997 -+.Dd June 9, 1994 - .Dt SKEYAUDIT 1 - .Os - .Sh NAME - .Nm skeyaudit - .Nd warn users if their S/Key will soon expire - .Sh SYNOPSIS --.Nm skeyaudit --.Op Fl a --.Op Fl i --.Op Fl l Ar limit -+.Nm -+.Op Ar limit - .Sh DESCRIPTION - .Nm - searches through the file --.Pa /etc/skeykeys -+.Dq Pa /etc/skey/skeykeys - for users whose S/Key sequence number is less than - .Ar limit , --and mails them a reminder to run -+and sends them a reminder to run - .Xr skeyinit 1 --soon. --.Pp --The options are as follows: --.Bl -tag -width Ds --.It Fl a --Check all keys in --.Pa /etc/skeykeys . --This option is only available to the superuser and --is useful to run regularly via --.Xr cron 8 . --.It Fl i --Interactive mode. --Don't send mail, just print to the standard output. --.It Fl l Ar limit --The limit used to determine whether or not a user should be notified. --The default is to notify if there are fewer than 12 keys left. --.El -+soon. If no limit is specified a default of 12 is used. - .Sh FILES --.Bl -tag -width /etc/skeykeys -compact --.It Pa /etc/skeykeys --S/Key key information database -+.Bl -tag -width /etc/skey/skeykeys -compact -+.It Pa /etc/skey/skeykeys -+The S/Key key information database - .El - .Sh SEE ALSO - .Xr skey 1 , -+.Xr skeyinfo 1 , - .Xr skeyinit 1 -diff -ruN skey-1.1.5.orig/skeyaudit.c skey-1.1.5/skeyaudit.c ---- skey-1.1.5.orig/skeyaudit.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyaudit.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,236 +0,0 @@ --/* $OpenBSD: skeyaudit.c,v 1.10 2000/09/20 21:53:49 pjanzen Exp $ */ -- --/* -- * Copyright (c) 1997, 2000 Todd C. Miller -- * 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. -- * 3. The name of the author may not be used to endorse or promote products -- * derived from this software without specific prior written permission. -- * -- * THIS SOFTWARE IS PROVIDED ``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 --/*#include */ --#include --#include --#include --#include --#include --#include --#include "config.h" --#ifdef HAVE_ERR_H --#include --#else --#include "err.h" --#endif --#include "skey.h" -- --#include --#include --#include -- --#ifdef HAVE_LOGIN_CAP_H --# include --#else --# include "login_cap.h" --#endif -- --char *__progname; -- --void notify __P((struct passwd *, int, int)); --FILE *runsendmail __P((struct passwd *, int *)); --void usage __P((void)); -- --int --main(argc, argv) -- int argc; -- char **argv; --{ -- struct passwd *pw; -- struct skey key; -- int ch, errs = 0, left = 0, aflag = 0, iflag = 0, limit = 12; -- char *name; -- -- __progname = argv[0]; -- -- if (geteuid() != 0) -- errx(1, "must be setuid root"); -- -- while ((ch = getopt(argc, argv, "ail:")) != -1) -- switch(ch) { -- case 'a': -- aflag = 1; -- if (getuid() != 0) -- errx(1, "only root may use the -a flag"); -- break; -- case 'i': -- iflag = 1; -- break; -- case 'l': -- errno = 0; -- if ((limit = (int)strtol(optarg, NULL, 10)) == 0) -- errno = ERANGE; -- if (errno) { -- warn("key limit"); -- usage(); -- } -- break; -- default: -- usage(); -- } -- -- if (argc - optind > 0) -- usage(); -- -- /* Need key.keyfile zero'd at the very least */ -- (void)memset(&key, 0, sizeof(key)); -- -- if (aflag) { -- while ((ch = skeygetnext(&key)) == 0) { -- left = key.n - 1; -- if ((pw = getpwnam(key.logname)) == NULL) -- continue; -- if (left >= limit) -- continue; -- notify(pw, left, iflag); -- } -- if (ch == -1) -- errx(-1, "cannot open %s", SKEYKEYS); -- else -- (void)fclose(key.keyfile); -- } else { -- if ((pw = getpwuid(getuid())) == NULL) -- errx(1, "no passwd entry for uid %u", getuid()); -- if ((name = strdup(pw->pw_name)) == NULL) -- err(1, "cannot allocate memory"); -- sevenbit(name); -- -- errs = skeylookup(&key, name); -- switch (errs) { -- case 0: /* Success! */ -- left = key.n - 1; -- break; -- case -1: /* File error */ -- errx(errs, "cannot open %s", SKEYKEYS); -- break; -- case 1: /* Unknown user */ -- warnx("%s is not listed in %s", name, -- SKEYKEYS); -- } -- (void)fclose(key.keyfile); -- -- if (!errs && left < limit) -- notify(pw, left, iflag); -- } -- -- exit(errs); --} -- --void --notify(pw, seq, interactive) -- struct passwd *pw; -- int seq; -- int interactive; --{ -- static char hostname[MAXHOSTNAMELEN]; -- int pid; -- FILE *out; -- -- /* Only set this once */ -- if (hostname[0] == '\0' && gethostname(hostname, sizeof(hostname)) == -1) -- strcpy(hostname, "unknown"); -- -- if (interactive) -- out = stdout; -- else -- out = runsendmail(pw, &pid); -- -- if (!interactive) -- (void)fprintf(out, -- "To: %s\nSubject: IMPORTANT action required\n", pw->pw_name); -- -- if (seq) -- (void)fprintf(out, --"\nYou are nearing the end of your current S/Key sequence for account\n\ --%s on system %s.\n\n\ --Your S/Key sequence number is now %d. When it reaches zero\n\ --you will no longer be able to use S/Key to log into the system.\n\n", --pw->pw_name, hostname, seq); -- else -- (void)fprintf(out, --"\nYou are at the end of your current S/Key sequence for account\n\ --%s on system %s.\n\n\ --At this point you can no longer use S/Key to log into the system.\n\n", --pw->pw_name, hostname); -- (void)fprintf(out, --"Type \"skeyinit -s\" to reinitialize your sequence number.\n\n"); -- -- (void)fclose(out); -- if (!interactive) -- (void)waitpid(pid, NULL, 0); --} -- --FILE * --runsendmail(pw, pidp) -- struct passwd *pw; -- int *pidp; --{ -- FILE *fp; -- int pfd[2], pid; -- -- if (pipe(pfd) < 0) -- return(NULL); -- -- switch (pid = fork()) { -- case -1: /* fork(2) failed */ -- (void)close(pfd[0]); -- (void)close(pfd[1]); -- return(NULL); -- case 0: /* In child */ -- (void)close(pfd[1]); -- (void)dup2(pfd[0], STDIN_FILENO); -- (void)close(pfd[0]); -- -- /* Run sendmail as target user not root */ -- if (setusercontext(NULL, pw, pw->pw_uid, LOGIN_SETALL) != 0) { -- warn("cannot set user context"); -- _exit(127); -- } -- -- execl(SENDMAIL, "sendmail", "-t", NULL); -- warn("cannot run \"%s -t\"", SENDMAIL); -- _exit(127); -- } -- -- /* In parent */ -- *pidp = pid; -- fp = fdopen(pfd[1], "w"); -- (void)close(pfd[0]); -- -- return(fp); --} --void --usage() --{ -- (void)fprintf(stderr, "Usage: %s [-i] [-l limit]\n", -- __progname); -- exit(1); --} -diff -ruN skey-1.1.5.orig/skeyaudit.sh skey-1.1.5/skeyaudit.sh ---- skey-1.1.5.orig/skeyaudit.sh 1970-01-01 01:00:00.000000000 +0100 -+++ skey-1.1.5/skeyaudit.sh 2003-11-06 17:46:45.000000000 +0000 -@@ -0,0 +1,58 @@ -+#!/bin/sh -+# -+# $NetBSD: skeyaudit.sh,v 1.2.12.2 2000/07/28 12:42:59 mjl Exp $ -+# -+# This script will look thru the skeykeys file for -+# people with sequence numbers less than LOWLIMIT=12 -+# and send them an e-mail reminder to use skeyinit soon -+# -+ -+KEYDB=/etc/skey/skeykeys -+LOWLIMIT=12 -+ADMIN=root -+SUBJECT="Reminder: Run skeyinit" -+HOST=`/bin/hostname` -+ -+ -+if [ "$1" != "" ] -+then -+ LOWLIMIT=$1 -+fi -+ -+if [ ! -s "${KEYDB}" ]; then -+ exit 0 -+fi -+ -+# an skeykeys entry looks like -+# jsw 0076 la13079 ba20a75528de9d3a -+# #oot md5 0005 aspa26398 9432d570ff4421f0 Jul 07,2000 01:36:43 -+# mjl sha1 0099 alpha2 459a5dac23d20a90 Jul 07,2000 02:14:17 -+# the sequence number is the second (or third) entry -+# -+ -+SKEYS=`awk '/^#/ {next} {if($2 ~ /^[0-9]+$/) print $1,$2,$3; else print $1,$3,$4; }' $KEYDB` -+ -+set -- ${SKEYS} -+ -+while [ "X$1" != "X" ]; do -+ USER=$1 -+ SEQ=$2 -+ KEY=$3 -+ shift 3 -+ # echo "$USER -- $SEQ -- $KEY" -+ if [ $SEQ -lt $LOWLIMIT ]; then -+ if [ $SEQ -lt 3 ]; then -+ SUBJECT="IMPORTANT action required" -+ fi -+ ( -+ echo "You are nearing the end of your current S/Key sequence for account $i" -+ echo "on system $HOST." -+ echo "" -+ echo "Your S/key sequence number is now $SEQ. When it reaches zero you" -+ echo "will no longer be able to use S/Key to login into the system. " -+ echo " " -+ echo "Use \"skeyinit -s\" to reinitialize your sequence number." -+ echo "" -+ ) | mail -s "$SUBJECT" $USER $ADMIN -+ fi -+done -diff -ruN skey-1.1.5.orig/skey.c skey-1.1.5/skey.c ---- skey-1.1.5.orig/skey.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skey.c 2003-11-06 17:46:45.000000000 +0000 -@@ -25,6 +25,7 @@ - #include - #include - #include -+#include - #include "config.h" - - #ifdef HAVE_ERR_H -@@ -35,102 +36,93 @@ - - #include "skey.h" - --void usage __P((char *)); -+int main(int, char **); -+void usage(char *); - - int --main(argc, argv) -- int argc; -- char *argv[]; -+main(int argc, char **argv) - { -- int n, i, cnt = 1, pass = 0, hexmode = 0; -- char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; -- char buf[33], *seed, *slash; -- -- /* If we were called as otp-METHOD, set algorithm based on that */ -- if ((slash = strrchr(argv[0], '/'))) -- slash++; -- else -- slash = argv[0]; -- if (strncmp(slash, "otp-", 4) == 0) { -- slash += 4; -- if (skey_set_algorithm(slash) == NULL) -- errx(1, "Unknown hash algorithm %s", slash); -- } -- -- for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { -- if (argv[i][2] == '\0') { -- /* Single character switch */ -- switch (argv[i][1]) { -+ int n, cnt = 1, i, pass = 0, hexmode = 0; -+ char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; -+ char buf[33], *seed, *slash, *t; -+ -+ while ((i = getopt(argc, argv, "fn:p:t:x")) != -1) { -+ switch(i) { -+ case 'f': -+ break; /* unused */ - case 'n': -- if (i + 1 == argc) -- usage(argv[0]); -- cnt = atoi(argv[++i]); -+ cnt = atoi(optarg); - break; - case 'p': -- if (i + 1 == argc) -- usage(argv[0]); -- if (strlcpy(passwd, argv[++i], sizeof(passwd)) >= -- sizeof(passwd)) -- errx(1, "Password too long"); -+ if (strncpy(passwd, optarg, sizeof(passwd)) == NULL) -+ errx(1, "Password too long"); - pass = 1; - break; -+ case 't': -+ if (skey_set_algorithm(optarg) == NULL) -+ errx(1, "Unknown hash algorithm %s", optarg); -+ break; - case 'x': - hexmode = 1; - break; - default: - usage(argv[0]); -- } -- } else { -- /* Multi character switches are hash types */ -- if (skey_set_algorithm(&argv[i][1]) == NULL) { -- warnx("Unknown hash algorithm %s", &argv[i][1]); -- usage(argv[0]); -- } -+ break; - } -- i++; - } - -- if (argc > i + 2) -- usage(argv[0]); -- -- /* Could be in the form / */ -- if (argc <= i + 1) { -+ /* could be in the form / */ -+ if (argc <= optind + 1) { - /* look for / in it */ -- if (argc <= i) -+ if (argc <= optind) - usage(argv[0]); -- slash = strchr(argv[i], '/'); -+ slash = strchr(argv[optind], '/'); - if (slash == NULL) - usage(argv[0]); - *slash++ = '\0'; - seed = slash; - -- if ((n = atoi(argv[i])) < 0) { -- warnx("%d not positive", n); -+ if ((n = atoi(argv[optind])) < 0) { -+ fprintf(stderr, "%s is not positive\n", argv[optind]); - usage(argv[0]); - } else if (n > SKEY_MAX_SEQ) { - warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); - usage(argv[0]); - } - } else { -- if ((n = atoi(argv[i])) < 0) { -- warnx("%d not positive", n); -+ if ((n = atoi(argv[optind])) < 0) { -+ fprintf(stderr, "%s not positive\n", argv[optind]); - usage(argv[0]); - } else if (n > SKEY_MAX_SEQ) { - warnx("%d is larger than max (%d)", n, SKEY_MAX_SEQ); - usage(argv[0]); - } -- seed = argv[++i]; -+ seed = argv[++optind]; -+ } -+ -+ for (t = seed; *t; t++) { -+ if (!isalnum(*t)) -+ errx(1, "seed must be alphanumeric"); - } - -+ if (!*seed || strlen(seed) > SKEY_MAX_SEED_LEN) -+ errx(1, "seed must be between 1 and %d long", SKEY_MAX_SEED_LEN); -+ - /* Get user's secret password */ - if (!pass) { -- (void)fputs("Reminder - Do not use this program while logged in via telnet or rlogin.\n", stderr); -- (void)fputs("Enter secret password: ", stderr); -+ fputs("Reminder - Do not use this program while " -+ "logged in via telnet or rlogin.\n", stderr); -+ fprintf(stderr, "Enter secret password: "); - readpass(passwd, sizeof(passwd)); - if (passwd[0] == '\0') - exit(1); - } - -+ if (strlen(passwd) < SKEY_MIN_PW_LEN) -+ warnx( -+ "RFC2289 states that password should be at least %d characters long", -+ SKEY_MIN_PW_LEN); -+ - /* Crunch seed and password into starting key */ - if (keycrunch(key, seed, passwd) != 0) - errx(1, "key crunch failed"); -@@ -138,16 +130,15 @@ - if (cnt == 1) { - while (n-- != 0) - f(key); -- (void)puts(hexmode ? put8(buf, key) : btoe(buf, key)); -+ puts(hexmode ? put8(buf, key) : btoe(buf, key)); - } else { - for (i = 0; i <= n - cnt; i++) - f(key); - for (; i <= n; i++) { -+ printf("%3d: %-29s", i, btoe(buf, key)); - if (hexmode) -- (void)printf("%d: %-29s %s\n", i, -- btoe(buf, key), put8(buf, key)); -- else -- (void)printf("%d: %-29s\n", i, btoe(buf, key)); -+ printf("\t%s", put8(buf, key)); -+ puts(""); - f(key); - } - } -@@ -155,9 +146,10 @@ - } - - void --usage(s) -- char *s; -+usage(char *s) - { -- (void)fprintf(stderr, "Usage: %s [-x] [-md4|-md5|-sha1|-rmd160] [-n count] [-p password] [/] key\n", s); -+ fprintf(stderr, -+"Usage: %s [-n count] [-p password] [-t hash] [-x] sequence# [/] key\n", -+ s); - exit(1); - } -diff -ruN skey-1.1.5.orig/skey.h skey-1.1.5/skey.h ---- skey-1.1.5.orig/skey.h 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skey.h 2003-11-06 17:46:45.000000000 +0000 -@@ -1,3 +1,5 @@ -+/* $NetBSD: skey.h,v 1.8 2000/07/28 16:35:11 thorpej Exp $ */ -+ - /* - * S/KEY v1.1b (skey.h) - * -@@ -11,86 +13,86 @@ - * Todd C. Miller - * - * Main client header -- * -- * $OpenBSD: skey.h,v 1.13 1999/07/15 14:33:48 provos Exp $ - */ - - /* Server-side data structure for reading keys file during login */ --struct skey { -- FILE *keyfile; -- char buf[256]; -- char *logname; -- int n; -- char *seed; -- char *val; -- long recstart; /* needed so reread of buffer is efficient */ -+struct skey -+{ -+ FILE *keyfile; -+ char buf[256]; -+ char *logname; -+ int n; -+ char *seed; -+ char *val; -+ long recstart; /* needed so reread of buffer is efficient */ - }; - - /* Client-side structure for scanning data stream for challenge */ --struct mc { -- char buf[256]; -- int skip; -- int cnt; -+struct mc -+{ -+ char buf[256]; -+ int skip; -+ int cnt; - }; - - /* Maximum sequence number we allow */ - #ifndef SKEY_MAX_SEQ --#define SKEY_MAX_SEQ 10000 -+#define SKEY_MAX_SEQ 10000 - #endif - --/* Minimum secret password length (rfc1938) */ -+/* Minimum secret password length (rfc2289) */ - #ifndef SKEY_MIN_PW_LEN --#define SKEY_MIN_PW_LEN 10 -+#define SKEY_MIN_PW_LEN 10 - #endif - --/* Max secret password length (rfc1938 says 63 but allows more) */ -+/* Max secret password length (rfc2289 says 63 but allows more) */ - #ifndef SKEY_MAX_PW_LEN --#define SKEY_MAX_PW_LEN 255 -+#define SKEY_MAX_PW_LEN 255 - #endif - --/* Max length of an S/Key seed (rfc1938) */ -+/* Max length of an S/Key seed (rfc2289) */ - #ifndef SKEY_MAX_SEED_LEN --#define SKEY_MAX_SEED_LEN 16 -+#define SKEY_MAX_SEED_LEN 16 - #endif - - /* Max length of S/Key challenge (otp-???? 9999 seed) */ - #ifndef SKEY_MAX_CHALLENGE --#define SKEY_MAX_CHALLENGE (11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN) -+#define SKEY_MAX_CHALLENGE (11 + SKEY_MAX_HASHNAME_LEN + SKEY_MAX_SEED_LEN) - #endif - - /* Max length of hash algorithm name (md4/md5/sha1/rmd160) */ --#define SKEY_MAX_HASHNAME_LEN 6 -+#define SKEY_MAX_HASHNAME_LEN 6 - - /* Size of a binary key (not NULL-terminated) */ --#define SKEY_BINKEY_SIZE 8 -+#define SKEY_BINKEY_SIZE 8 - - /* Location of random file for bogus challenges */ --#define _SKEY_RAND_FILE_PATH_ "/var/db/host.random" -+#define _SKEY_RAND_FILE_PATH_ "/var/db/host.random" - - /* Prototypes */ --void f(char *x); --int keycrunch(char *result, char *seed, char *passwd); --char *btoe(char *engout, char *c); --char *put8(char *out, char *s); --int etob(char *out, char *e); --void rip(char *buf); --int skeychallenge(struct skey * mp, char *name, char *ss); --int skeylookup (struct skey * mp, char *name); --int skeyverify (struct skey * mp, char *response); --int skeyzero (struct skey * mp, char *response); --void sevenbit (char *s); --void backspace (char *s); --char *skipspace (char *s); --char *readpass (char *buf, int n); --char *readskey (char *buf, int n); --int skey_authenticate (char *username); --int skey_passcheck (char *username, char *passwd); --char *skey_keyinfo (char *username); --int skey_haskey (char *username); --int getskeyprompt (struct skey *mp, char *name, char *prompt); --int atob8 (char *out, char *in); --int btoa8 (char *out, char *in); --int htoi (int c); --const char *skey_get_algorithm (void); --char *skey_set_algorithm (char *new); --int skeygetnext (struct skey *mp); -+void f __P ((char *)); -+int keycrunch __P ((char *, const char *, const char *)); -+char *btoe __P ((char *, const char *)); -+char *put8 __P ((char *, const char *)); -+int etob __P ((char *, const char *)); -+void rip __P ((char *)); -+int skeychallenge __P ((struct skey *, const char *, char *, size_t)); -+int skeylookup __P ((struct skey *, const char *)); -+int skeyverify __P ((struct skey *, char *)); -+void sevenbit __P ((char *)); -+void backspace __P ((char *)); -+const char *skipspace __P ((const char *)); -+char *readpass __P ((char *, int)); -+char *readskey __P ((char *, int)); -+int skey_authenticate __P ((const char *)); -+int skey_passcheck __P ((const char *, char *)); -+const char *skey_keyinfo __P ((const char *)); -+int skey_haskey __P ((const char *)); -+int getskeyprompt __P ((struct skey *, char *, char *)); -+int atob8 __P((char *, const char *)); -+int btoa8 __P((char *, const char *)); -+int htoi __P((int)); -+const char *skey_get_algorithm __P((void)); -+const char *skey_set_algorithm __P((const char *)); -+int skeygetnext __P((struct skey *)); -+int skeyzero __P((struct skey *, char *)); -diff -ruN skey-1.1.5.orig/skeyinfo.1 skey-1.1.5/skeyinfo.1 ---- skey-1.1.5.orig/skeyinfo.1 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyinfo.1 2003-11-06 17:46:45.000000000 +0000 -@@ -1,30 +1,19 @@ --.\" $OpenBSD: skeyinfo.1,v 1.3 2000/03/11 21:40:02 aaron Exp $ -+.\" $NetBSD: skeyinfo.1,v 1.5 2001/04/09 12:34:44 wiz Exp $ - .\" --.Dd 22 July 1997 -+.Dd June 9, 1994 - .Dt SKEYINFO 1 - .Os - .Sh NAME - .Nm skeyinfo - .Nd obtain the next S/Key challenge for a user - .Sh SYNOPSIS --.Nm skeyinfo --.Op Fl v -+.Nm - .Op Ar user - .Sh DESCRIPTION - .Nm - prints out the next S/Key challenge for the specified user or for the - current user if no user is specified. --.Pp --The options are as follows: --.Bl -tag -width Ds --.It Fl v --Print the hash algorithm as well. --.El --.Sh EXAMPLES --% skey -n `skeyinfo` | lpr --.Pp --This would print out a list of S/Key passwords for use over --an untrusted network (perhaps for use at a conference). - .Sh SEE ALSO - .Xr skey 1 , -+.Xr skeyaudit 1 , - .Xr skeyinit 1 -diff -ruN skey-1.1.5.orig/skeyinfo.c skey-1.1.5/skeyinfo.c ---- skey-1.1.5.orig/skeyinfo.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyinfo.c 2003-11-06 17:46:45.000000000 +0000 -@@ -1,9 +1,12 @@ --/* $OpenBSD: skeyinfo.c,v 1.6 2001/02/05 16:58:11 millert Exp $ */ -+/* $NetBSD: skeyinfo.c,v 1.4 2003/07/23 04:11:50 itojun Exp $ */ - --/* -- * Copyright (c) 1997 Todd C. Miller -+/*- -+ * Copyright (c) 1997 The NetBSD Foundation, Inc. - * All rights reserved. - * -+ * This code is derived from software contributed to The NetBSD Foundation -+ * by Andrew Brown. -+ * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: -@@ -12,104 +15,79 @@ - * 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. -- * 3. The name of the author may not be used to endorse or promote products -- * derived from this software without specific prior written permission. -+ * 3. All advertising materials mentioning features or use of this software -+ * must display the following acknowledgement: -+ * This product includes software developed by the NetBSD -+ * Foundation, Inc. and its contributors. -+ * 4. Neither the name of The NetBSD Foundation nor the names of its -+ * contributors may be used to endorse or promote products derived -+ * from this software without specific prior written permission. - * -- * THIS SOFTWARE IS PROVIDED ``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. -+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS -+ * ``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 FOUNDATION OR CONTRIBUTORS -+ * 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 */ --#include - #include --#include -+#include -+#include - #include - #include --#include "config.h" --#include "skey.h" --/*#include "defines.h"*/ - --char *__progname; -+#include "skey.h" - --void usage(void); -+int main __P((int, char *[])); - --int --main(argc, argv) -- int argc; -- char **argv; -+int main(int argc, char **argv) - { -- struct passwd *pw; -- struct skey key; -- char *name = NULL; -- int error, ch, verbose = 0; -- -- __progname=argv[0]; -- -- if (geteuid() != 0) -- errx(1, "must be setuid root"); -- -- while ((ch = getopt(argc, argv, "v")) != -1) -- switch(ch) { -- case 'v': -- verbose = 1; -- break; -- default: -- usage(); -+ struct skey skey; -+ char name[100], prompt[1024]; -+ int uid; -+ struct passwd *pw = NULL; -+ -+ argc--; -+ argv++; -+ -+ if (geteuid()) -+ errx(1, "must be root to read %s", SKEYKEYS); -+ -+ uid = getuid(); -+ -+ if (!argc) -+ pw = getpwuid(uid); -+ else if (!uid) -+ pw = getpwnam(argv[0]); -+ else -+ errx(1, "permission denied to look other users skeys"); -+ -+ if (!pw) { -+ if (argc) -+ errx(1, "%s: no such user", argv[0]); -+ else -+ errx(1, "who are you?"); - } -- argc -= optind; -- argv += optind; - -- if (argc == 1) -- name = argv[0]; -- else if (argc > 1) -- usage(); -- -- if (name && getuid() != 0) -- errx(1, "only root may specify an alternate user"); -- -- if (name) { -- if (strlen(name) > PASS_MAX) -- errx(1, "username too long (%d chars max)", PASS_MAX); -- if ((pw = getpwnam(name)) == NULL) -- errx(1, "no passwd entry for %s", name); -- } else { -- if ((pw = getpwuid(getuid())) == NULL) -- errx(1, "no passwd entry for uid %u", getuid()); -- } -+ strncpy(name, pw->pw_name, sizeof(name)); - -- if ((name = strdup(pw->pw_name)) == NULL) -- err(1, "cannot allocate memory"); -- sevenbit(name); -- -- error = skeylookup(&key, name); -- switch (error) { -- case 0: /* Success! */ -- if (verbose) -- (void)printf("otp-%s ", skey_get_algorithm()); -- (void)printf("%d %s\n", key.n - 1, key.seed); -- break; -- case -1: /* File error */ -- warnx("cannot open %s", SKEYKEYS); -- break; -- case 1: /* Unknown user */ -- warnx("%s is not listed in %s", name, SKEYKEYS); -+ if (getskeyprompt(&skey, name, prompt) == -1) { -+ printf("%s %s no s/key\n", -+ argc ? name : "You", -+ argc ? "has" : "have"); - } -- (void)fclose(key.keyfile); -- -- exit(error); --} -- --void --usage() --{ -- (void)fprintf(stderr, "Usage: %s [-v] [user]\n", __progname); -- exit(1); -+ else { -+ if (argc) -+ printf("%s's ", pw->pw_name); -+ else -+ printf("Your "); -+ printf("next %s", prompt); -+ } -+ return 0; - } -diff -ruN skey-1.1.5.orig/skeyinit.1 skey-1.1.5/skeyinit.1 ---- skey-1.1.5.orig/skeyinit.1 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyinit.1 2003-11-06 17:46:45.000000000 +0000 -@@ -1,22 +1,18 @@ --.\" $OpenBSD: skeyinit.1,v 1.19 2000/11/09 17:52:39 aaron Exp $ --.\" $NetBSD: skeyinit.1,v 1.4 1995/07/07 22:24:09 jtc Exp $ -+.\" $NetBSD: skeyinit.1,v 1.11 2001/04/09 12:35:00 wiz Exp $ - .\" @(#)skeyinit.1 1.1 10/28/93 - .\" --.Dd February 24, 1998 -+.Dd June 7, 2000 - .Dt SKEYINIT 1 - .Os - .Sh NAME - .Nm skeyinit - .Nd change password or add user to S/Key authentication system - .Sh SYNOPSIS --.Nm skeyinit -+.Nm -+.Op Fl n Ar count - .Op Fl s -+.Op Fl t Ar hash - .Op Fl z --.Op Fl n Ar count --.Oo --.Fl md4 | Fl md5 | Fl sha1 | --.Fl rmd160 --.Oc - .Op Ar user - .Sh DESCRIPTION - .Nm -@@ -30,52 +26,17 @@ - .Nm - requires you to type a secret password, so it should be used - only on a secure terminal. --For example, on the console of a --workstation or over an encrypted network session. --If you are using --.Nm --while logged in over an untrusted network, follow the instructions --given below with the --.Fl s --option. --.Pp --Before initializing an S/Key entry, the user must authenticate --using either a standard password or an S/Key challenge. --When used over an untrusted network, a password of --.Sq s/key --should be used. --The user will then be presented with the standard --S/Key challenge and allowed to proceed if it is correct. --.Pp --The options are as follows: -+.Sh OPTIONS - .Bl -tag -width Ds --.It Fl x --Displays pass phrase in hexadecimal instead of ASCII. - .It Fl s --Set secure mode where the user is expected to have used a secure --machine to generate the first one-time password. --Without the --.Fl s --option the system will assume you are directly connected over secure --communications and prompt you for your secret password. --The --.Fl s --option also allows one to set the seed and count for complete --control of the parameters. --You can use --.Ic skeyinit -s --in combination with the --.Nm skey --command to set the seed and count if you do not like the defaults. --To do this run --.Nm --in one window and put in your count and seed, then run --.Nm skey --in another window to generate the correct 6 English words for that --count and seed. --You can then "cut-and-paste" or type the words into the --.Nm --window. -+allows the user to set the seed and count for complete control -+of the parameters. -+To do this run skeyinit in one window and put in your count and seed; -+then run -+.Xr skey 1 -+in another window to generate the correct 6 english words -+for that count and seed. -+You can then "cut-and-paste" or type the words into the skeyinit window. - .It Fl z - Allows the user to zero their S/Key entry. - .It Fl n Ar count -@@ -84,30 +45,22 @@ - sequence at - .Ar count - (default is 100). --.It Fl md4 --Selects MD4 as the hash algorithm. --.It Fl md5 --Selects MD5 as the hash algorithm. --.It Fl sha1 --Selects SHA (NIST Secure Hash Algorithm Revision 1) as the hash algorithm. --.It Fl rmd160 --Selects RMD-160 (160 bit Ripe Message Digest) as the hash algorithm. -+.It Fl t Ar hash -+Selects the hash algorithm to use. -+Available choices are md4 (the default), md5 or sha1. - .It Ar user - The username to be changed/added. --By default the current user is operated on. -+By default the current user is operated on, only root may -+change other user's entries. - .El --.Sh ERRORS --.Bl -tag -width "skey disabled" --.It skey disabled --.Pa /etc/skeykeys --does not exist. --It must be created by the superuser in order to use --.Nm skeyinit . - .Sh FILES --.Bl -tag -width /etc/skeykeys --.It Pa /etc/skeykeys --database of information for S/Key system -+.Bl -tag -width /etc/skey/skeykeys -+.It Pa /etc/skey/skeykeys -+data base of information for S/Key system. -+.El - .Sh SEE ALSO --.Xr skey 1 -+.Xr skey 1 , -+.Xr skeyaudit 1 , -+.Xr skeyinfo 1 - .Sh AUTHORS - Phil Karn, Neil M. Haller, John S. Walden, Scott Chasin -diff -ruN skey-1.1.5.orig/skeyinit.c skey-1.1.5/skeyinit.c ---- skey-1.1.5.orig/skeyinit.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyinit.c 2003-11-06 17:46:45.000000000 +0000 -@@ -43,6 +43,18 @@ - - #include - -+#ifdef HAVE_SHADOW_H -+#include -+#endif -+ -+#ifdef HAVE_CRACK_H -+#include -+#ifndef CRACKLIB_DICTPATH -+#define CRACKLIB_DICTPATH "/usr/lib/cracklib_dict" -+#endif -+#endif -+ -+#include "err.h" - #include "skey.h" - - -@@ -50,62 +62,80 @@ - #define SKEY_NAMELEN 4 - #endif - --void usage __P((char *)); -+int main __P((int, char **)); - --int --main(argc, argv) -- int argc; -- char *argv[]; -+int main(int argc, char **argv) - { -- int rval, nn, i, l, n=0, defaultsetup=1, zerokey=0, hexmode=0; -+ int rval, nn, i, l, n=0, defaultsetup=1, c, zerokey=0, hexmode=0; - time_t now; -- struct utmp old_ut; -- --#ifndef UT_LINESIZE --# define UT_LINESIZE (sizeof(old_ut.ut_line)) --# define UT_NAMESIZE (sizeof(old_ut.ut_name)) --# define UT_HOSTSIZE (sizeof(old_ut.ut_host)) --# endif -- -- char hostname[MAXHOSTNAMELEN]; -+ char hostname[MAXHOSTNAMELEN+1]; -+ char seed[SKEY_MAX_PW_LEN+2], key[SKEY_BINKEY_SIZE]; -+ char defaultseed[SKEY_MAX_SEED_LEN+1]; - char passwd[SKEY_MAX_PW_LEN+2], passwd2[SKEY_MAX_PW_LEN+2]; -- char seed[SKEY_MAX_SEED_LEN+2], defaultseed[SKEY_MAX_SEED_LEN+1]; -- char tbuf[27], buf[80], key[SKEY_BINKEY_SIZE]; -- char lastc, me[UT_NAMESIZE+1], *salt, *p, *pw, *ht=NULL; -- struct skey skey; -- struct passwd *pp; -- struct tm *tm; -+ char tbuf[27], buf[80]; -+ char lastc, me[LOGIN_NAME_MAX+1], *p, *pw, *ht=NULL, *msg; -+ const char *salt; -+ struct skey skey; -+ struct passwd *pp; -+ struct tm *tm; -+#ifdef HAVE_SHADOW_H -+ struct spwd *sp; -+#endif -+ -+ i = open(_PATH_DEVNULL, O_RDWR); -+ while (i >= 0 && i < 2) -+ i = dup(i); -+ if (i > 2) -+ close(i); - - if (geteuid() != 0) - errx(1, "must be setuid root."); - - if (gethostname(hostname, sizeof(hostname)) < 0) -- err(1, "gethostname"); -- for (i = 0, p = defaultseed; hostname[i] && i < SKEY_NAMELEN; i++) { -- if (isalpha(hostname[i])) { -- if (isupper(hostname[i])) -- hostname[i] = tolower(hostname[i]); -- *p++ = hostname[i]; -- } else if (isdigit(hostname[i])) -- *p++ = hostname[i]; -+ err(1, "gethostname() error"); -+ -+ for (i = 0, l = 0; l < sizeof(defaultseed); i++) { -+ if (hostname[i] == '\0') { -+ defaultseed[l] = hostname[i]; -+ break; -+ } -+ if (isalnum(hostname[i])) -+ defaultseed[l++] = hostname[i]; - } -- *p = '\0'; -- (void)time(&now); -- (void)sprintf(tbuf, "%05ld", (long) (now % 100000)); -- (void)strncat(defaultseed, tbuf, sizeof(defaultseed) - 5); -+ -+ defaultseed[SKEY_NAMELEN] = '\0'; -+ time(&now); -+ snprintf(tbuf, sizeof(tbuf), "%05ld", (long) (now % 100000)); -+ strncat(defaultseed, tbuf, sizeof(defaultseed)); - - if ((pp = getpwuid(getuid())) == NULL) -- err(1, "no user with uid %d", getuid()); -- (void)strcpy(me, pp->pw_name); -+ err(1, "no user with uid %ld", (u_long)getuid()); -+ strncpy(me, pp->pw_name, sizeof(me)); - - if ((pp = getpwnam(me)) == NULL) -- err(1, "Who are you?"); -+ err(1, "getpwnam() returned NULL, Who are you?"); -+#ifdef HAVE_SHADOW_H -+ /* hacking in shadow support... */ -+ else if (strcmp(pp->pw_passwd, "x") == 0) { -+ if ((sp = getspnam(me)) == NULL) -+ err(1, "Unable to verify Password"); -+ pp->pw_passwd = sp->sp_pwdp; -+ } -+#endif - salt = pp->pw_passwd; - -- for (i = 1; i < argc && argv[i][0] == '-' && strcmp(argv[i], "--");) { -- if (argv[i][2] == '\0') { -- /* Single character switch */ -- switch (argv[i][1]) { -+ while((c = getopt(argc, argv, "n:t:sxz")) != -1) { -+ switch(c) { -+ case 'n': -+ n = atoi(optarg); -+ if (n < 1 || n > SKEY_MAX_SEQ) -+ errx(1, "count must be between 1 and %d", SKEY_MAX_SEQ); -+ break; -+ case 't': -+ if(skey_set_algorithm(optarg) == NULL) -+ errx(1, "Unknown hash algorithm %s", optarg); -+ ht = optarg; -+ break; - case 's': - defaultsetup = 0; - break; -@@ -115,105 +145,51 @@ - case 'z': - zerokey = 1; - break; -- case 'n': -- if (argv[++i] == NULL || argv[i][0] == '\0') -- usage(argv[0]); -- if ((n = atoi(argv[i])) < 1 || n >= SKEY_MAX_SEQ) -- errx(1, "count must be > 0 and < %d", -- SKEY_MAX_SEQ); -- break; - default: -- usage(argv[0]); -- } -- } else { -- /* Multi character switches are hash types */ -- if ((ht = skey_set_algorithm(&argv[i][1])) == NULL) { -- warnx("Unknown hash algorithm %s", &argv[i][1]); -- usage(argv[0]); -+ errx(1, "Usage: %s [-n count] [-t md4|md5|sha1] [-s] [-x] [-z] [user]", argv[0]); - } - } -- i++; -- } -+ -+ if (argc > optind) { -+ pp = getpwnam(argv[optind]); -+ if (pp == NULL) -+ errx(1, "User %s unknown", argv[optind]); -+ } - -- /* check for optional user string */ -- if (argc - i > 1) { -- usage(argv[0]); -- } else if (argv[i]) { -- if ((pp = getpwnam(argv[i])) == NULL) { -- if (getuid() == 0) { -- static struct passwd _pp; -- -- _pp.pw_name = argv[i]; -- pp = &_pp; -- warnx("Warning, user unknown: %s", argv[i]); -- } else { -- errx(1, "User unknown: %s", argv[i]); -- } -- } else if (strcmp(pp->pw_name, me) != 0) { -+ if (strcmp(pp->pw_name, me) != 0) { - if (getuid() != 0) { - /* Only root can change other's passwds */ - errx(1, "Permission denied."); - } - } -- } - - if (getuid() != 0) { -- pw = getpass("Password (or `s/key'):"); -- if (strcasecmp(pw, "s/key") == 0) { -- if (skey_haskey(me)) -- exit(1); -- if (skey_authenticate(me)) -- errx(1, "Password incorrect."); -- } else { -- p = crypt(pw, salt); -- if (strcmp(p, pp->pw_passwd)) -- errx(1, "Password incorrect."); -- } -+ pw = getpass("Password: "); -+ p = crypt(pw, salt); -+ if (strcmp(p, pp->pw_passwd)) -+ errx(1, "Password incorrect."); - } - - rval = skeylookup(&skey, pp->pw_name); - switch (rval) { - case -1: -- if (errno == ENOENT) -- errx(1, "S/Key disabled"); -- else -- err(1, "cannot open database"); -- break; -+ err(1, "cannot open database"); - case 0: -- /* comment out user if asked to */ - if (zerokey) -- exit(skeyzero(&skey, pp->pw_name)); -+ exit (skeyzero(&skey, pp->pw_name)); -+ printf("[Updating %s]\n", pp->pw_name); -+ printf("Old key: [%s] %s\n", skey_get_algorithm(), skey.seed); - -- (void)printf("[Updating %s]\n", pp->pw_name); -- (void)printf("Old key: [%s] %s\n", skey_get_algorithm(), -- skey.seed); -- -- /* -- * Sanity check old seed. -- */ - l = strlen(skey.seed); -- for (p = skey.seed; *p; p++) { -- if (isalpha(*p)) { -- if (isupper(*p)) -- *p = tolower(*p); -- } else if (!isdigit(*p)) { -- memmove(p, p + 1, l - (p - skey.seed)); -- l--; -- } -- } -- -- /* -- * Let's be nice if they have an skey.seed that -- * ends in 0-8 just add one -- */ - if (l > 0) { - lastc = skey.seed[l - 1]; -- if (isdigit(lastc) && lastc != '9') { -- (void)strcpy(defaultseed, skey.seed); -+ if (isdigit((unsigned char)lastc) && lastc != '9') { -+ strncpy(defaultseed, skey.seed, sizeof(defaultseed)); - defaultseed[l - 1] = lastc + 1; - } -- if (isdigit(lastc) && lastc == '9' && l < 16) { -- (void)strcpy(defaultseed, skey.seed); -+ if (isdigit((unsigned char)lastc) && lastc == '9' && -+ l < 16) { -+ strncpy(defaultseed, skey.seed, sizeof(defaultseed)); - defaultseed[l - 1] = '0'; - defaultseed[l] = '0'; - defaultseed[l + 1] = '\0'; -@@ -223,7 +199,7 @@ - case 1: - if (zerokey) - errx(1, "You have no entry to zero."); -- (void)printf("[Adding %s]\n", pp->pw_name); -+ printf("[Adding %s]\n", pp->pw_name); - break; - } - if (n == 0) -@@ -237,37 +213,33 @@ - } - - if (!defaultsetup) { -- (void)printf("You need the 6 english words generated from the \"skey\" command.\n"); -+ printf("You need the 6 english words generated from the \"skey\" command.\n"); - for (i = 0; ; i++) { - if (i >= 2) - exit(1); - -- (void)printf("Enter sequence count from 1 to %d: ", -- SKEY_MAX_SEQ); -- (void)fgets(buf, sizeof(buf), stdin); -+ printf("Enter sequence count from 1 to %d: ", SKEY_MAX_SEQ); -+ fgets(buf, sizeof(buf), stdin); - n = atoi(buf); - if (n > 0 && n < SKEY_MAX_SEQ) - break; /* Valid range */ -- (void)printf("Error: Count must be > 0 and < %d\n", -- SKEY_MAX_SEQ); -+ printf("\nError: Count must be between 0 and %d\n", SKEY_MAX_SEQ); - } - - for (i = 0;; i++) { - if (i >= 2) - exit(1); - -- (void)printf("Enter new key [default %s]: ", -- defaultseed); -- (void)fgets(seed, sizeof(seed), stdin); -+ printf("Enter new seed [default %s]: ", defaultseed); -+ fflush(stdout); -+ fgets(seed, sizeof(seed), stdin); - rip(seed); -- if (seed[0] == '\0') -- (void)strcpy(seed, defaultseed); - for (p = seed; *p; p++) { - if (isalpha(*p)) { - if (isupper(*p)) - *p = tolower(*p); - } else if (!isdigit(*p)) { -- (void)puts("Error: seed may only contain alpha numeric characters"); -+ puts("Error: seed may only contain alpha numeric characters"); - break; - } - } -@@ -275,66 +247,75 @@ - break; /* Valid seed */ - } - if (strlen(seed) > SKEY_MAX_SEED_LEN) { -- (void)printf("Notice: Seed truncated to %d characters.\n", -- SKEY_MAX_SEED_LEN); -+ printf("Notice: Seed truncated to %d characters.\n", SKEY_MAX_SEED_LEN); - seed[SKEY_MAX_SEED_LEN] = '\0'; - } -+ if (seed[0] == '\0') -+ strncpy(seed, defaultseed, sizeof(seed)); - - for (i = 0;; i++) { - if (i >= 2) - exit(1); - -- (void)printf("otp-%s %d %s\nS/Key access password: ", -+ printf("otp-%s %d %s\ns/key access password: ", - skey_get_algorithm(), n, seed); -- (void)fgets(buf, sizeof(buf), stdin); -+ fgets(buf, sizeof(buf), stdin); - rip(buf); - backspace(buf); - - if (buf[0] == '?') { -- (void)puts("Enter 6 English words from secure S/Key calculation."); -+ puts("Enter 6 English words from secure s/key calculation."); - continue; - } else if (buf[0] == '\0') - exit(1); - if (etob(key, buf) == 1 || atob8(key, buf) == 0) - break; /* Valid format */ -- (void)puts("Invalid format - try again with 6 English words."); -+ puts("Invalid format - try again with 6 English words."); - } - } else { - /* Get user's secret password */ -- fputs("Reminder - Only use this method if you are directly connected\n or have an encrypted channel. If you are using telnet\n or rlogin, exit with no password and use skeyinit -s.\n", stderr); -+ puts("Reminder - Only use this method if you are directly connected\n" -+ "or have an encrypted channel. If you are using telnet\n" -+ "or rlogin, exit with no password and use skeyinit -s.\n"); - - for (i = 0;; i++) { -- if (i > 2) -+ if (i >= 3) - exit(1); - -- (void)fputs("Enter secret password: ", stderr); -+ printf("Enter secret password: "); - readpass(passwd, sizeof(passwd)); - if (passwd[0] == '\0') - exit(1); - - if (strlen(passwd) < SKEY_MIN_PW_LEN) { -- (void)fprintf(stderr, -- "Your password must be at least %d characters long.\n", SKEY_MIN_PW_LEN); -+ fprintf(stderr, -+ "Your password must be at least %d characters long.\n", SKEY_MIN_PW_LEN); - continue; - } else if (strcmp(passwd, pp->pw_name) == 0) { -- (void)fputs("Your password may not be the same as your user name.\n", stderr); -- continue; -- } else if (strspn(passwd, "abcdefghijklmnopqrstuvwxyz") == strlen(passwd)) { -- (void)fputs("Your password must contain more than just lower case letters.\nWhitespace, numbers, and puctuation are suggested.\n", stderr); -+ fputs("Your password may not be the same as your user name.\n", stderr); - continue; -+ } -+#ifdef HAVE_CRACK_H -+ if (msg = (char *) FascistCheck(passwd, CRACKLIB_DICTPATH)) { -+ warnx("Warning: %s", msg); -+ /* if (!i) */ /* reject passwords cracklib doesnt like the first time its entered... */ -+ /* continue; */ - } -+#endif - -- (void)fputs("Again secret password: ", stderr); -+ printf("Again secret password: "); - readpass(passwd2, sizeof(passwd)); -+ if (passwd2[0] == '\0') -+ exit(1); - - if (strcmp(passwd, passwd2) == 0) - break; - -- (void)fputs("Passwords do not match.\n", stderr); -+ puts("Passwords do not match."); - } - - /* Crunch seed and password into starting key */ -- (void)strcpy(seed, defaultseed); -+ strncpy(seed, defaultseed, sizeof(seed)); - if (keycrunch(key, seed, passwd) != 0) - err(2, "key crunch failed"); - -@@ -342,16 +323,16 @@ - while (nn-- != 0) - f(key); - } -- (void)time(&now); -+ time(&now); - tm = localtime(&now); -- (void)strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); -+ strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); - - if ((skey.val = (char *)malloc(16 + 1)) == NULL) - err(1, "Can't allocate memory"); - -- /* Zero out old key if necesary (entry would change size) */ -+ /* Zero out old key if necessary (entry would change size) */ - if (zerokey) { -- (void)skeyzero(&skey, pp->pw_name); -+ skeyzero(&skey, pp->pw_name); - /* Re-open keys file and seek to the end */ - if (skeylookup(&skey, pp->pw_name) == -1) - err(1, "cannot open database"); -@@ -376,26 +357,17 @@ - - /* Don't save algorithm type for md4 (keep record length same) */ - if (strcmp(skey_get_algorithm(), "md4") == 0) -- (void)fprintf(skey.keyfile, "%s %04d %-16s %s %-21s\n", -+ fprintf(skey.keyfile, "%s %04d %-16s %s %-21s\n", - pp->pw_name, n, seed, skey.val, tbuf); - else -- (void)fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", -+ fprintf(skey.keyfile, "%s %s %04d %-16s %s %-21s\n", - pp->pw_name, skey_get_algorithm(), n, seed, skey.val, tbuf); - -- (void)fclose(skey.keyfile); -+ fclose(skey.keyfile); - -- (void)printf("\nID %s skey is otp-%s %d %s\n", pp->pw_name, -+ printf("\nID %s skey is otp-%s %d %s\n", pp->pw_name, - skey_get_algorithm(), n, seed); -- (void)printf("Next login password: %s\n\n", -+ printf("Next login password: %s\n\n", - hexmode ? put8(buf, key) : btoe(buf, key)); -- exit(0); --} -- --void --usage(s) -- char *s; --{ -- (void)fprintf(stderr, -- "Usage: %s [-s] [-x] [-z] [-n count] [-md4|-md5|-sha1|-rmd160] [user]\n", s); -- exit(1); -+ return 0; - } -diff -ruN skey-1.1.5.orig/skeylogin.c skey-1.1.5/skeylogin.c ---- skey-1.1.5.orig/skeylogin.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeylogin.c 2003-11-06 17:46:45.000000000 +0000 -@@ -20,6 +20,7 @@ - #include - #endif - #include -+#include - #include - #include - #include -@@ -32,6 +33,7 @@ - #include - #include - #include -+#include - - #include "config.h" - -@@ -45,73 +47,85 @@ - #include "sha1.h" - #endif - -+#include "err.h" - #include "skey.h" - --char *skipspace __P((char *)); --int skeylookup __P((struct skey *, char *)); -+#define OTP_FMT "otp-%.*s %d %.*s" - - /* Issue a skey challenge for user 'name'. If successful, -- * fill in the caller's skey structure and return(0). If unsuccessful -- * (e.g., if name is unknown) return(-1). -+ * fill in the caller's skey structure and return 0. If unsuccessful -+ * (e.g., if name is unknown) return -1. - * - * The file read/write pointer is left at the start of the - * record. - */ --int --getskeyprompt(mp, name, prompt) -- struct skey *mp; -- char *name; -- char *prompt; -+int getskeyprompt(struct skey *mp, char *name, char *prompt) - { - int rval; - - sevenbit(name); - rval = skeylookup(mp, name); -- (void)strcpy(prompt, "otp-md0 55 latour1\n"); -+ -+ *prompt = '\0'; - switch (rval) { -- case -1: /* File error */ -- return(-1); -- case 0: /* Lookup succeeded, return challenge */ -- (void)sprintf(prompt, "otp-%.*s %d %.*s\n", -- SKEY_MAX_HASHNAME_LEN, skey_get_algorithm(), -+ case -1: /* File error */ -+ return -1; -+ case 0: /* Lookup succeeded, return challenge */ -+ sprintf(prompt, OTP_FMT "\n", -+ SKEY_MAX_HASHNAME_LEN, skey_get_algorithm(), - mp->n - 1, SKEY_MAX_SEED_LEN, mp->seed); -- return(0); -- case 1: /* User not found */ -- (void)fclose(mp->keyfile); -- return(-1); -+ return 0; -+ case 1: /* User not found */ -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; - } -- return(-1); /* Can't happen */ -+ return -1; /* Can't happen, never ever ever. ever. I'm serious. */ - } - - /* Return a skey challenge string for user 'name'. If successful, -- * fill in the caller's skey structure and return(0). If unsuccessful -- * (e.g., if name is unknown) return(-1). -+ * fill in the caller's skey structure and return 0. If unsuccessful -+ * (e.g., if name is unknown) return -1. - * - * The file read/write pointer is left at the start of the - * record. - */ --int --skeychallenge(mp, name, ss) -- struct skey *mp; -- char *name; -- char *ss; -+int skeychallenge(struct skey *mp, const char *name, char *ss, size_t sslen) - { - int rval; - - rval = skeylookup(mp,name); -+ *ss = '\0'; - switch(rval){ -- case -1: /* File error */ -- return(-1); -- case 0: /* Lookup succeeded, issue challenge */ -- (void)sprintf(ss, "otp-%.*s %d %.*s", SKEY_MAX_HASHNAME_LEN, -+ case -1: /* File error */ -+ return -1; -+ case 0: /* Lookup succeeded, issue challenge */ -+ snprintf(ss, sslen, OTP_FMT, SKEY_MAX_HASHNAME_LEN, - skey_get_algorithm(), mp->n - 1, - SKEY_MAX_SEED_LEN, mp->seed); -- return(0); -- case 1: /* User not found */ -- (void)fclose(mp->keyfile); -- return(-1); -+ return 0; -+ case 1: /* User not found */ -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; -+ } -+ return -1; /* Can't happen - or your money back */ -+} -+ -+static FILE *openskey(void) -+{ -+ struct stat statbuf; -+ FILE *keyfile = NULL; -+ -+ if (stat(SKEYKEYS, &statbuf) == 0 && -+ (keyfile = fopen(SKEYKEYS, "r+"))) { -+ if ((statbuf.st_mode & 0007777) != 0600) -+ fchmod(fileno(keyfile), 0600); -+ } else { -+ keyfile = NULL; - } -- return(-1); /* Can't happen */ -+ -+ return keyfile; - } - - /* Find an entry in the One-time Password database. -@@ -120,27 +134,19 @@ - * 0: entry found, file R/W pointer positioned at beginning of record - * 1: entry not found, file R/W pointer positioned at EOF - */ --int --skeylookup(mp, name) -- struct skey *mp; -- char *name; -+int skeylookup(struct skey *mp, const char *name) - { - int found = 0; - long recstart = 0; -- char *cp, *ht = NULL; -- struct stat statbuf; -- -- /* Open SKEYKEYS if it exists, else return an error */ -- if (stat(SKEYKEYS, &statbuf) == 0 && -- (mp->keyfile = fopen(SKEYKEYS, "r+")) != NULL) { -- if ((statbuf.st_mode & 0007777) != 0600) -- fchmod(fileno(mp->keyfile), 0600); -- } else { -- return(-1); -- } -+ const char *ht = NULL; -+ char *last; - -+ if(!(mp->keyfile = openskey())) -+ return -1; -+ - /* Look up user name in database */ - while (!feof(mp->keyfile)) { -+ char *cp; - recstart = ftell(mp->keyfile); - mp->recstart = recstart; - if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) -@@ -148,22 +154,22 @@ - rip(mp->buf); - if (mp->buf[0] == '#') - continue; /* Comment */ -- if ((mp->logname = strtok(mp->buf, " \t")) == NULL) -+ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) - continue; -- if ((cp = strtok(NULL, " \t")) == NULL) -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) - continue; - /* Save hash type if specified, else use md4 */ -- if (isalpha(*cp)) { -+ if (isalpha((u_char) *cp)) { - ht = cp; -- if ((cp = strtok(NULL, " \t")) == NULL) -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) - continue; - } else { - ht = "md4"; - } - mp->n = atoi(cp); -- if ((mp->seed = strtok(NULL, " \t")) == NULL) -+ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) - continue; -- if ((mp->val = strtok(NULL, " \t")) == NULL) -+ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) - continue; - if (strcmp(mp->logname, name) == 0) { - found = 1; -@@ -171,7 +177,7 @@ - } - } - if (found) { -- (void)fseek(mp->keyfile, recstart, SEEK_SET); -+ fseek(mp->keyfile, recstart, SEEK_SET); - /* Set hash type */ - if (ht && skey_set_algorithm(ht) == NULL) { - warnx("Unknown hash algorithm %s, using %s", ht, -@@ -189,27 +195,21 @@ - * 0: next entry found and stored in mp - * 1: no more entries, file R/W pointer positioned at EOF - */ --int --skeygetnext(mp) -- struct skey *mp; -+int skeygetnext(struct skey *mp) - { - long recstart = 0; -- char *cp; -- struct stat statbuf; -+ char *last; - - /* Open SKEYKEYS if it exists, else return an error */ - if (mp->keyfile == NULL) { -- if (stat(SKEYKEYS, &statbuf) == 0 && -- (mp->keyfile = fopen(SKEYKEYS, "r+")) != NULL) { -- if ((statbuf.st_mode & 0007777) != 0600) -- fchmod(fileno(mp->keyfile), 0600); -- } else { -- return(-1); -- } -+ if(!(mp->keyfile = openskey())) -+ return -1; - } - - /* Look up next user in database */ - while (!feof(mp->keyfile)) { -+ char *cp; -+ - recstart = ftell(mp->keyfile); - mp->recstart = recstart; - if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) -@@ -217,19 +217,19 @@ - rip(mp->buf); - if (mp->buf[0] == '#') - continue; /* Comment */ -- if ((mp->logname = strtok(mp->buf, " \t")) == NULL) -+ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) - continue; -- if ((cp = strtok(NULL, " \t")) == NULL) -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) - continue; - /* Save hash type if specified, else use md4 */ -- if (isalpha(*cp)) { -- if ((cp = strtok(NULL, " \t")) == NULL) -+ if (isalpha((u_char) *cp)) { -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) - continue; - } - mp->n = atoi(cp); -- if ((mp->seed = strtok(NULL, " \t")) == NULL) -+ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) - continue; -- if ((mp->val = strtok(NULL, " \t")) == NULL) -+ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) - continue; - /* Got a real entry */ - break; -@@ -246,10 +246,7 @@ - * - * The database file is always closed by this call. - */ --int --skeyverify(mp, response) -- struct skey *mp; -- char *response; -+int skeyverify(struct skey *mp, char *response) - { - char key[SKEY_BINKEY_SIZE]; - char fkey[SKEY_BINKEY_SIZE]; -@@ -257,29 +254,31 @@ - time_t now; - struct tm *tm; - char tbuf[27]; -- char *cp; -+ char *cp, *last; - int i, rval; - - time(&now); - tm = localtime(&now); -- (void)strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); -+ strftime(tbuf, sizeof(tbuf), " %b %d,%Y %T", tm); - - if (response == NULL) { -- (void)fclose(mp->keyfile); -- return(-1); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; - } - rip(response); - - /* Convert response to binary */ - if (etob(key, response) != 1 && atob8(key, response) != 0) { - /* Neither english words or ascii hex */ -- (void)fclose(mp->keyfile); -- return(-1); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; - } - - /* Compute fkey = f(key) */ -- (void)memcpy(fkey, key, sizeof(key)); -- (void)fflush(stdout); -+ memcpy(fkey, key, sizeof(key)); -+ fflush(stdout); - f(fkey); - - /* -@@ -298,26 +297,33 @@ - } - - /* Reread the file record NOW */ -- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); -+ fseek(mp->keyfile, mp->recstart, SEEK_SET); - if (fgets(mp->buf, sizeof(mp->buf), mp->keyfile) != mp->buf) { -- (void)fclose(mp->keyfile); -- return(-1); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; - } - rip(mp->buf); -- mp->logname = strtok(mp->buf, " \t"); -- cp = strtok(NULL, " \t") ; -- if (isalpha(*cp)) -- cp = strtok(NULL, " \t") ; -- mp->seed = strtok(NULL, " \t"); -- mp->val = strtok(NULL, " \t"); -+ if ((mp->logname = strtok_r(mp->buf, " \t", &last)) == NULL) -+ goto verify_failure; -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) -+ goto verify_failure; -+ if (isalpha((u_char) *cp)) -+ if ((cp = strtok_r(NULL, " \t", &last)) == NULL) -+ goto verify_failure; -+ if ((mp->seed = strtok_r(NULL, " \t", &last)) == NULL) -+ goto verify_failure; -+ if ((mp->val = strtok_r(NULL, " \t", &last)) == NULL) -+ goto verify_failure; - /* And convert file value to hex for comparison */ - atob8(filekey, mp->val); - - /* Do actual comparison */ - if (memcmp(filekey, fkey, SKEY_BINKEY_SIZE) != 0){ - /* Wrong response */ -- (void)fclose(mp->keyfile); -- return(1); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return 1; - } - - /* -@@ -327,19 +333,24 @@ - */ - btoa8(mp->val,key); - mp->n--; -- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); -+ fseek(mp->keyfile, mp->recstart, SEEK_SET); - /* Don't save algorithm type for md4 (keep record length same) */ - if (strcmp(skey_get_algorithm(), "md4") == 0) -- (void)fprintf(mp->keyfile, "%s %04d %-16s %s %-21s\n", -+ fprintf(mp->keyfile, "%s %04d %-16s %s %-21s\n", - mp->logname, mp->n, mp->seed, mp->val, tbuf); - else -- (void)fprintf(mp->keyfile, "%s %s %04d %-16s %s %-21s\n", -+ fprintf(mp->keyfile, "%s %s %04d %-16s %s %-21s\n", - mp->logname, skey_get_algorithm(), mp->n, - mp->seed, mp->val, tbuf); - -- (void)fclose(mp->keyfile); -- -- return(0); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return 0; -+ -+ verify_failure: -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; -+ return -1; - } - - /* -@@ -348,13 +359,18 @@ - * Returns: 1 user doesnt exist, -1 fle error, 0 user exists. - * - */ --int --skey_haskey(username) -- char *username; -+int skey_haskey(const char *username) - { - struct skey skey; -+ int i; -+ -+ i = skeylookup(&skey, username); - -- return(skeylookup(&skey, username)); -+ if (skey.keyfile != NULL) { -+ fclose(skey.keyfile); -+ skey.keyfile = NULL; -+ } -+ return i; - } - - /* -@@ -364,19 +380,21 @@ - * seed for the passed user. - * - */ --char * --skey_keyinfo(username) -- char *username; -+const char *skey_keyinfo(const char *username) - { - int i; - static char str[SKEY_MAX_CHALLENGE]; - struct skey skey; - -- i = skeychallenge(&skey, username, str); -+ i = skeychallenge(&skey, username, str, sizeof str); - if (i == -1) -- return(0); -+ return 0; - -- return(str); -+ if (skey.keyfile != NULL) { -+ fclose(skey.keyfile); -+ skey.keyfile = NULL; -+ } -+ return str; - } - - /* -@@ -388,40 +406,38 @@ - * Returns: 0 success, -1 failure - * - */ --int --skey_passcheck(username, passwd) -- char *username, *passwd; -+int skey_passcheck(const char *username, char *passwd) - { - int i; - struct skey skey; - - i = skeylookup(&skey, username); - if (i == -1 || i == 1) -- return(-1); -+ return -1; - - if (skeyverify(&skey, passwd) == 0) -- return(skey.n); -+ return skey.n; - -- return(-1); -+ return -1; - } - -+#if DO_FAKE_CHALLENGE - #define ROUND(x) (((x)[0] << 24) + (((x)[1]) << 16) + (((x)[2]) << 8) + \ - ((x)[3])) - - /* - * hash_collapse() - */ --static u_int32_t --hash_collapse(s) -- u_char *s; -+static u_int32_t hash_collapse(u_char *s) - { -- int len, target; -+ int len, target, slen; - u_int32_t i; -- -- if ((strlen(s) % sizeof(u_int32_t)) == 0) -- target = strlen(s); /* Multiple of 4 */ -+ -+ slen = strlen((char *)s); -+ if ((slen % sizeof(u_int32_t)) == 0) -+ target = slen; /* Multiple of 4 */ - else -- target = strlen(s) - (strlen(s) % sizeof(u_int32_t)); -+ target = slen - slen % sizeof(u_int32_t); - - for (i = 0, len = 0; len < target; len += 4) - i ^= ROUND(s + len); -@@ -429,6 +445,8 @@ - return i; - } - -+#endif -+ - /* - * skey_authenticate() - * -@@ -438,22 +456,22 @@ - * Returns: 0 success, -1 failure - * - */ --int --skey_authenticate(username) -- char *username; -+int skey_authenticate(const char *username) - { - int i; -+ char pbuf[SKEY_MAX_PW_LEN+1], skeyprompt[SKEY_MAX_CHALLENGE+1]; -+ struct skey skey; -+#if DO_FAKE_CHALLENGE - u_int ptr; - u_char hseed[SKEY_MAX_SEED_LEN], flg = 1, *up; -- char pbuf[SKEY_MAX_PW_LEN+1], skeyprompt[SKEY_MAX_CHALLENGE+1]; -- char *secret; - size_t secretlen; -- struct skey skey; - SHA1_CTX ctx; -- -+#endif -+ - /* Attempt an S/Key challenge */ -- i = skeychallenge(&skey, username, skeyprompt); -+ i = skeychallenge(&skey, username, skeyprompt, sizeof skeyprompt); - -+#if DO_FAKE_CHALLENGE - /* Cons up a fake prompt if no entry in keys file */ - if (i != 0) { - char *p, *u; -@@ -465,11 +483,11 @@ - if (gethostname(pbuf, sizeof(pbuf)) == -1) - *(p = pbuf) = '.'; - else -- for (p = pbuf; *p && isalnum(*p); p++) -- if (isalpha(*p) && isupper(*p)) -- *p = tolower(*p); -+ for (p = pbuf; *p && isalnum((u_char)*p); p++) -+ if (isalpha((u_char)*p) && isupper((u_char)*p)) -+ *p = tolower((u_char)*p); - if (*p && pbuf - p < 4) -- (void)strncpy(p, "asjd", 4 - (pbuf - p)); -+ strncpy(p, "asjd", 4 - (pbuf - p)); - pbuf[4] = '\0'; - - /* Hash the username if possible */ -@@ -490,6 +508,7 @@ - SEEK_SET) != -1 && read(fd, hseed, - SKEY_MAX_SEED_LEN) == SKEY_MAX_SEED_LEN) { - close(fd); -+ fd = -1; - secret = hseed; - secretlen = SKEY_MAX_SEED_LEN; - flg = 0; -@@ -499,6 +518,8 @@ - secretlen = strlen(secret); - flg = 0; - } -+ if (fd != -1) -+ close(fd); - } - - /* Put that in your pipe and smoke it */ -@@ -531,7 +552,7 @@ - memset(up, 0, 20); /* SHA1 specific */ - free(up); - -- (void)sprintf(skeyprompt, -+ sprintf(skeyprompt, - "otp-%.*s %d %.*s", - SKEY_MAX_HASHNAME_LEN, - skey_get_algorithm(), -@@ -554,29 +575,30 @@ - } while (--i != 0); - pbuf[12] = '\0'; - -- (void)sprintf(skeyprompt, "otp-%.*s %d %.*s", -+ sprintf(skeyprompt, "otp-%.*s %d %.*s", - SKEY_MAX_HASHNAME_LEN, - skey_get_algorithm(), - 99, SKEY_MAX_SEED_LEN, pbuf); - } - } -+#endif - -- (void)fprintf(stderr, "%s\n", skeyprompt); -- (void)fflush(stderr); -+ fprintf(stderr, "[%s]\n", skeyprompt); -+ fflush(stderr); - -- (void)fputs("Response: ", stderr); -+ fputs("Response: ", stderr); - readskey(pbuf, sizeof(pbuf)); - - /* Is it a valid response? */ - if (i == 0 && skeyverify(&skey, pbuf) == 0) { - if (skey.n < 5) { -- (void)fprintf(stderr, -+ fprintf(stderr, - "\nWarning! Key initialization needed soon. (%d logins left)\n", - skey.n); - } -- return(0); -+ return 0; - } -- return(-1); -+ return -1; - } - - /* Comment out user's entry in the s/key database -@@ -587,22 +609,21 @@ - * - * The database file is always closed by this call. - */ --int --skeyzero(mp, response) -- struct skey *mp; -- char *response; -+int skeyzero(struct skey *mp, char *response) - { - /* - * Seek to the right place and write comment character - * which effectively zero's out the entry. - */ -- (void)fseek(mp->keyfile, mp->recstart, SEEK_SET); -+ fseek(mp->keyfile, mp->recstart, SEEK_SET); - if (fputc('#', mp->keyfile) == EOF) { - fclose(mp->keyfile); -- return(-1); -+ mp->keyfile = NULL; -+ return -1; - } - -- (void)fclose(mp->keyfile); -+ fclose(mp->keyfile); -+ mp->keyfile = NULL; - -- return(0); -+ return 0; - } -diff -ruN skey-1.1.5.orig/skeyprune.8 skey-1.1.5/skeyprune.8 ---- skey-1.1.5.orig/skeyprune.8 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeyprune.8 2003-11-06 17:46:45.000000000 +0000 -@@ -13,7 +13,7 @@ - .Sh DESCRIPTION - .Nm skeyprune - searches through the file --.Dq Pa /etc/skeykeys -+.Dq Pa /etc/skey/skeykeys - and prunes out users who have zeroed their entries via - .Xr skeyinit 1 - as well as entries that have not been modified in -@@ -22,8 +22,8 @@ - .Ar days - is not specified only commented out entries are pruned. - .Sh FILES --.Bl -tag -width /etc/skeykeys -compact --.It Pa /etc/skeykeys -+.Bl -tag -width /etc/skey/skeykeys -compact -+.It Pa /etc/skey/skeykeys - S/Key key information database - .El - .Sh SEE ALSO -@@ -33,7 +33,7 @@ - Since - .Nm skeyprune - rewrites --.Dq Pa /etc/skeykeys , -+.Dq Pa /etc/skey/skeykeys , - there is a window where S/Key changes could get lost. - It is therefore suggested that - .Nm skeyprune -diff -ruN skey-1.1.5.orig/skeysubr.c skey-1.1.5/skeysubr.c ---- skey-1.1.5.orig/skeysubr.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/skeysubr.c 2003-11-06 17:46:45.000000000 +0000 -@@ -40,30 +40,26 @@ - #else - #include "sha1.h" - #endif --#ifdef HAVE_RMD160_H --#include --#else --#include "rmd160.h" --#endif - - #include "skey.h" - - /* Default hash function to use (index into skey_hash_types array) */ - #ifndef SKEY_HASH_DEFAULT --#define SKEY_HASH_DEFAULT 1 -+#define SKEY_HASH_DEFAULT 0 /*MD4*/ - #endif - --static void f_md4 __P((char *x)); --static void f_md5 __P((char *x)); --static void f_sha1 __P((char *x)); --static void f_rmd160 __P((char *x)); --static int keycrunch_md4 __P((char *result, char *seed, char *passwd)); --static int keycrunch_md5 __P((char *result, char *seed, char *passwd)); --static int keycrunch_sha1 __P((char *result, char *seed, char *passwd)); --static int keycrunch_rmd160 __P((char *result, char *seed, char *passwd)); --static void lowcase __P((char *s)); --static void skey_echo __P((int action)); --static void trapped __P((int sig)); -+static void f_md4 __P((char *)); -+static void f_md5 __P((char *)); -+static void f_sha1 __P((char *)); -+/* static void f_rmd160 __P((char *x)); */ -+static int keycrunch_md4 __P((char *, const char *, const char *)); -+static int keycrunch_md5 __P((char *, const char *, const char *)); -+static int keycrunch_sha1 __P((char *, const char *, const char *)); -+/* static int keycrunch_rmd160 __P((char *result, char *seed, char *passwd)); */ -+static void lowcase __P((char *)); -+static void skey_echo __P((int)); -+static void trapped __P((int)); -+static char *mkseedpassword(const char *, const char *, size_t *); - - /* Current hash type (index into skey_hash_types array) */ - static int skey_hash_type = SKEY_HASH_DEFAULT; -@@ -72,17 +68,16 @@ - * Hash types we support. - * Each has an associated keycrunch() and f() function. - */ --#define SKEY_ALGORITH_LAST 4 - struct skey_algorithm_table { - const char *name; -- int (*keycrunch) (char *, char *, char *); -- void (*f) (char *); -+ int (*keycrunch) __P((char *, const char *, const char *)); -+ void (*f) __P((char *)); - }; - static struct skey_algorithm_table skey_algorithm_table[] = { - { "md4", keycrunch_md4, f_md4 }, - { "md5", keycrunch_md5, f_md5 }, - { "sha1", keycrunch_sha1, f_sha1 }, -- { "rmd160", keycrunch_rmd160, f_rmd160 } -+ { NULL } - }; - - -@@ -91,242 +86,172 @@ - * concatenate the seed and the password, run through MD4/5 and - * collapse to 64 bits. This is defined as the user's starting key. - */ --int --keycrunch(result, seed, passwd) -- char *result; /* SKEY_BINKEY_SIZE result */ -- char *seed; /* Seed, any length */ -- char *passwd; /* Password, any length */ -+int keycrunch(char *result, const char *seed, const char *passwd) - { - return(skey_algorithm_table[skey_hash_type].keycrunch(result, seed, passwd)); - } - --static int --keycrunch_md4(result, seed, passwd) -- char *result; /* SKEY_BINKEY_SIZE result */ -- char *seed; /* Seed, any length */ -- char *passwd; /* Password, any length */ -+static char *mkseedpassword(const char *seed, const char *passwd, size_t *buflen) - { - char *buf; -- MD4_CTX md; -- u_int32_t results[4]; -- unsigned int buflen; - -- buflen = strlen(seed) + strlen(passwd); -- if ((buf = (char *)malloc(buflen+1)) == NULL) -- return(-1); -- (void)strcpy(buf, seed); -+ *buflen = strlen(seed) + strlen(passwd); -+ if ((buf = (char *) malloc(*buflen + 1)) == NULL) -+ return NULL; -+ strcpy(buf, seed); - lowcase(buf); -- (void)strcat(buf, passwd); -+ strcat(buf, passwd); -+ sevenbit(buf); -+ -+ return buf; -+} - -+static int keycrunch_md4(char *result, const char *seed, const char *passwd) -+{ -+ char *buf; -+ MD4_CTX md; -+ size_t buflen; -+ u_int32_t results[4]; -+ -+ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) -+ return -1; -+ - /* Crunch the key through MD4 */ -- sevenbit(buf); - MD4Init(&md); - MD4Update(&md, (unsigned char *)buf, buflen); -- MD4Final((unsigned char *)results, &md); -- (void)free(buf); -+ MD4Final((unsigned char *) (void *) results, &md); -+ free(buf); - - /* Fold result from 128 to 64 bits */ - results[0] ^= results[2]; - results[1] ^= results[3]; - -- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); -+ memcpy(result, results, SKEY_BINKEY_SIZE); - -- return(0); -+ return 0; - } - --static int --keycrunch_md5(result, seed, passwd) -- char *result; /* SKEY_BINKEY_SIZE result */ -- char *seed; /* Seed, any length */ -- char *passwd; /* Password, any length */ -+static int keycrunch_md5(char *result, const char *seed, const char *passwd) - { - char *buf; - MD5_CTX md; - u_int32_t results[4]; -- unsigned int buflen; -+ size_t buflen; - -- buflen = strlen(seed) + strlen(passwd); -- if ((buf = (char *)malloc(buflen+1)) == NULL) -- return(-1); -- (void)strcpy(buf, seed); -- lowcase(buf); -- (void)strcat(buf, passwd); -+ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) -+ return -1; - - /* Crunch the key through MD5 */ -- sevenbit(buf); - MD5Init(&md); - MD5Update(&md, (unsigned char *)buf, buflen); -- MD5Final((unsigned char *)results, &md); -- (void)free(buf); -+ MD5Final((unsigned char *) (void *)results, &md); -+ free(buf); - - /* Fold result from 128 to 64 bits */ - results[0] ^= results[2]; - results[1] ^= results[3]; - -- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); -+ memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); - - return(0); - } - --static int --keycrunch_sha1(result, seed, passwd) -- char *result; /* SKEY_BINKEY_SIZE result */ -- char *seed; /* Seed, any length */ -- char *passwd; /* Password, any length */ -+static int keycrunch_sha1(char *result, const char *seed, const char *passwd) - { - char *buf; - SHA1_CTX sha; -- u_int32_t results[5]; -- unsigned int buflen; -- -- buflen = strlen(seed) + strlen(passwd); -- if ((buf = (char *)malloc(buflen+1)) == NULL) -- return(-1); -- (void)strcpy(buf, seed); -- lowcase(buf); -- (void)strcat(buf, passwd); -+ size_t buflen; -+ int i, j; - -+ if ((buf = mkseedpassword(seed, passwd, &buflen)) == NULL) -+ return -1; -+ - /* Crunch the key through SHA1 */ -- sevenbit(buf); - SHA1Init(&sha); - SHA1Update(&sha, (unsigned char *)buf, buflen); -- SHA1Final((unsigned char *)results, &sha); -- (void)free(buf); -+ SHA1Final(NULL, &sha); -+ free(buf); - - /* Fold 160 to 64 bits */ -- results[0] ^= results[2]; -- results[1] ^= results[3]; -- results[0] ^= results[4]; -- -- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); -- -- return(0); --} -- --static int --keycrunch_rmd160(result, seed, passwd) -- char *result; /* SKEY_BINKEY_SIZE result */ -- char *seed; /* Seed, any length */ -- char *passwd; /* Password, any length */ --{ -- char *buf; -- RMD160_CTX rmd; -- u_int32_t results[5]; -- unsigned int buflen; -- -- buflen = strlen(seed) + strlen(passwd); -- if ((buf = (char *)malloc(buflen+1)) == NULL) -- return(-1); -- (void)strcpy(buf, seed); -- lowcase(buf); -- (void)strcat(buf, passwd); -- -- /* Crunch the key through RMD-160 */ -- sevenbit(buf); -- RMD160Init(&rmd); -- RMD160Update(&rmd, (unsigned char *)buf, buflen); -- RMD160Final((unsigned char *)results, &rmd); -- (void)free(buf); -- -- /* Fold 160 to 64 bits */ -- results[0] ^= results[2]; -- results[1] ^= results[3]; -- results[0] ^= results[4]; -- -- (void)memcpy((void *)result, (void *)results, SKEY_BINKEY_SIZE); -+ sha.state[0] ^= sha.state[2]; -+ sha.state[1] ^= sha.state[3]; -+ sha.state[0] ^= sha.state[4]; -+ -+ for (i=j=0; j<8; i++, j+=4) { -+ result[j] = (unsigned char)(sha.state[i] & 0xff); -+ result[j+1] = (unsigned char)((sha.state[i] >> 8) & 0xff); -+ result[j+2] = (unsigned char)((sha.state[i] >> 16) & 0xff); -+ result[j+3] = (unsigned char)((sha.state[i] >> 24) & 0xff); -+ } - -- return(0); -+ return 0; - } - - /* - * The one-way function f(). - * Takes SKEY_BINKEY_SIZE bytes and returns SKEY_BINKEY_SIZE bytes in place. - */ --void --f(x) -- char *x; -+void f(char *x) - { - skey_algorithm_table[skey_hash_type].f(x); - } - --static void --f_md4(x) -- char *x; -+static void f_md4(char *x) - { - MD4_CTX md; - u_int32_t results[4]; - - MD4Init(&md); - MD4Update(&md, (unsigned char *)x, SKEY_BINKEY_SIZE); -- MD4Final((unsigned char *)results, &md); -+ MD4Final((unsigned char *) (void *) results, &md); - - /* Fold 128 to 64 bits */ - results[0] ^= results[2]; - results[1] ^= results[3]; - -- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); -+ memcpy(x, results, SKEY_BINKEY_SIZE); - } - --static void --f_md5(x) -- char *x; -+static void f_md5(char *x) - { - MD5_CTX md; - u_int32_t results[4]; - - MD5Init(&md); - MD5Update(&md, (unsigned char *)x, SKEY_BINKEY_SIZE); -- MD5Final((unsigned char *)results, &md); -+ MD5Final((unsigned char *) (void *) results, &md); - - /* Fold 128 to 64 bits */ - results[0] ^= results[2]; - results[1] ^= results[3]; - -- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); -+ memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); - } - --static void --f_sha1(x) -- char *x; -+static void f_sha1(char *x) - { - SHA1_CTX sha; -- u_int32_t results[5]; -+ int i, j; - - SHA1Init(&sha); - SHA1Update(&sha, (unsigned char *)x, SKEY_BINKEY_SIZE); -- SHA1Final((unsigned char *)results, &sha); -+ SHA1Final(NULL, &sha); - - /* Fold 160 to 64 bits */ -- results[0] ^= results[2]; -- results[1] ^= results[3]; -- results[0] ^= results[4]; -- -- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); --} -- --static void --f_rmd160(x) -- char *x; --{ -- RMD160_CTX rmd; -- u_int32_t results[5]; -- -- RMD160Init(&rmd); -- RMD160Update(&rmd, (unsigned char *)x, SKEY_BINKEY_SIZE); -- RMD160Final((unsigned char *)results, &rmd); -- -- /* Fold 160 to 64 bits */ -- results[0] ^= results[2]; -- results[1] ^= results[3]; -- results[0] ^= results[4]; -- -- (void)memcpy((void *)x, (void *)results, SKEY_BINKEY_SIZE); -+ sha.state[0] ^= sha.state[2]; -+ sha.state[1] ^= sha.state[3]; -+ sha.state[0] ^= sha.state[4]; -+ -+ for (i=j=0; j<8; i++, j+=4) { -+ x[j] = (unsigned char)(sha.state[i] & 0xff); -+ x[j+1] = (unsigned char)((sha.state[i] >> 8) & 0xff); -+ x[j+2] = (unsigned char)((sha.state[i] >> 16) & 0xff); -+ x[j+3] = (unsigned char)((sha.state[i] >> 24) & 0xff); -+ } - } - - /* Strip trailing cr/lf from a line of text */ --void --rip(buf) -- char *buf; -+void rip(char *buf) - { - buf += strcspn(buf, "\r\n"); - -@@ -335,12 +260,9 @@ - } - - /* Read in secret password (turns off echo) */ --char * --readpass(buf, n) -- char *buf; -- int n; -+char *readpass(char *buf, int n) - { -- void (*old_handler) (); -+ void *old_handler; - - /* Turn off echoing */ - skey_echo(0); -@@ -348,131 +270,114 @@ - /* Catch SIGINT and save old signal handler */ - old_handler = signal(SIGINT, trapped); - -- (void)fgets(buf, n, stdin); -+ fgets(buf, n, stdin); - rip(buf); - -- (void)putc('\n', stderr); -- (void)fflush(stderr); -+ putc('\n', stderr); -+ fflush(stderr); - - /* Restore signal handler and turn echo back on */ - if (old_handler != SIG_ERR) -- (void)signal(SIGINT, old_handler); -+ signal(SIGINT, old_handler); - skey_echo(1); - - sevenbit(buf); - -- return(buf); -+ return buf; - } - - /* Read in an s/key OTP (does not turn off echo) */ --char * --readskey(buf, n) -- char *buf; -- int n; -+char *readskey(char *buf, int n) - { -- (void)fgets(buf, n, stdin); -+ fgets(buf, n, stdin); - rip(buf); - - sevenbit(buf); - -- return(buf); -+ return buf; - } - - /* Signal handler for trapping ^C */ --static void --trapped(sig) -- int sig; -+static void trapped(int sig) - { -- (void)fputs("^C\n", stderr); -- (void)fflush(stderr); -+ fputs("^C\n", stderr); -+ fflush(stderr); - -- /* Turn on echo if necesary */ -+ /* Turn on echo if necemassary */ - skey_echo(1); - -- exit(-1); -+ exit(1); - } - - /* - * Convert 8-byte hex-ascii string to binary array - * Returns 0 on success, -1 on error - */ --int --atob8(out, in) -- register char *out; -- register char *in; -+int atob8(char *out, const char *in) - { -- register int i; -- register int val; -+ int i; -+ int val; - - if (in == NULL || out == NULL) -- return(-1); -+ return -1; - - for (i=0; i < 8; i++) { - if ((in = skipspace(in)) == NULL) -- return(-1); -+ return -1; - if ((val = htoi(*in++)) == -1) -- return(-1); -+ return -1; - *out = val << 4; - - if ((in = skipspace(in)) == NULL) -- return(-1); -+ return -1; - if ((val = htoi(*in++)) == -1) -- return(-1); -+ return -1; - *out++ |= val; - } -- return(0); -+ return 0; - } - - /* Convert 8-byte binary array to hex-ascii string */ --int --btoa8(out, in) -- register char *out; -- register char *in; -+int btoa8(char *out, const char *in) - { -- register int i; -+ int i; - - if (in == NULL || out == NULL) -- return(-1); -+ return -1; - - for (i=0; i < 8; i++) { -- (void)sprintf(out, "%02x", *in++ & 0xff); -+ sprintf(out, "%02x", *in++ & 0xff); - out += 2; - } -- return(0); -+ return 0; - } - - /* Convert hex digit to binary integer */ --int --htoi(c) -- register int c; -+int htoi(int c) - { - if ('0' <= c && c <= '9') -- return(c - '0'); -+ return c - '0'; - if ('a' <= c && c <= 'f') -- return(10 + c - 'a'); -+ return 10 + c - 'a'; - if ('A' <= c && c <= 'F') -- return(10 + c - 'A'); -- return(-1); -+ return 10 + c - 'A'; -+ return -1; - } - - /* Skip leading spaces from the string */ --char * --skipspace(cp) -- register char *cp; -+const char *skipspace(const char *cp) - { - while (*cp == ' ' || *cp == '\t') - cp++; - - if (*cp == '\0') -- return(NULL); -+ return NULL; - else -- return(cp); -+ return cp; - } - - /* Remove backspaced over characters from the string */ --void --backspace(buf) -- char *buf; -+void backspace(char *buf) - { - char bs = 0x8; - char *cp = buf; -@@ -496,77 +401,68 @@ - } - - /* Make sure line is all seven bits */ --void --sevenbit(s) -- char *s; -+void sevenbit(char *s) - { - while (*s) - *s++ &= 0x7f; - } - - /* Set hash algorithm type */ --char * --skey_set_algorithm(new) -- char *new; -+const char *skey_set_algorithm(const char *new) - { - int i; - -- for (i = 0; i < SKEY_ALGORITH_LAST; i++) { -+ for (i = 0; skey_algorithm_table[i].name; i++) { - if (strcmp(new, skey_algorithm_table[i].name) == 0) { - skey_hash_type = i; -- return(new); -+ return new; - } - } - -- return(NULL); -+ return NULL; - } - - /* Get current hash type */ --const char * --skey_get_algorithm() -+const char *skey_get_algorithm() - { - return(skey_algorithm_table[skey_hash_type].name); - } - - /* Turn echo on/off */ --static void --skey_echo(action) -- int action; -+static void skey_echo(int action) - { - static struct termios term; - static int echo = 0; - - if (action == 0) { - /* Turn echo off */ -- (void) tcgetattr(fileno(stdin), &term); -+ tcgetattr(fileno(stdin), &term); - if ((echo = (term.c_lflag & ECHO))) { - term.c_lflag &= ~ECHO; - #ifdef TCSASOFT -- (void) tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); -+ tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); - #else -- (void) tcsetattr(fileno(stdin), TCSAFLUSH, &term); -+ tcsetattr(fileno(stdin), TCSAFLUSH, &term); - #endif - } - } else if (action && echo) { - /* Turn echo on */ - term.c_lflag |= ECHO; - #ifdef TCSASOFT -- (void) tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); -+ tcsetattr(fileno(stdin), TCSAFLUSH|TCSASOFT, &term); - #else -- (void) tcsetattr(fileno(stdin), TCSAFLUSH, &term); -+ tcsetattr(fileno(stdin), TCSAFLUSH, &term); - #endif - echo = 0; - } - } - - /* Convert string to lower case */ --static void --lowcase(s) -- char *s; -+static void lowcase(char *s) - { -- char *p; -+ u_char *p; - -- for (p = s; *p; p++) -+ for (p = (u_char *) s; *p; p++) - if (isupper(*p)) - *p = tolower(*p); - } -diff -ruN skey-1.1.5.orig/strlcpy.c skey-1.1.5/strlcpy.c ---- skey-1.1.5.orig/strlcpy.c 2001-05-10 17:10:49.000000000 +0100 -+++ skey-1.1.5/strlcpy.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,72 +0,0 @@ --/* $OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $ */ -- --/* -- * Copyright (c) 1998 Todd C. Miller -- * 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. -- * 3. The name of the author may not be used to endorse or promote products -- * derived from this software without specific prior written permission. -- * -- * THIS SOFTWARE IS PROVIDED ``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 "config.h" --#ifndef HAVE_STRLCPY -- --#if defined(LIBC_SCCS) && !defined(lint) --static char *rcsid = "$OpenBSD: strlcpy.c,v 1.4 1999/05/01 18:56:41 millert Exp $"; --#endif /* LIBC_SCCS and not lint */ -- --#include --#include -- --/* -- * Copy src to string dst of size siz. At most siz-1 characters -- * will be copied. Always NUL terminates (unless siz == 0). -- * Returns strlen(src); if retval >= siz, truncation occurred. -- */ --size_t strlcpy(dst, src, siz) -- char *dst; -- const char *src; -- size_t siz; --{ -- register char *d = dst; -- register const char *s = src; -- register size_t n = siz; -- -- /* Copy as many bytes as will fit */ -- if (n != 0 && --n != 0) { -- do { -- if ((*d++ = *s++) == 0) -- break; -- } while (--n != 0); -- } -- -- /* Not enough room in dst, add NUL and traverse rest of src */ -- if (n == 0) { -- if (siz != 0) -- *d = '\0'; /* NUL-terminate dst */ -- while (*s++) -- ; -- } -- -- return(s - src - 1); /* count does not include NUL */ --} -- --#endif diff --git a/util/crypt/skey/files/skey-1.1.5-otp.diff b/util/crypt/skey/files/skey-1.1.5-otp.diff deleted file mode 100644 index 33c9b3dbac..0000000000 --- a/util/crypt/skey/files/skey-1.1.5-otp.diff +++ /dev/null @@ -1,59 +0,0 @@ -diff -Nur skey-1.1.5.orig/skey.c skey-1.1.5/skey.c ---- skey-1.1.5.orig/skey.c 2004-11-12 23:09:02.382529123 +0100 -+++ skey-1.1.5/skey.c 2004-11-12 23:23:09.864378849 +0100 -@@ -46,6 +46,17 @@ - char passwd[SKEY_MAX_PW_LEN+1], key[SKEY_BINKEY_SIZE]; - char buf[33], *seed, *slash, *t; - -+ /* If we were called as otp-METHOD, set algorithm based on that */ -+ if ((slash = strrchr(argv[0], '/'))) -+ slash++; -+ else -+ slash = argv[0]; -+ if (strncmp(slash, "otp-", 4) == 0) { -+ slash += 4; -+ if (skey_set_algorithm(slash) == NULL) -+ errx(1, "Unknown hash algorithm %s", slash); -+ } -+ - while ((i = getopt(argc, argv, "fn:p:t:x")) != -1) { - switch(i) { - case 'f': -diff -Nur skey-1.1.5.orig/skey.1 skey-1.1.5/skey.1 ---- skey-1.1.5.orig/skey.1 2004-11-12 23:09:02.375530148 +0100 -+++ skey-1.1.5/skey.1 2004-11-12 23:41:43.298268426 +0100 -@@ -6,7 +6,7 @@ - .Dt SKEY 1 - .Os - .Sh NAME --.Nm skey -+.Nm skey, otp-md4, otp-md5, otp-sha1 - .Nd respond to an OTP challenge - .Sh SYNOPSIS - .Nm -@@ -27,13 +27,24 @@ - .Pp - .Em S/Key - uses 64 bits of information, transformed by the --.Tn MD4 -+.Tn MD5 - algorithm into 6 English words. - The user supplies the words to authenticate himself to programs like - .Xr login 1 - or - .Xr ftpd 8 . - .Pp -+When -+.Nm skey -+is invoked as -+.Nm otp-method , -+.Nm skey -+will use -+.Ar method -+as the hash function where -+.Ar method -+is currently one of md4, md5, or sha1. -+.Pp - Example use of the - .Em S/Key - program diff --git a/util/crypt/skey/files/skey-login_name_max.diff b/util/crypt/skey/files/skey-login_name_max.diff deleted file mode 100644 index b9725aa0cc..0000000000 --- a/util/crypt/skey/files/skey-login_name_max.diff +++ /dev/null @@ -1,15 +0,0 @@ -diff -ruN skey-1.1.5.orig/skeyinit.c skey-1.1.5/skeyinit.c ---- skey-1.1.5.orig/skeyinit.c 2003-11-12 21:26:49.000000000 +0000 -+++ skey-1.1.5/skeyinit.c 2003-11-12 21:28:24.000000000 +0000 -@@ -62,6 +62,11 @@ - #define SKEY_NAMELEN 4 - #endif - -+/* #33315 */ -+#ifndef LOGIN_NAME_MAX -+#define LOGIN_NAME_MAX 256 -+#endif -+ - int main __P((int, char **)); - - int main(int argc, char **argv) diff --git a/util/crypt/skey/files/zeroed_entries.patch b/util/crypt/skey/files/zeroed_entries.patch deleted file mode 100644 index d26e5e978d..0000000000 --- a/util/crypt/skey/files/zeroed_entries.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nur skey-1.1.5-old//skeyprune.pl skey-1.1.5/skeyprune.pl ---- skey-1.1.5-old//skeyprune.pl 2010-09-12 15:07:36.778000090 +0300 -+++ skey-1.1.5/skeyprune.pl 2010-09-12 15:08:05.152998914 +0300 -@@ -37,7 +37,7 @@ - - while () { - # Ignore commented out entries -- if ( ! /^#[^\s#]+\s+(MD[0-9]+\s+)?[0-9]+\s+[A-z0-9_-]+\s+[a-f0-9]+\s+(Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+$/ ) { -+ if ( ! /^#[^\s#]+\s+(MD[0-9]+\s+)?[0-9]+\s+[A-z0-9_-]+\s+[a-f0-9]+\s+(Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+$/i ) { - /((Jan|Feb|Mar|Apr|May|Ju[nl]|Aug|Sep|Oct|Nov|Dec)\s+[0-9]+,\s*[0-9]+\s+[0-9]+:[0-9]+:[0-9]+)$/; - - # Prune out old entries if asked to diff --git a/util/crypt/skey/pspec.xml b/util/crypt/skey/pspec.xml deleted file mode 100644 index c0e99d6ad1..0000000000 --- a/util/crypt/skey/pspec.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - skey - http://www.openbsd.org/faq/faq8.html#SKey - - PisiLinux Community - admins@pisilinux.org - - BSD - app:console - library - Linux Port of OpenBSD Single-key Password System - skey is an S/Key implementation ported from OpenBSD. S/Key provides One Time Password functionality, and can be used to increase system security. - http://source.pisilinux.org/1.0/skey-1.1.5.tar.bz2 - - cracklib-devel - zlib-devel - perl - - - - skey-1.1.5-gentoo.diff - - - skey-login_name_max.diff - - - skey-1.1.5-fPIC.patch - skey-1.1.5-bind-now.patch - - - skey-1.1.5-otp.diff - - - skey-1.1.5-binary-search.patch - - - confdir.patch - - - zeroed_entries.patch - - - default_hash.patch - - - fix_library_info.patch - - - - - skey - - cracklib - zlib - - - /etc/skey - /lib - /usr/bin - /usr/lib - /usr/sbin - /usr/share/doc/skey - /usr/share/man - - - - - skey-devel - system.devel - Development files for skey - - skey - - - /usr/include - /usr/share/man/man3 - - - - - - 2014-05-21 - 1.1.5 - First release - Ertuğrul Erata - ertugrulerata@gmail.com - - - diff --git a/util/crypt/skey/translations.xml b/util/crypt/skey/translations.xml deleted file mode 100644 index ee7b155f9c..0000000000 --- a/util/crypt/skey/translations.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - skey - Linux için OpenBSD tek anahtarlı parola sistemi - skey, OpenBSD'den Linux'a aktarılan S/Key sistemidir. S/Key sistemi Tek Seferlik Parola özelilği ile sistem güvenliğini arttırmak için kullanılabilir. - - - - skey-devel - skey için geliştirme dosyaları - -