Tomas Mraz d3e531
diff -up cracklib-2.9.6/lib/fascist.c.simplistic cracklib-2.9.6/lib/fascist.c
Tomas Mraz d3e531
--- cracklib-2.9.6/lib/fascist.c.simplistic	2015-10-22 18:21:51.099748012 +0200
Tomas Mraz d3e531
+++ cracklib-2.9.6/lib/fascist.c	2015-10-22 18:21:51.101748060 +0200
Tomas Mraz d8d736
@@ -55,7 +55,6 @@ static char *r_destructors[] = {
Tomas Mraz d8d736
 
Tomas Mraz d8d736
     "/?p@?p",                   /* purging out punctuation/symbols/junk */
Tomas Mraz d8d736
     "/?s@?s",
Tomas Mraz d8d736
-    "/?X@?X",
Tomas Mraz d8d736
 
Tomas Mraz d8d736
     /* attempt reverse engineering of password strings */
Tomas Mraz d8d736
 
Tomas Mraz d8d736
@@ -454,6 +453,12 @@ GTry(rawtext, password)
Tomas Mraz d8d736
 	    continue;
Tomas Mraz d8d736
 	}
Tomas Mraz d8d736
 
Tomas Mraz d8d736
+	if (len - strlen(mp) >= 3)
Tomas Mraz d8d736
+	{
Tomas Mraz d8d736
+	    /* purged too much */
Tomas Mraz d8d736
+	    continue;
Tomas Mraz d8d736
+	}
Tomas Mraz d8d736
+
Tomas Mraz d8d736
 #ifdef DEBUG
Tomas Mraz d8d736
 	printf("%-16s = %-16s (destruct %s)\n", mp, rawtext, r_destructors[i]);
Tomas Mraz d8d736
 #endif
Tomas Mraz d8d736
@@ -480,6 +485,12 @@ GTry(rawtext, password)
Tomas Mraz d8d736
 	    continue;
Tomas Mraz d8d736
 	}
Tomas Mraz d8d736
 
Tomas Mraz d8d736
+	if (len - strlen(mp) >= 3)
Tomas Mraz d8d736
+	{
Tomas Mraz d8d736
+	    /* purged too much */
Tomas Mraz d8d736
+	    continue;
Tomas Mraz d8d736
+	}
Tomas Mraz d8d736
+
Tomas Mraz d8d736
 #ifdef DEBUG
Tomas Mraz d8d736
 	printf("%-16s = %-16s (construct %s)\n", mp, password, r_constructors[i]);
Tomas Mraz d8d736
 #endif
Tomas Mraz d8d736
@@ -699,6 +710,7 @@ FascistLookUser(PWDICT *pwp, char *instr
Tomas Mraz d8d736
     char rpassword[STRINGSIZE];
Tomas Mraz d8d736
     char area[STRINGSIZE];
Tomas Mraz d8d736
     uint32_t notfound;
Tomas Mraz d8d736
+    int len;
Tomas Mraz d8d736
 
Tomas Mraz d8d736
     notfound = PW_WORDS(pwp);
Tomas Mraz d8d736
     /* already truncated if from FascistCheck() */
Tomas Mraz d8d736
@@ -748,6 +760,7 @@ FascistLookUser(PWDICT *pwp, char *instr
Tomas Mraz d8d736
 	return _("it is all whitespace");
Tomas Mraz d8d736
     }
Tomas Mraz d8d736
 
Tomas Mraz d8d736
+    len = strlen(password);
Tomas Mraz d8d736
     i = 0;
Tomas Mraz d8d736
     ptr = password;
Tomas Mraz d8d736
     while (ptr[0] && ptr[1])
Tomas Mraz d8d736
@@ -759,10 +772,9 @@ FascistLookUser(PWDICT *pwp, char *instr
Tomas Mraz d8d736
 	ptr++;
Tomas Mraz d8d736
     }
Tomas Mraz d8d736
 
Tomas Mraz ec8362
-    /*  Change by Ben Karsin from ITS at University of Hawaii at Manoa.  Static MAXSTEP
Tomas Mraz d8d736
-        would generate many false positives for long passwords. */
Tomas Mraz d8d736
-    maxrepeat = 3+(0.09*strlen(password));
Tomas Mraz d8d736
-    if (i > maxrepeat)
Tomas Mraz d8d736
+    /*  We were still generating false positives for long passwords.
Tomas Mraz d8d736
+        Just count systematic double as a single character. */
Tomas Mraz d8d736
+    if (len - i < MINLEN)
Tomas Mraz d8d736
     {
Tomas Mraz d8d736
 	return _("it is too simplistic/systematic");
Tomas Mraz d8d736
     }
Tomas Mraz d8d736
@@ -795,6 +807,12 @@ FascistLookUser(PWDICT *pwp, char *instr
Tomas Mraz d8d736
 	    continue;
Tomas Mraz d8d736
 	}
Tomas Mraz d8d736
 
Tomas Mraz d8d736
+	if (len - strlen(a) >= 3)
Tomas Mraz d8d736
+	{
Tomas Mraz d8d736
+	    /* purged too much */
Tomas Mraz d8d736
+	    continue;
Tomas Mraz d8d736
+	}
Tomas Mraz d8d736
+
Tomas Mraz d8d736
 #ifdef DEBUG
Tomas Mraz d8d736
 	printf("%-16s (dict)\n", a);
Tomas Mraz d8d736
 #endif
Tomas Mraz d8d736
@@ -815,6 +833,13 @@ FascistLookUser(PWDICT *pwp, char *instr
Tomas Mraz d8d736
 	{
Tomas Mraz d8d736
 	    continue;
Tomas Mraz d8d736
 	}
Tomas Mraz d8d736
+
Tomas Mraz d8d736
+	if (len - strlen(a) >= 3)
Tomas Mraz d8d736
+	{
Tomas Mraz d8d736
+	    /* purged too much */
Tomas Mraz d8d736
+	    continue;
Tomas Mraz d8d736
+	}
Tomas Mraz d8d736
+
Tomas Mraz d8d736
 #ifdef DEBUG
Tomas Mraz d8d736
 	printf("%-16s (reversed dict)\n", a);
Tomas Mraz d8d736
 #endif
Tomas Mraz d3e531
diff -up cracklib-2.9.6/util/cracklib-format.simplistic cracklib-2.9.6/util/cracklib-format
Tomas Mraz d3e531
--- cracklib-2.9.6/util/cracklib-format.simplistic	2015-10-22 18:21:51.101748060 +0200
Tomas Mraz d3e531
+++ cracklib-2.9.6/util/cracklib-format	2014-07-09 17:24:45.000000000 +0200
Tomas Mraz 3c36ea
@@ -3,8 +3,10 @@
Tomas Mraz 3c36ea
 # This preprocesses a set of word lists into a suitable form for input
Tomas Mraz 3c36ea
 # into cracklib-packer
Tomas Mraz 3c36ea
 #
Tomas Mraz 3c36ea
+LC_ALL=C
Tomas Mraz 3c36ea
+export LC_ALL
Tomas Mraz 3c36ea
 gzip -cdf "$@" |
Tomas Mraz d3e531
-    grep -v '^\(#\|$\)' |
Tomas Mraz 3c36ea
-    tr '[A-Z]' '[a-z]' |
Tomas Mraz 3c36ea
-    tr -cd '\012[a-z][0-9]' |
Tomas Mraz d3e531
-    env LC_ALL=C sort -u
Tomas Mraz d3e531
+    grep -a -E -v '^.{30,}$' |
Tomas Mraz 3c36ea
+    tr '[:upper:]' '[:lower:]' |
Tomas Mraz 3c36ea
+    tr -cd '\n[:graph:]' |
Tomas Mraz d3e531
+    sort -u