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 Jan 10 18:48:17 1998
@@ -460,28 +460,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,7 +489,7 @@
 
     /* 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));
 
@@ -586,9 +585,10 @@
 }
 
 char *
-FascistLook(pwp, instring)
+FascistLookPw(pwp, instring, pwd)
     PWDICT *pwp;
     char *instring;
+    struct passwd *pwd;
 {
     int i;
     char *ptr;
@@ -667,7 +667,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 +715,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 +751,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/util/mkdict cracklib26_small/util/mkdict
--- orig/cracklib26_small/util/mkdict	Fri Jul  9 22:23:03 1993
+++ cracklib26_small/util/mkdict	Sat Jan 10 17:46:23 1998
@@ -14,9 +14,15 @@
 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="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 '^#' |
