341 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			341 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff -ur orig/cracklib26_small/cracklib/fascist.c cracklib26_small/cracklib/fascist.c
 | 
						|
--- orig/cracklib26_small/cracklib/fascist.c	Mon Dec 15 02:56:55 1997
 | 
						|
+++ cracklib26_small/cracklib/fascist.c	Sat Apr  4 22:14:45 1998
 | 
						|
@@ -12,6 +12,7 @@
 | 
						|
 #include <ctype.h>
 | 
						|
 #include <sys/types.h>
 | 
						|
 #include <pwd.h>
 | 
						|
+#include <string.h>
 | 
						|
 
 | 
						|
 #define ISSKIP(x) (isspace(x) || ispunct(x))
 | 
						|
 
 | 
						|
@@ -460,28 +461,27 @@
 | 
						|
 }
 | 
						|
 
 | 
						|
 char *
 | 
						|
-FascistGecos(password, uid)
 | 
						|
+FascistGecosPw(password, pwd)
 | 
						|
     char *password;
 | 
						|
-    int uid;
 | 
						|
+    struct passwd *pwd;
 | 
						|
 {
 | 
						|
     int i;
 | 
						|
     int j;
 | 
						|
     int wc;
 | 
						|
     char *ptr;
 | 
						|
-    struct passwd *pwp;
 | 
						|
     char gbuffer[STRINGSIZE];
 | 
						|
     char tbuffer[STRINGSIZE];
 | 
						|
     char *uwords[STRINGSIZE];
 | 
						|
     char longbuffer[STRINGSIZE * 2];
 | 
						|
 
 | 
						|
-    if (!(pwp = getpwuid(uid)))
 | 
						|
+    if (!pwd)
 | 
						|
     {
 | 
						|
 	return ("you are not registered in the password file");
 | 
						|
     }
 | 
						|
 
 | 
						|
     /* lets get really paranoid and assume a dangerously long gecos entry */
 | 
						|
 
 | 
						|
-    strncpy(tbuffer, pwp->pw_name, STRINGSIZE);
 | 
						|
+    strncpy(tbuffer, pwd->pw_name, STRINGSIZE);
 | 
						|
     tbuffer[STRINGSIZE-1] = '\0';
 | 
						|
     if (GTry(tbuffer, password))
 | 
						|
     {
 | 
						|
@@ -490,12 +490,13 @@
 | 
						|
 
 | 
						|
     /* it never used to be that you got passwd strings > 1024 chars, but now... */
 | 
						|
 
 | 
						|
-    strncpy(tbuffer, pwp->pw_gecos, STRINGSIZE);
 | 
						|
+    strncpy(tbuffer, pwd->pw_gecos, STRINGSIZE);
 | 
						|
     tbuffer[STRINGSIZE-1] = '\0';
 | 
						|
     strcpy(gbuffer, Lowercase(tbuffer));
 | 
						|
 
 | 
						|
     wc = 0;
 | 
						|
     ptr = gbuffer;
 | 
						|
+    uwords[0] = (char *) 0;
 | 
						|
 
 | 
						|
     while (*ptr)
 | 
						|
     {
 | 
						|
@@ -530,6 +531,8 @@
 | 
						|
 	    *(ptr++) = '\0';
 | 
						|
 	}
 | 
						|
     }
 | 
						|
+    if (!uwords[0])
 | 
						|
+	return ((char *) 0);  /* empty gecos */
 | 
						|
 #ifdef DEBUG
 | 
						|
     for (i = 0; uwords[i]; i++)
 | 
						|
     {
 | 
						|
@@ -586,9 +589,10 @@
 | 
						|
 }
 | 
						|
 
 | 
						|
 char *
 | 
						|
-FascistLook(pwp, instring)
 | 
						|
+FascistLookPw(pwp, instring, pwd)
 | 
						|
     PWDICT *pwp;
 | 
						|
     char *instring;
 | 
						|
+    struct passwd *pwd;
 | 
						|
 {
 | 
						|
     int i;
 | 
						|
     char *ptr;
 | 
						|
@@ -667,7 +671,7 @@
 | 
						|
 	return ("it looks like a National Insurance number.");
 | 
						|
     }
 | 
						|
 
 | 
						|
-    if (ptr = FascistGecos(password, getuid()))
 | 
						|
+    if (ptr = FascistGecosPw(password, pwd ? pwd : getpwuid(getuid())))
 | 
						|
     {
 | 
						|
 	return (ptr);
 | 
						|
     }
 | 
						|
@@ -715,9 +719,10 @@
 | 
						|
 }
 | 
						|
 
 | 
						|
 char *
 | 
						|
-FascistCheck(password, path)
 | 
						|
+FascistCheckPw(password, path, pwd)
 | 
						|
     char *password;
 | 
						|
     char *path;
 | 
						|
+    struct passwd *pwd;
 | 
						|
 {
 | 
						|
     static char lastpath[STRINGSIZE];
 | 
						|
     static PWDICT *pwp;
 | 
						|
@@ -750,5 +755,29 @@
 | 
						|
 	strncpy(lastpath, path, STRINGSIZE);
 | 
						|
     }
 | 
						|
 
 | 
						|
-    return (FascistLook(pwp, pwtrunced));
 | 
						|
+    return (FascistLookPw(pwp, pwtrunced, pwd));
 | 
						|
+}
 | 
						|
+
 | 
						|
+char *
 | 
						|
+FascistGecos(password, uid)
 | 
						|
+    char *password;
 | 
						|
+    int uid;
 | 
						|
+{
 | 
						|
+    return (FascistGecosPw(password, getpwuid(uid)));
 | 
						|
+}
 | 
						|
+
 | 
						|
+char *
 | 
						|
+FascistLook(pwp, instring)
 | 
						|
+    PWDICT *pwp;
 | 
						|
+    char *instring;
 | 
						|
+{
 | 
						|
+    return (FascistLookPw(pwp, instring, (char *) 0));
 | 
						|
+}
 | 
						|
+
 | 
						|
+char *
 | 
						|
+FascistCheck(password, path)
 | 
						|
+    char *password;
 | 
						|
+    char *path;
 | 
						|
+{
 | 
						|
+    return (FascistCheckPw(password, path, (char *) 0));
 | 
						|
 }
 | 
						|
diff -ur orig/cracklib26_small/cracklib/packer.h cracklib26_small/cracklib/packer.h
 | 
						|
--- orig/cracklib26_small/cracklib/packer.h	Mon Dec 15 00:09:30 1997
 | 
						|
+++ cracklib26_small/cracklib/packer.h	Sat Jan 10 22:13:46 1998
 | 
						|
@@ -34,6 +34,7 @@
 | 
						|
     FILE *dfp;
 | 
						|
     FILE *wfp;
 | 
						|
 
 | 
						|
+    int canfree;
 | 
						|
     int32 flags;
 | 
						|
 #define PFOR_WRITE	0x0001
 | 
						|
 #define PFOR_FLUSH	0x0002
 | 
						|
diff -ur orig/cracklib26_small/cracklib/packlib.c cracklib26_small/cracklib/packlib.c
 | 
						|
--- orig/cracklib26_small/cracklib/packlib.c	Fri Jul  9 22:22:58 1993
 | 
						|
+++ cracklib26_small/cracklib/packlib.c	Sat Jan 10 22:28:49 1998
 | 
						|
@@ -16,7 +16,7 @@
 | 
						|
     char *mode;
 | 
						|
 {
 | 
						|
     int32 i;
 | 
						|
-    static PWDICT pdesc;
 | 
						|
+    PWDICT *pdesc;
 | 
						|
     char iname[STRINGSIZE];
 | 
						|
     char dname[STRINGSIZE];
 | 
						|
     char wname[STRINGSIZE];
 | 
						|
@@ -25,92 +25,94 @@
 | 
						|
     FILE *ifp;
 | 
						|
     FILE *wfp;
 | 
						|
 
 | 
						|
-    if (pdesc.header.pih_magic == PIH_MAGIC)
 | 
						|
-    {
 | 
						|
-	fprintf(stderr, "%s: another dictionary already open\n", prefix);
 | 
						|
+    if ((pdesc = (PWDICT *) malloc(sizeof(PWDICT))) == 0)
 | 
						|
 	return ((PWDICT *) 0);
 | 
						|
-    }
 | 
						|
 
 | 
						|
-    memset(&pdesc, '\0', sizeof(pdesc));
 | 
						|
+    memset(pdesc, '\0', sizeof(*pdesc));
 | 
						|
 
 | 
						|
     sprintf(iname, "%s.pwi", prefix);
 | 
						|
     sprintf(dname, "%s.pwd", prefix);
 | 
						|
     sprintf(wname, "%s.hwm", prefix);
 | 
						|
 
 | 
						|
-    if (!(pdesc.dfp = fopen(dname, mode)))
 | 
						|
+    if (!(pdesc->dfp = fopen(dname, mode)))
 | 
						|
     {
 | 
						|
 	perror(dname);
 | 
						|
+	free(pdesc);
 | 
						|
 	return ((PWDICT *) 0);
 | 
						|
     }
 | 
						|
 
 | 
						|
-    if (!(pdesc.ifp = fopen(iname, mode)))
 | 
						|
+    if (!(pdesc->ifp = fopen(iname, mode)))
 | 
						|
     {
 | 
						|
-	fclose(pdesc.dfp);
 | 
						|
+	fclose(pdesc->dfp);
 | 
						|
 	perror(iname);
 | 
						|
+	free(pdesc);
 | 
						|
 	return ((PWDICT *) 0);
 | 
						|
     }
 | 
						|
 
 | 
						|
-    if (pdesc.wfp = fopen(wname, mode))
 | 
						|
+    if (pdesc->wfp = fopen(wname, mode))
 | 
						|
     {
 | 
						|
-	pdesc.flags |= PFOR_USEHWMS;
 | 
						|
+	pdesc->flags |= PFOR_USEHWMS;
 | 
						|
     }
 | 
						|
 
 | 
						|
-    ifp = pdesc.ifp;
 | 
						|
-    dfp = pdesc.dfp;
 | 
						|
-    wfp = pdesc.wfp;
 | 
						|
+    ifp = pdesc->ifp;
 | 
						|
+    dfp = pdesc->dfp;
 | 
						|
+    wfp = pdesc->wfp;
 | 
						|
 
 | 
						|
     if (mode[0] == 'w')
 | 
						|
     {
 | 
						|
-	pdesc.flags |= PFOR_WRITE;
 | 
						|
-	pdesc.header.pih_magic = PIH_MAGIC;
 | 
						|
-	pdesc.header.pih_blocklen = NUMWORDS;
 | 
						|
-	pdesc.header.pih_numwords = 0;
 | 
						|
+	pdesc->flags |= PFOR_WRITE;
 | 
						|
+	pdesc->header.pih_magic = PIH_MAGIC;
 | 
						|
+	pdesc->header.pih_blocklen = NUMWORDS;
 | 
						|
+	pdesc->header.pih_numwords = 0;
 | 
						|
 
 | 
						|
-	fwrite((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp);
 | 
						|
+	fwrite((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp);
 | 
						|
     } else
 | 
						|
     {
 | 
						|
-	pdesc.flags &= ~PFOR_WRITE;
 | 
						|
+	pdesc->flags &= ~PFOR_WRITE;
 | 
						|
 
 | 
						|
-	if (!fread((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp))
 | 
						|
+	if (!fread((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp))
 | 
						|
 	{
 | 
						|
 	    fprintf(stderr, "%s: error reading header\n", prefix);
 | 
						|
 
 | 
						|
-	    pdesc.header.pih_magic = 0;
 | 
						|
+	    pdesc->header.pih_magic = 0;
 | 
						|
 	    fclose(ifp);
 | 
						|
 	    fclose(dfp);
 | 
						|
+	    free(pdesc);
 | 
						|
 	    return ((PWDICT *) 0);
 | 
						|
 	}
 | 
						|
 
 | 
						|
-	if (pdesc.header.pih_magic != PIH_MAGIC)
 | 
						|
+	if (pdesc->header.pih_magic != PIH_MAGIC)
 | 
						|
 	{
 | 
						|
 	    fprintf(stderr, "%s: magic mismatch\n", prefix);
 | 
						|
 
 | 
						|
-	    pdesc.header.pih_magic = 0;
 | 
						|
+	    pdesc->header.pih_magic = 0;
 | 
						|
 	    fclose(ifp);
 | 
						|
 	    fclose(dfp);
 | 
						|
+	    free(pdesc);
 | 
						|
 	    return ((PWDICT *) 0);
 | 
						|
 	}
 | 
						|
 
 | 
						|
-	if (pdesc.header.pih_blocklen != NUMWORDS)
 | 
						|
+	if (pdesc->header.pih_blocklen != NUMWORDS)
 | 
						|
 	{
 | 
						|
 	    fprintf(stderr, "%s: size mismatch\n", prefix);
 | 
						|
 
 | 
						|
-	    pdesc.header.pih_magic = 0;
 | 
						|
+	    pdesc->header.pih_magic = 0;
 | 
						|
 	    fclose(ifp);
 | 
						|
 	    fclose(dfp);
 | 
						|
+	    free(pdesc);
 | 
						|
 	    return ((PWDICT *) 0);
 | 
						|
 	}
 | 
						|
 
 | 
						|
-	if (pdesc.flags & PFOR_USEHWMS)
 | 
						|
+	if (pdesc->flags & PFOR_USEHWMS)
 | 
						|
 	{
 | 
						|
-	    if (fread(pdesc.hwms, 1, sizeof(pdesc.hwms), wfp) != sizeof(pdesc.hwms))
 | 
						|
+	    if (fread(pdesc->hwms, 1, sizeof(pdesc->hwms), wfp) != sizeof(pdesc->hwms))
 | 
						|
 	    {
 | 
						|
-		pdesc.flags &= ~PFOR_USEHWMS;
 | 
						|
+		pdesc->flags &= ~PFOR_USEHWMS;
 | 
						|
 	    }
 | 
						|
 	}
 | 
						|
     }
 | 
						|
-
 | 
						|
-    return (&pdesc);
 | 
						|
+    pdesc->canfree = 1;
 | 
						|
+    return (pdesc);
 | 
						|
 }
 | 
						|
 
 | 
						|
 int
 | 
						|
@@ -159,8 +161,13 @@
 | 
						|
 
 | 
						|
     fclose(pwp->ifp);
 | 
						|
     fclose(pwp->dfp);
 | 
						|
+    if (pwp->wfp)
 | 
						|
+	fclose(pwp->wfp);
 | 
						|
 
 | 
						|
-    pwp->header.pih_magic = 0;
 | 
						|
+    if (pwp->canfree)
 | 
						|
+	free(pwp);
 | 
						|
+    else
 | 
						|
+	pwp->header.pih_magic = 0;
 | 
						|
 
 | 
						|
     return (0);
 | 
						|
 }
 | 
						|
@@ -307,6 +314,11 @@
 | 
						|
     register char *this;
 | 
						|
     int idx;
 | 
						|
 
 | 
						|
+/*
 | 
						|
+ * comment in npasswd-2.0beta4 says this:
 | 
						|
+ * This does not work under all circumstances, so don't bother
 | 
						|
+ */
 | 
						|
+#if 0
 | 
						|
     if (pwp->flags & PFOR_USEHWMS)
 | 
						|
     {
 | 
						|
 	idx = string[0] & 0xff;
 | 
						|
@@ -317,6 +329,10 @@
 | 
						|
     	lwm = 0;
 | 
						|
     	hwm = PW_WORDS(pwp) - 1;
 | 
						|
     }
 | 
						|
+#else
 | 
						|
+    lwm = 0;
 | 
						|
+    hwm = PW_WORDS(pwp);
 | 
						|
+#endif
 | 
						|
 
 | 
						|
 #ifdef DEBUG
 | 
						|
     printf("---- %lu, %lu ----\n", lwm, hwm);
 | 
						|
diff -ur orig/cracklib26_small/util/mkdict cracklib26_small/util/mkdict
 | 
						|
--- orig/cracklib26_small/util/mkdict	Fri Jul  9 22:23:03 1993
 | 
						|
+++ cracklib26_small/util/mkdict	Sat Apr  4 22:31:45 1998
 | 
						|
@@ -14,9 +14,16 @@
 | 
						|
 SORT="sort"
 | 
						|
 ###SORT="sort -T /tmp"
 | 
						|
 
 | 
						|
-cat $* |
 | 
						|
+### Use zcat to read compressed (as well as uncompressed) dictionaries.
 | 
						|
+### Compressed dictionaries can save quite a lot of disk space.
 | 
						|
+
 | 
						|
+CAT="gzip -cdf"
 | 
						|
+###CAT="zcat"
 | 
						|
+###CAT="cat"
 | 
						|
+
 | 
						|
+$CAT $* |
 | 
						|
 	tr '[A-Z]' '[a-z]' |
 | 
						|
-	tr -cd '[\012a-z0-9]' |
 | 
						|
+	tr -cd '\012[a-z][0-9]' |
 | 
						|
 	$SORT |
 | 
						|
 	uniq |
 | 
						|
 	grep -v '^#' |
 |