commit 6cd59420d6d64c16c2dfafee16c06d39903f0b92 Author: MSVSphere Packaging Team Date: Tue Nov 26 15:46:06 2024 +0300 import cracklib-2.9.11-7.el10 diff --git a/.cracklib.metadata b/.cracklib.metadata new file mode 100644 index 0000000..8fe0d72 --- /dev/null +++ b/.cracklib.metadata @@ -0,0 +1,3 @@ +99a9e04bc9ebad0267294e652a529117ceafd142 SOURCES/cracklib-2.9.11.tar.gz +90afe183bcdee8462738d5e5fa9d0c98c3403d77 SOURCES/cracklib-words-2.9.11.gz +9b407fa41faaf4138e875f168158e5f4568ea33e SOURCES/missing-words.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b722945 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/cracklib-2.9.11.tar.gz +SOURCES/cracklib-words-2.9.11.gz +SOURCES/missing-words.gz diff --git a/SOURCES/cracklib-2.9.11-man.patch b/SOURCES/cracklib-2.9.11-man.patch new file mode 100644 index 0000000..d30a75d --- /dev/null +++ b/SOURCES/cracklib-2.9.11-man.patch @@ -0,0 +1,41 @@ +diff --git a/src/doc/Makefile.am b/src/doc/Makefile.am +index e597b38..e13b910 100644 +--- cracklib-2.9.11/doc/Makefile.am ++++ cracklib-2.9.11/doc/Makefile.am +@@ -4,4 +4,5 @@ dist_man_MANS = \ + cracklib-check.8 \ + cracklib-format.8 \ + cracklib-update.8 \ ++ create-cracklib-dict.8 \ + FascistCheck.3 +\ No newline at end of file +diff --git a/src/doc/create-cracklib-dict.8 b/src/doc/create-cracklib-dict.8 +new file mode 100644 +index 0000000..c386e78 +--- /dev/null ++++ cracklib-2.9.11/doc/create-cracklib-dict.8 +@@ -0,0 +1,24 @@ ++.TH create\-cracklib\-dict 8 "Sat Jun 21 22:45:42 CEST 2008" "Jan Dittberner" ++.SH NAME ++create\-cracklib\-dict \- Check passwords using libcrack2 ++.SH SYNOPSIS ++.B create\-cracklib\-dict wordlist ... ++.br ++ ++.SH DESCRIPTION ++.B create\-cracklib\-dict ++takes one or more word list files as arguments and converts them into ++cracklib dictionaries for use by password checking programs. The ++results are placed in the default compiled-in dictionary location. ++ ++If you wish to store the dictionary in a different location, use the ++cracklib-format and cracklib-packer commands directly. ++ ++.SH SEE ALSO ++.BR cracklib\-format (8), ++.BR cracklib\-packer (8), ++.BR cracklib\-check (8), ++ ++.SH AUTHOR ++This man page was written by Jan Dittberner for ++the Debian GNU/Linux System (but may be used by others). diff --git a/SOURCES/cracklib-2.9.11-packlib-reentrant.patch b/SOURCES/cracklib-2.9.11-packlib-reentrant.patch new file mode 100644 index 0000000..71f23e3 --- /dev/null +++ b/SOURCES/cracklib-2.9.11-packlib-reentrant.patch @@ -0,0 +1,662 @@ +diff -Naur cracklib-2.9.11-orig/lib/fascist.c cracklib-2.9.11/lib/fascist.c +--- cracklib-2.9.11-orig/lib/fascist.c 2019-02-13 20:54:41.000000000 -0500 ++++ cracklib-2.9.11/lib/fascist.c 2023-07-07 18:20:42.239904964 -0400 +@@ -36,8 +36,8 @@ + #undef DEBUG + #undef DEBUG2 + +-extern char *Reverse(char *buf); +-extern char *Lowercase(char *buf); ++extern char *Reverse(char *buf, char *area); ++extern char *Lowercase(char *buf, char *area); + + static char *r_destructors[] = { + ":", /* noop - must do this to test raw word. */ +@@ -439,6 +439,8 @@ + int i; + int len; + char *mp; ++ char area[STRINGSIZE]; ++ char revarea[STRINGSIZE]; + + /* use destructors to turn password into rawtext */ + /* note use of Reverse() to save duplicating all rules */ +@@ -447,7 +449,7 @@ + + for (i = 0; r_destructors[i]; i++) + { +- if (!(mp = Mangle(password, r_destructors[i]))) ++ if (!(mp = Mangle(password, r_destructors[i], area))) + { + continue; + } +@@ -462,10 +464,10 @@ + } + + #ifdef DEBUG +- printf("%-16s = %-16s (destruct %s reversed)\n", Reverse(mp), rawtext, r_destructors[i]); ++ printf("%-16s = %-16s (destruct %s reversed)\n", Reverse(mp, revarea), rawtext, r_destructors[i]); + #endif + +- if (!strncmp(Reverse(mp), rawtext, len)) ++ if (!strncmp(Reverse(mp, revarea), rawtext, len)) + { + return (1); + } +@@ -473,7 +475,7 @@ + + for (i = 0; r_constructors[i]; i++) + { +- if (!(mp = Mangle(rawtext, r_constructors[i]))) ++ if (!(mp = Mangle(rawtext, r_constructors[i], area))) + { + continue; + } +@@ -520,7 +522,7 @@ + + strncpy(tbuffer, gecos, STRINGSIZE); + tbuffer[STRINGSIZE-1] = '\0'; +- strcpy(gbuffer, Lowercase(tbuffer)); ++ Lowercase(tbuffer, gbuffer); + + wc = 0; + ptr = gbuffer; +@@ -704,6 +706,7 @@ + char junk[STRINGSIZE]; + char *password; + char rpassword[STRINGSIZE]; ++ char area[STRINGSIZE]; + uint32_t notfound; + + notfound = PW_WORDS(pwp); +@@ -740,7 +743,7 @@ + return _("it does not contain enough DIFFERENT characters"); + } + +- strcpy(password, (char *)Lowercase(password)); ++ strcpy(password, (char *)Lowercase(password, area)); + + Trim(password); + +@@ -796,7 +799,7 @@ + { + char *a; + +- if (!(a = Mangle(password, r_destructors[i]))) ++ if (!(a = Mangle(password, r_destructors[i], area))) + { + continue; + } +@@ -811,13 +814,13 @@ + } + } + +- strcpy(password, (char *)Reverse(password)); ++ strcpy(password, (char *)Reverse(password, area)); + + for (i = 0; r_destructors[i]; i++) + { + char *a; + +- if (!(a = Mangle(password, r_destructors[i]))) ++ if (!(a = Mangle(password, r_destructors[i], area))) + { + continue; + } +diff -Naur cracklib-2.9.11-orig/lib/packer.h cracklib-2.9.11/lib/packer.h +--- cracklib-2.9.11-orig/lib/packer.h 2023-03-04 11:00:49.000000000 -0500 ++++ cracklib-2.9.11/lib/packer.h 2023-07-07 18:21:04.315119032 -0400 +@@ -82,7 +82,7 @@ + extern unsigned int FindPW(PWDICT *pwp, char *string); + extern int PutPW(PWDICT *pwp, char *string); + extern int PMatch(char *control, char *string); +-extern char *Mangle(char *input, char *control); ++extern char *Mangle(char *input, char *control, char *area); + extern char Chop(char *string); + extern char *Trim(char *string); + extern char *FascistLook(PWDICT *pwp, char *instring); +diff -Naur cracklib-2.9.11-orig/lib/packlib.c cracklib-2.9.11/lib/packlib.c +--- cracklib-2.9.11-orig/lib/packlib.c 2023-03-04 11:00:49.000000000 -0500 ++++ cracklib-2.9.11/lib/packlib.c 2023-07-07 18:44:55.183214284 -0400 +@@ -65,8 +65,8 @@ + char *mode; + { + int use64 = 0; +- static PWDICT pdesc; +- static PWDICT64 pdesc64; ++ PWDICT *pdesc; ++ PWDICT64 pdesc64; + char iname[STRINGSIZE]; + char dname[STRINGSIZE]; + char wname[STRINGSIZE]; +@@ -74,13 +74,11 @@ + void *ifp; + void *wfp; + +- if (pdesc.header.pih_magic == PIH_MAGIC) +- { +- fprintf(stderr, "%s: another dictionary already open\n", prefix); ++ pdesc = malloc(sizeof(*pdesc)); ++ if (pdesc == NULL) + return NULL; +- } + +- memset(&pdesc, '\0', sizeof(pdesc)); ++ memset(pdesc, '\0', sizeof(*pdesc)); + memset(&pdesc64, '\0', sizeof(pdesc64)); + + snprintf(iname, STRINGSIZE, "%s.pwi", prefix); +@@ -89,77 +87,80 @@ + + if (mode[0] == 'r') + { +- pdesc.flags &= ~PFOR_USEZLIB; ++ pdesc->flags &= ~PFOR_USEZLIB; + /* first try the normal db file */ +- if (!(pdesc.dfp = fopen(dname, mode))) ++ if (!(pdesc->dfp = fopen(dname, mode))) + { + #ifdef HAVE_ZLIB_H +- pdesc.flags |= PFOR_USEZLIB; ++ pdesc->flags |= PFOR_USEZLIB; + /* try extension .gz */ + snprintf(dname, STRINGSIZE, "%s.pwd.gz", prefix); +- if (!(pdesc.dfp = gzopen(dname, mode))) ++ if (!(pdesc->dfp = gzopen(dname, mode))) + { + perror(dname); ++ free(pdesc); + return NULL; + } + #else + perror(dname); ++ free(pdesc); + return NULL; + #endif + } + } + else + { +- pdesc.flags &= ~PFOR_USEZLIB; ++ pdesc->flags &= ~PFOR_USEZLIB; + /* write mode: use fopen */ +- if (!(pdesc.dfp = fopen(dname, mode))) ++ if (!(pdesc->dfp = fopen(dname, mode))) + { + perror(dname); ++ free(pdesc); + return NULL; + } + } + +- if (!(pdesc.ifp = fopen(iname, mode))) ++ if (!(pdesc->ifp = fopen(iname, mode))) + { + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) +- gzclose(pdesc.dfp); ++ if (pdesc->flags & PFOR_USEZLIB) ++ gzclose(pdesc->dfp); + else + #endif +- fclose(pdesc.dfp); ++ fclose(pdesc->dfp); + perror(iname); ++ free(pdesc); + return NULL; + } + +- 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; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -168,10 +169,11 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } + +- if ((pdesc.header.pih_magic == 0) || (pdesc.header.pih_numwords == 0)) ++ if ((pdesc->header.pih_magic == 0) || (pdesc->header.pih_numwords == 0)) + { + /* uh-oh. either a broken "64-bit" file or a garbage file. */ + rewind (ifp); +@@ -179,10 +181,9 @@ + { + fprintf(stderr, "%s: error reading header\n", prefix); + +- pdesc.header.pih_magic = 0; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -191,6 +192,7 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } + if (pdesc64.header.pih_magic != PIH_MAGIC) +@@ -198,10 +200,9 @@ + /* nope, not "64-bit" after all */ + fprintf(stderr, "%s: error reading header\n", prefix); + +- pdesc.header.pih_magic = 0; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -211,23 +212,23 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } +- pdesc.header.pih_magic = pdesc64.header.pih_magic; +- pdesc.header.pih_numwords = pdesc64.header.pih_numwords; +- pdesc.header.pih_blocklen = pdesc64.header.pih_blocklen; +- pdesc.header.pih_pad = pdesc64.header.pih_pad; ++ pdesc->header.pih_magic = pdesc64.header.pih_magic; ++ pdesc->header.pih_numwords = pdesc64.header.pih_numwords; ++ pdesc->header.pih_blocklen = pdesc64.header.pih_blocklen; ++ pdesc->header.pih_pad = pdesc64.header.pih_pad; + use64 = 1; + } + +- 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; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -237,17 +238,17 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } + +- if (pdesc.header.pih_numwords < 1) ++ if (pdesc->header.pih_numwords < 1) + { + fprintf(stderr, "%s: invalid word count\n", prefix); + +- pdesc.header.pih_magic = 0; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -256,17 +257,17 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } + +- if (pdesc.header.pih_blocklen != NUMWORDS) ++ if (pdesc->header.pih_blocklen != NUMWORDS) + { + fprintf(stderr, "%s: size mismatch\n", prefix); + +- pdesc.header.pih_magic = 0; + fclose(ifp); + #ifdef HAVE_ZLIB_H +- if (pdesc.flags & PFOR_USEZLIB) ++ if (pdesc->flags & PFOR_USEZLIB) + gzclose(dfp); + else + #endif +@@ -275,10 +276,11 @@ + { + fclose(wfp); + } ++ free(pdesc); + return NULL; + } + +- if (pdesc.flags & PFOR_USEHWMS) ++ if (pdesc->flags & PFOR_USEHWMS) + { + int i; + +@@ -286,27 +288,27 @@ + { + if (fread(pdesc64.hwms, 1, sizeof(pdesc64.hwms), wfp) != sizeof(pdesc64.hwms)) + { +- pdesc.flags &= ~PFOR_USEHWMS; ++ pdesc->flags &= ~PFOR_USEHWMS; + } +- for (i = 0; i < sizeof(pdesc.hwms) / sizeof(pdesc.hwms[0]); i++) ++ for (i = 0; i < sizeof(pdesc->hwms) / sizeof(pdesc->hwms[0]); i++) + { +- pdesc.hwms[i] = pdesc64.hwms[i]; ++ pdesc->hwms[i] = pdesc64.hwms[i]; + } + } +- else if (fread(pdesc.hwms, 1, sizeof(pdesc.hwms), wfp) != sizeof(pdesc.hwms)) ++ else if (fread(pdesc->hwms, 1, sizeof(pdesc->hwms), wfp) != sizeof(pdesc->hwms)) + { +- pdesc.flags &= ~PFOR_USEHWMS; ++ pdesc->flags &= ~PFOR_USEHWMS; + } + #if DEBUG + for (i=1; i<=0xff; i++) + { +- printf("hwm[%02x] = %d\n", i, pdesc.hwms[i]); ++ printf("hwm[%02x] = %d\n", i, pdesc->hwms[i]); + } + #endif + } + } + +- return (&pdesc); ++ return (pdesc); + } + + int +@@ -327,12 +329,14 @@ + if (fseek(pwp->ifp, 0L, 0)) + { + fprintf(stderr, "index magic fseek failed\n"); ++ free(pwp); + return (-1); + } + + if (!fwrite((char *) &pwp->header, sizeof(pwp->header), 1, pwp->ifp)) + { + fprintf(stderr, "index magic fwrite failed\n"); ++ free(pwp); + return (-1); + } + +@@ -366,6 +370,7 @@ + } + + pwp->header.pih_magic = 0; ++ free(pwp); + + return (0); + } +diff -Naur cracklib-2.9.11-orig/lib/rules.c cracklib-2.9.11/lib/rules.c +--- cracklib-2.9.11-orig/lib/rules.c 2023-04-02 14:15:05.000000000 -0400 ++++ cracklib-2.9.11/lib/rules.c 2023-07-07 18:58:04.892943574 -0400 +@@ -80,12 +80,12 @@ + } + + char * +-Reverse(str) /* return a pointer to a reversal */ ++Reverse(str, area) /* return a pointer to a reversal */ + char *str; ++ char *area; + { + int i; + int j; +- static char area[STRINGSIZE]; + j = i = strlen(str); + while (*str) + { +@@ -96,11 +96,11 @@ + } + + char * +-Uppercase(str) /* return a pointer to an uppercase */ ++Uppercase(str, area) /* return a pointer to an uppercase */ + char *str; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*str) + { +@@ -113,11 +113,11 @@ + } + + char * +-Lowercase(str) /* return a pointer to an lowercase */ ++Lowercase(str, area) /* return a pointer to an lowercase */ + char *str; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*str) + { +@@ -130,11 +130,11 @@ + } + + char * +-Capitalise(str) /* return a pointer to an capitalised */ ++Capitalise(str, area) /* return a pointer to an capitalised */ + char *str; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + + while (*str) +@@ -149,11 +149,11 @@ + } + + char * +-Pluralise(string) /* returns a pointer to a plural */ ++Pluralise(string, area) /* returns a pointer to a plural */ + char *string; ++ char *area; + { + int length; +- static char area[STRINGSIZE]; + length = strlen(string); + strcpy(area, string); + +@@ -190,13 +190,13 @@ + } + + char * +-Substitute(string, old, new) /* returns pointer to a swapped about copy */ ++Substitute(string, old, new, area) /* returns pointer to a swapped about copy */ + char *string; + char old; + char new; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*string) + { +@@ -208,12 +208,12 @@ + } + + char * +-Purge(string, target) /* returns pointer to a purged copy */ ++Purge(string, target, area) /* returns pointer to a purged copy */ + char *string; + char target; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*string) + { +@@ -370,13 +370,13 @@ + } + + char * +-PolySubst(string, class, new) /* returns pointer to a swapped about copy */ ++PolySubst(string, class, new, area) /* returns pointer to a swapped about copy */ + char *string; + char class; + char new; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*string) + { +@@ -388,12 +388,12 @@ + } + + char * +-PolyPurge(string, class) /* returns pointer to a purged copy */ ++PolyPurge(string, class, area) /* returns pointer to a purged copy */ + char *string; + char class; ++ char *area; + { + char *ptr; +- static char area[STRINGSIZE]; + ptr = area; + while (*string) + { +@@ -426,39 +426,40 @@ + } + + char * +-Mangle(input, control) /* returns a pointer to a controlled Mangle */ ++Mangle(input, control, area) /* returns a pointer to a controlled Mangle */ + char *input; + char *control; ++ char *area; + { + int limit; + char *ptr; +- static char area[STRINGSIZE * 2] = {0}; + char area2[STRINGSIZE * 2] = {0}; + strcpy(area, input); + + for (ptr = control; *ptr; ptr++) + { ++ strcpy(area2, area); + switch (*ptr) + { + case RULE_NOOP: + break; + case RULE_REVERSE: +- strcpy(area, Reverse(area)); ++ Reverse(area2, area); + break; + case RULE_UPPERCASE: +- strcpy(area, Uppercase(area)); ++ Uppercase(area2, area); + break; + case RULE_LOWERCASE: +- strcpy(area, Lowercase(area)); ++ Lowercase(area2, area); + break; + case RULE_CAPITALISE: +- strcpy(area, Capitalise(area)); ++ Capitalise(area2, area); + break; + case RULE_PLURALISE: +- strcpy(area, Pluralise(area)); ++ Pluralise(area2, area); + break; + case RULE_REFLECT: +- strcat(area, Reverse(area)); ++ strcat(area, Reverse(area, area2)); + break; + case RULE_DUPLICATE: + strcpy(area2, area); +@@ -545,7 +546,6 @@ + Debug(1, "Mangle: extract: weird argument in '%s'\n", control); + return NULL; + } +- strcpy(area2, area); + for (i = 0; length-- && area2[start + i]; i++) + { + area[i] = area2[start + i]; +@@ -616,10 +616,10 @@ + return NULL; + } else if (ptr[1] != RULE_CLASS) + { +- strcpy(area, Purge(area, *(++ptr))); ++ Purge(area2, *(++ptr), area); + } else + { +- strcpy(area, PolyPurge(area, ptr[2])); ++ PolyPurge(area2, ptr[2], area); + ptr += 2; + } + break; +@@ -630,11 +630,11 @@ + return NULL; + } else if (ptr[1] != RULE_CLASS) + { +- strcpy(area, Substitute(area, ptr[1], ptr[2])); ++ Substitute(area2, ptr[1], ptr[2], area); + ptr += 2; + } else + { +- strcpy(area, PolySubst(area, ptr[2], ptr[3])); ++ PolySubst(area2, ptr[2], ptr[3], area); + ptr += 3; + } + break; diff --git a/SOURCES/cracklib-2.9.11-simplistic.patch b/SOURCES/cracklib-2.9.11-simplistic.patch new file mode 100644 index 0000000..079289d --- /dev/null +++ b/SOURCES/cracklib-2.9.11-simplistic.patch @@ -0,0 +1,112 @@ +diff -Naur cracklib-2.9.11-orig/lib/fascist.c cracklib-2.9.11/lib/fascist.c +--- cracklib-2.9.11-orig/lib/fascist.c 2023-07-07 21:18:25.582821076 -0400 ++++ cracklib-2.9.11/lib/fascist.c 2023-07-07 21:19:55.130234075 -0400 +@@ -55,7 +55,6 @@ + + "/?p@?p", /* purging out punctuation/symbols/junk */ + "/?s@?s", +- "/?X@?X", + + /* attempt reverse engineering of password strings */ + +@@ -454,6 +453,12 @@ + continue; + } + ++ if (len - strlen(mp) >= 3) ++ { ++ /* purged too much */ ++ continue; ++ } ++ + #ifdef DEBUG + printf("%-16s = %-16s (destruct %s)\n", mp, rawtext, r_destructors[i]); + #endif +@@ -480,6 +485,12 @@ + continue; + } + ++ if (len - strlen(mp) >= 3) ++ { ++ /* purged too much */ ++ continue; ++ } ++ + #ifdef DEBUG + printf("%-16s = %-16s (construct %s)\n", mp, password, r_constructors[i]); + #endif +@@ -708,6 +719,7 @@ + char rpassword[STRINGSIZE]; + char area[STRINGSIZE]; + uint32_t notfound; ++ int len; + + notfound = PW_WORDS(pwp); + /* already truncated if from FascistCheck() */ +@@ -757,6 +769,7 @@ + return _("it is all whitespace"); + } + ++ len = strlen(password); + i = 0; + ptr = password; + while (ptr[0] && ptr[1]) +@@ -768,10 +781,9 @@ + ptr++; + } + +- /* Change by Ben Karsin from ITS at University of Hawaii at Manoa. Static MAXSTEP +- would generate many false positives for long passwords. */ +- maxrepeat = 3+(0.09*strlen(password)); +- if (i > maxrepeat) ++ /* We were still generating false positives for long passwords. ++ Just count systematic double as a single character. */ ++ if (len - i < MINLEN) + { + return _("it is too simplistic/systematic"); + } +@@ -804,6 +816,12 @@ + continue; + } + ++ if (len - strlen(a) >= 3) ++ { ++ /* purged too much */ ++ continue; ++ } ++ + #ifdef DEBUG + printf("%-16s (dict)\n", a); + #endif +@@ -824,6 +842,13 @@ + { + continue; + } ++ ++ if (len - strlen(a) >= 3) ++ { ++ /* purged too much */ ++ continue; ++ } ++ + #ifdef DEBUG + printf("%-16s (reversed dict)\n", a); + #endif +diff -Naur cracklib-2.9.11-orig/util/cracklib-format cracklib-2.9.11/util/cracklib-format +--- cracklib-2.9.11-orig/util/cracklib-format 2024-07-30 10:14:59.364641602 +0200 ++++ cracklib-2.9.11/util/cracklib-format 2024-07-30 10:15:34.208982313 +0200 +@@ -10,10 +10,12 @@ + # lines (possibly introduced by earlier parts of the pipeline) as + # cracklib-packer will generate "skipping line" warnings otherwise. + # ++LC_ALL=C ++export LC_ALL + gzip -cdf "$@" | + grep -a -v '^#' | + tr '[A-Z]' '[a-z]' | +- tr -cd '\012[a-z][0-9]' | ++ tr -cd '\n[:graph:]' | + cut -c 1-1022 | + grep -v '^$' | +- env LC_ALL=C sort -u ++ sort -u diff --git a/SOURCES/cracklib.default.zh_CN.po b/SOURCES/cracklib.default.zh_CN.po new file mode 100644 index 0000000..e080d6c --- /dev/null +++ b/SOURCES/cracklib.default.zh_CN.po @@ -0,0 +1,78 @@ +# translation of cracklib.default.po to Wei Liu +# Copyright (C) 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# +# Leah Liu , 2010. +msgid "" +msgstr "" +"Project-Id-Version: cracklib.default\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-03-02 21:00-0600\n" +"PO-Revision-Date: 2010-09-07 23:42+1000\n" +"Last-Translator: Leah Liu \n" +"Language-Team: Wei Liu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: lib/fascist.c:550 +msgid "you are not registered in the password file" +msgstr "尚未在口令文件中注册" + +#: lib/fascist.c:564 +msgid "it is based on your username" +msgstr "它基于用户名" + +#: lib/fascist.c:629 +msgid "it is based upon your password entry" +msgstr "它基于输入的口令" + +#: lib/fascist.c:649 +msgid "it is derived from your password entry" +msgstr "它派生自输入的口令" + +#: lib/fascist.c:662 +msgid "it's derived from your password entry" +msgstr "它派生自输入的口令" + +#: lib/fascist.c:676 +msgid "it is derivable from your password entry" +msgstr "可从输入的口令推断" + +#: lib/fascist.c:690 +msgid "it's derivable from your password entry" +msgstr "可从输入的口令推断" + +#: lib/fascist.c:726 +msgid "it is WAY too short" +msgstr "WAY 过短" + +#: lib/fascist.c:731 +msgid "it is too short" +msgstr "过短" + +#: lib/fascist.c:748 +msgid "it does not contain enough DIFFERENT characters" +msgstr "它没有包含足够的不同字符" + +#: lib/fascist.c:762 +msgid "it is all whitespace" +msgstr "全是空格" + +#: lib/fascist.c:781 +msgid "it is too simplistic/systematic" +msgstr "过于简单化/系统化" + +#: lib/fascist.c:786 +msgid "it looks like a National Insurance number." +msgstr "看起来像国家保险号码。" + +#: lib/fascist.c:813 +msgid "it is based on a dictionary word" +msgstr "它基于字典单词" + +#: lib/fascist.c:832 +msgid "it is based on a (reversed) dictionary word" +msgstr "它基于(颠倒的)字典单词" + diff --git a/SPECS/cracklib.spec b/SPECS/cracklib.spec new file mode 100644 index 0000000..8664f8c --- /dev/null +++ b/SPECS/cracklib.spec @@ -0,0 +1,649 @@ +# Reflects the values hard-coded in various Makefile.am's in the source tree. +%define dictdir %{_datadir}/cracklib +%define dictpath %{dictdir}/pw_dict + +Summary: A password-checking library +Name: cracklib +Version: 2.9.11 +Release: 7%{?dist} +URL: https://github.com/cracklib/cracklib +License: LGPL-2.1-or-later + +Source0: https://github.com/cracklib/cracklib/releases/download/v%{version}/cracklib-%{version}.tar.gz +Source1: https://github.com/cracklib/cracklib/releases/download/v%{version}/cracklib-words-%{version}.gz +# From attachment to https://bugzilla.redhat.com/show_bug.cgi?id=627449 +Source2: cracklib.default.zh_CN.po +# No upstream source for this, just words missing from the current cracklib-words +Source3: missing-words.gz + +Patch: cracklib-2.9.11-packlib-reentrant.patch +Patch: cracklib-2.9.11-simplistic.patch +# https://github.com/cracklib/cracklib/pull/92 +Patch: cracklib-2.9.11-man.patch + +BuildRequires: gcc autoconf automake libtool +BuildRequires: words, gettext +BuildRequires: gettext-autopoint +BuildRequires: zlib-devel +Conflicts: cracklib-dicts < 2.8 +# The cracklib-format script calls gzip, but without a specific path. +Requires: gzip + +%description +CrackLib tests passwords to determine whether they match certain +security-oriented characteristics, with the purpose of stopping users +from choosing passwords that are easy to guess. CrackLib performs +several tests on passwords: it tries to generate words from a username +and gecos entry and checks those words against the password; it checks +for simplistic patterns in passwords; and it checks for the password +in a dictionary. + +CrackLib is actually a library containing a particular C function +which is used to check the password, as well as other C +functions. CrackLib is not a replacement for a passwd program; it must +be used in conjunction with an existing passwd program. + +Install the cracklib package if you need a program to check users' +passwords to see if they are at least minimally secure. If you install +CrackLib, you will also want to install the cracklib-dicts package. + +%package devel +Summary: Development files needed for building applications which use cracklib +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description devel +The cracklib-devel package contains the header files and libraries needed +for compiling applications which use cracklib. + +%package dicts +Summary: The standard CrackLib dictionaries +BuildRequires: words >= 2-13 +BuildRequires: make +Requires: cracklib = %{version}-%{release} + +%description dicts +The cracklib-dicts package includes the CrackLib dictionaries. +CrackLib will need to use the dictionary appropriate to your system, +which is normally put in /usr/share/dict/words. Cracklib-dicts also +contains the utilities necessary for the creation of new dictionaries. + +If you are installing CrackLib, you should also install cracklib-dicts. + +%prep +%autosetup -p 1 + +# Replace zn_CN.po with one that wasn't mis-transcoded at some point. +install -p -m 644 %{SOURCE2} po/zh_CN.po + +mkdir cracklib-dicts +for dict in %{SOURCE3} %{SOURCE1} +do + cp -fv ${dict} cracklib-dicts/ +done +chmod +x util/cracklib-format + +%build +# Makefile.am was changed by patch for adding man page +autoreconf -fvi +# Use the dictionary from the build to test +sed -i 's,util/cracklib-check <,util/cracklib-check $(DESTDIR)/$(DEFAULT_CRACKLIB_DICT) <,' Makefile.in +%configure --with-pic \ + --without-python \ + --with-default-dict=%{dictpath} --disable-static +make -C po update-gmo +make + +%install +%make_install 'pythondir=${pyexecdir}' +./util/cracklib-format cracklib-dicts/* | \ +./util/cracklib-packer %{buildroot}%{dictpath} +./util/cracklib-format %{buildroot}%{dictdir}/cracklib-small | \ +./util/cracklib-packer %{buildroot}%{dictdir}/cracklib-small +rm -f %{buildroot}%{dictdir}/cracklib-small +sed s,/usr/lib/cracklib_dict,%{dictpath},g lib/crack.h > %{buildroot}%{_includedir}/crack.h +ln -s cracklib-format %{buildroot}%{_sbindir}/mkdict +# packer link removed as it clashes with hashicorp's packer binary. +#ln -s cracklib-packer %{buildroot}/%{_sbindir}/packer +touch %{buildroot}/top + +toprelpath=.. +touch %{buildroot}/top +while ! test -f %{buildroot}%{_libdir}/$toprelpath/top ; do + toprelpath=../$toprelpath +done +rm -f %{buildroot}/top +if test %{dictpath} != %{_libdir}/cracklib_dict ; then +ln -s $toprelpath%{dictpath}.hwm %{buildroot}%{_libdir}/cracklib_dict.hwm +ln -s $toprelpath%{dictpath}.pwd %{buildroot}%{_libdir}/cracklib_dict.pwd +ln -s $toprelpath%{dictpath}.pwi %{buildroot}%{_libdir}/cracklib_dict.pwi +fi +rm -f %{buildroot}%{_libdir}/python*/site-packages/_cracklib*.*a +rm -f %{buildroot}%{_libdir}/libcrack.la + +mkdir -p %{buildroot}%{_mandir}/man{3,8} +install -p -m644 doc/*.3 %{buildroot}%{_mandir}/man3/ +install -p -m644 doc/*.8 %{buildroot}%{_mandir}/man8/ +if ! test -s %{buildroot}%{_mandir}/man8/cracklib-packer.8 ; then + echo .so man8/cracklib-format.8 > %{buildroot}%{_mandir}/man8/cracklib-packer.8 +fi +if ! test -s %{buildroot}%{_mandir}/man8/cracklib-unpacker.8 ; then + echo .so man8/cracklib-format.8 > %{buildroot}%{_mandir}/man8/cracklib-unpacker.8 +fi + +%find_lang %{name} + +%check +make test DESTDIR=%{buildroot} + +%ldconfig_scriptlets + +%files -f %{name}.lang +%doc README README-WORDS NEWS README-LICENSE AUTHORS +%license COPYING.LIB +%{_libdir}/libcrack.so.* +%dir %{_datadir}/cracklib +%{_datadir}/cracklib/cracklib.magic +%{_sbindir}/*cracklib* +%{_mandir}/man8/* + +%files devel +%{_includedir}/* +%{_libdir}/libcrack.so +%{_mandir}/man3/* + +%files dicts +%{_datadir}/cracklib/pw_dict.* +%{_datadir}/cracklib/cracklib-small.* +%{_libdir}/cracklib_dict.* +%{_sbindir}/mkdict + +%changelog +* Tue Nov 26 2024 MSVSphere Packaging Team - 2.9.11-7 +- Rebuilt for MSVSphere 10 + +* Tue Jul 30 2024 Veronika Hanulikova - 2.9.11-7 +- Add missing man page for create-cracklib-dict (RHEL-39972) +- Preserve special characters in cracklib-format (RHEL-39972) + +* Mon Jun 24 2024 Troy Dawson - 2.9.11-6 +- Bump release for June 2024 mass rebuild + +* Wed Jan 24 2024 Fedora Release Engineering - 2.9.11-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 2.9.11-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Aug 04 2023 Dmitry Belyavskiy - 2.9.11-3 +- migrated to SPDX license + +* Wed Jul 19 2023 Fedora Release Engineering - 2.9.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jul 07 2023 Paul Wouters - 2.9.7-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Tue Aug 30 2022 Parag Nemade - 2.9.7-30 +- As -dicts subpackage installs files under %%{_libdir} path it should not be noarch +- this fixes FTBFS on F37+ + +* Wed Jul 20 2022 Fedora Release Engineering - 2.9.7-29 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Wed Jan 19 2022 Fedora Release Engineering - 2.9.6-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Aug 30 2021 Paul Wouters - 2.9.6-27 +- Resolves: rhbz#1994196 Remove /usr/bin/packer symbolic link + +* Wed Jul 21 2021 Fedora Release Engineering - 2.9.6-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jan 26 2021 Fedora Release Engineering - 2.9.6-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 2.9.6-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 13 2020 Tom Stellard - 2.9.6-23 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Tue Jan 28 2020 Fedora Release Engineering - 2.9.6-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Aug 9 2019 Tomáš Mráz - 2.9.6-21 +- Drop Python 2 bindings completely + +* Wed Jul 24 2019 Fedora Release Engineering - 2.9.6-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 2.9.6-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Mon Nov 26 2018 Tomáš Mráz - 2.9.6-18 +- Fix regression in dictionary creation and lookup + +* Wed Oct 10 2018 Tomáš Mráz - 2.9.6-17 +- Fix minor bug found in the Coverity scan + +* Tue Oct 9 2018 Tomáš Mráz - 2.9.6-16 +- Updated translations + +* Fri Jul 13 2018 Tomáš Mráz - 2.9.6-15 +- The test must use the dictionary from the build + +* Thu Jul 12 2018 Fedora Release Engineering - 2.9.6-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 21 2018 Tomáš Mráz - 2.9.6-13 +- Drop Python 2 support in RHEL + +* Wed Feb 07 2018 Fedora Release Engineering - 2.9.6-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 2.9.6-11 +- Switch to %%ldconfig_scriptlets + +* Wed Jan 03 2018 Iryna Shcherbina - 2.9.6-10 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Sun Aug 20 2017 Zbigniew Jędrzejewski-Szmek - 2.9.6-9 +- Add Provides for the old name without %%_isa + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 2.9.6-8 +- Python 2 binary package renamed to python2-cracklib + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Wed Aug 02 2017 Fedora Release Engineering - 2.9.6-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.9.6-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.9.6-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Dec 8 2016 Fedora Release Engineering - 2.9.6-4 +- fix CVE-2016-6318 - avoid overflows in GECOS handling and mangling password (#1364944) + +* Tue Jul 19 2016 Fedora Release Engineering - 2.9.6-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Feb 03 2016 Fedora Release Engineering - 2.9.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Oct 23 2015 Tomáš Mráz - 2.9.6-1 +- new upstream release +- cleanup of the word lists + +* Wed Jun 17 2015 Fedora Release Engineering - 2.9.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Aug 16 2014 Fedora Release Engineering - 2.9.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Jul 11 2014 Tom Callaway - 2.9.1-4 +- fix license handling + +* Sat Jun 07 2014 Fedora Release Engineering - 2.9.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Feb 5 2014 Tomáš Mráz - 2.9.1-2 +- move python files to libdir + +* Mon Dec 9 2013 Tomáš Mráz - 2.9.1-1 +- new upstream release + +* Mon Dec 2 2013 Tomáš Mráz - 2.9.0-9 +- update only .gmo files to avoid multilib conflicts (#1036305) + +* Thu Nov 28 2013 Tomáš Mráz - 2.9.0-8 +- updated translations + +* Thu Oct 31 2013 Tomáš Mráz - 2.9.0-7 +- do not remove any printable characters in cracklib-format + +* Thu Oct 31 2013 Tomáš Mráz - 2.9.0-6 +- fix the broken zh_CN translation + +* Tue Sep 3 2013 Tomáš Mráz - 2.9.0-5 +- make the simplistic check and the purging of special characters much + less aggressive (#1003624, #985378) + +* Wed Aug 28 2013 Tomáš Mráz - 2.9.0-4 +- revert compression of the dictionaries as the performance penalty is too big + +* Wed Aug 21 2013 Tomáš Mráz - 2.9.0-3 +- fix the python module to work with compressed dictionaries (#972542) +- fix various dictionary lookup errors (#986400, #986401) +- make the library reentrant and fix compilation warnings + +* Sat Aug 03 2013 Fedora Release Engineering - 2.9.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jun 3 2013 Nalin Dahyabhai - 2.9.0-1 +- update to 2.9.0 (#970065) + - adds FascistCheckUser() +- go ahead and compress the main dictionary, since we're linking with zlib + anyway + +* Tue Jan 29 2013 Nalin Dahyabhai - 2.8.22-3 +- point cracklib-packer and cracklib-unpacker man pages to cracklib-format + (internal tooling) + +* Wed Dec 19 2012 Nalin Dahyabhai - 2.8.22-2 +- add missing buildrequires: on zlib-devel (#888876) + +* Mon Dec 17 2012 Nalin Dahyabhai - 2.8.22-1 +- update to 2.8.22 (#887461), which now returns an error instead of exiting + when there's a failure opening the dictionary in FascistCheck() + +* Thu Dec 13 2012 Nalin Dahyabhai - 2.8.21-1 +- update to 2.8.21 + +* Mon Dec 10 2012 Nalin Dahyabhai - 2.8.20-1 +- update to 2.8.20 (#885439) + +* Tue Nov 20 2012 Nalin Dahyabhai - 2.8.19-3 +- update the copy of the debian source package to one that can currently be + retrieved using the URL we list for it + +* Wed Jul 18 2012 Fedora Release Engineering - 2.8.19-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri May 18 2012 Nalin Dahyabhai - 2.8.19-1 +- update to 2.8.19 + +* Thu Jan 12 2012 Fedora Release Engineering - 2.8.18-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Feb 08 2011 Fedora Release Engineering - 2.8.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jan 27 2011 Nalin Dahyabhai - 2.8.18-1 +- update to 2.8.18 +- add man pages from Debian (#583932) +- replace zh_CN translation (related to #627449) + +* Wed Jul 21 2010 David Malcolm - 2.8.16-4 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Sat Jul 3 2010 Dan Horák - 2.8.16-3 +- added gettext-autopoint as BR: + +* Thu May 20 2010 Nalin Dahyabhai - 2.8.16-2 +- pull in changes to the Hindi translation (#589188) + +* Tue Apr 20 2010 Nalin Dahyabhai - 2.8.16-1 +- update to 2.8.16 + +* Fri Jan 22 2010 Nalin Dahyabhai - 2.8.15-3 +- add passwords derived from rockyou breach data to the dictionaries (Matthew + Miller, #557592) + +* Thu Jan 21 2010 Nalin Dahyabhai - 2.8.15-2 +- update license: tag +- include license file + +* Tue Dec 1 2009 Nalin Dahyabhai - 2.8.15-1 +- update to 2.8.15 +- update cracklib-words to the current version (2008-05-07) +- fixup URLs for various dictionary sources that we use +- fix freeing-an-uninitialized-pointer in the python module (SF#2907102) +- add a disttag + +* Fri Jul 24 2009 Fedora Release Engineering - 2.8.13-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon May 18 2009 Nalin Dahyabhai - 2.8.13-5 +- add explicit dependency on gzip for the sake of cracklib-format (Daniel + Mach, #501278) + +* Tue Feb 24 2009 Fedora Release Engineering - 2.8.13-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Thu Feb 19 2009 Nalin Dahyabhai - 2.8.13-3 +- drop trailing "." from the package description for the dicts + subpackage (#225659) + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 2.8.13-2 +- Rebuild for Python 2.6 + +* Tue Oct 28 2008 Nalin Dahyabhai - 2.8.13-1 +- update to 2.8.13, which overhauls the python bindings and revises + FascistCheck()'s behavior: + 2.8.12 success: returns None, fail: returns error text, other: exceptions + 2.8.13 success: returns candidate, fail: throws ValueError, other: exceptions + +* Tue Oct 28 2008 Nalin Dahyabhai - 2.8.12-3 +- fix errors rebuilding with libtool that's newer than the one upstream + has (#467364) + +* Tue Feb 19 2008 Fedora Release Engineering - 2.8.12-2 +- Autorebuild for GCC 4.3 + +* Fri Jan 25 2008 Nalin Dahyabhai - 2.8.12-1 +- update to 2.8.12, which was relicensed to GPLv2 +- package the now-bundled cracklib-small dictionary in cracklib-dicts + +* Tue Aug 21 2007 Nalin Dahyabhai - 2.8.10-3 +- rebuild + +* Mon Jul 23 2007 Nalin Dahyabhai +- add a %%check script to catch things like #249210 + +* Mon Jul 23 2007 Nalin Dahyabhai - 2.8.10-2 +- work around non-executable util/cracklib-format giving us empty/garbage + dictionaries (#249210) + +* Thu Jul 19 2007 Nalin Dahyabhai - 2.8.10-1 +- update to 2.8.10 + +* Wed Jun 20 2007 Nalin Dahyabhai - 2.8.9-11 +- improve reports of out-of-memory exceptions so that they don't include a + bogus filename +- improve reports of file-missing exceptions from the python module so that + they give the right filename (#225858) + +* Mon Mar 12 2007 Nalin Dahyabhai - 2.8.9-10 +- explicitly include required headers from (#228698) +- attempt to provide doc strings in the python module + +* Mon Feb 12 2007 Nalin Dahyabhai - 2.8.9-9 +- drop final "." from summaries (Jef Spaleta, #225659) +- drop static library from -devel subpackage (Jef Spaleta, #225659) +- note that the most recently-added wordlist came from bugzilla (#225659) +- remove explicit dependency on gzip, as it's implicit (Jef Spaleta, #225659) +- convert %%triggerpostun to not use a shell as an interpreter (#225659) + +* Wed Jan 31 2007 Nalin Dahyabhai - 2.8.9-8 +- add word list from attachment #126053 (#185314) + +* Thu Jan 25 2007 Nalin Dahyabhai - 2.8.9-7 +- fix check for the existence of dictionaries when the caller specifies a + location (#224347, upstream #1644628) + +* Thu Dec 7 2006 Jeremy Katz - 2.8.9-6 +- rebuild against python 2.5 + +* Sun Oct 29 2006 Nalin Dahyabhai - 2.8.9-5 +- split out cracklib-python (#203327) + +* Sun Oct 29 2006 Nalin Dahyabhai - 2.8.9-4 +- split out cracklib-devel (#203569) + +* Wed Jul 12 2006 Jesse Keating - 2.8.9-3.1 +- rebuild + +* Mon Jun 12 2006 Jesse Keating - 2.8.9-3 +- Add missing br, automake, libtool (#194738) + +* Tue Apr 25 2006 Nalin Dahyabhai - 2.8.9-2 +- update to 2.8.9 +- only create compat symlinks for the dictionaries if we aren't installing + them into the old locations + +* Fri Feb 10 2006 Jesse Keating - 2.8.6-1.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.8.6-1.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Mon Nov 7 2005 Nalin Dahyabhai 2.8.6-1 +- update to 2.8.6 +- remove .la file (#172632) + +* Wed Sep 28 2005 Nalin Dahyabhai 2.8.5-2 +- update to 2.8.5 + +* Tue Sep 27 2005 Nalin Dahyabhai 2.8.4-1 +- update to 2.8.4 +- build python module + +* Fri May 13 2005 Nalin Dahyabhai 2.8.3-1 +- update to 2.8.3 + +* Thu Mar 17 2005 Nalin Dahyabhai 2.8.2-1 +- update to 2.8.2 + +* Wed Mar 16 2005 Nalin Dahyabhai 2.8.1-1 +- update to 2.8.1 + - moves dictionary to new default location under %%{_datadir} -- the + dictionary format is the same across all architectures + - renames "packer" to "cracklib-packer" +- conflict with cracklib-dicts < 2.8, where the on-disk format was not + compatible on 64-bit arches due to now-fixed cleanliness bugs +- move binaries for manipulating and checking words against dictionaries + from -dicts into the main package + +* Mon Jan 3 2005 Nalin Dahyabhai 2.7-30 +- rebuild + +* Mon Jan 3 2005 Nalin Dahyabhai 2.7-29 +- correctly build on 64-bit systems (part of #143417) +- patch so that 32- and 64-bit libcrack can read dictionaries which were + incorrectly generated on 64-bit systems of the same endianness (more #143417) +- include a sample cracklib magic file +- stop using /usr/dict/* when building the dictionary +- list words as a build requirement, which it is, instead of a run-time + requirement +- provide a virtual arch-specific dep in cracklib-dicts, require it in + cracklib (part of #143417) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Wed Feb 4 2004 Nalin Dahyabhai 2.7-26 +- update URL (previous page moved) (#114894) + +* Fri Jan 30 2004 Nalin Dahyabhai 2.7-25 +- fix ldconfig invocation in trigger for older versions which included the + soname symlink (#114620) + +* Mon Dec 1 2003 Nalin Dahyabhai 2.7-24 +- include packer.h for reading dictionaries directly, since we already include + packer in the -dicts subpackage (#68339) +- don't include the soname symlink in the package, let ldconfig do its job + +* Wed Jun 18 2003 Nalin Dahyabhai 2.7-23 +- rebuild + +* Mon Jun 16 2003 Nalin Dahyabhai 2.7-22 +- rebuild + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Apr 30 2003 Nalin Dahyabhai +- update URL + +* Tue Feb 04 2003 Florian La Roche +- add symlink to shared libs + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Wed Sep 25 2002 Nalin Dahyabhai 2.7-19 +- fix for builds on multilib systems (set DICTPATH properly) + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Sun May 26 2002 Tim Powers +- automated rebuild + +* Thu May 9 2002 Nalin Dahyabhai 2.7-16 +- rebuild in new environment + +* Fri Feb 22 2002 Nalin Dahyabhai 2.7-15 +- rebuild + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Tue Oct 2 2001 Nalin Dahyabhai 2.7-13 +- use getpwuid_r instead of getpwuid + +* Fri Aug 3 2001 Nalin Dahyabhai 2.7-12 +- remove cruft that ldconfig already knows how to manage +- don't explicitly strip anything -- the brp setup decides that +- tweak the header so that it can be used in C++ (#46685) +- buildprereq the words package + +* Tue Jun 26 2001 Florian La Roche +- add link from library major version number + +* Sun Jun 24 2001 Elliot Lee +- Bump release + rebuild. + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Tue Jun 27 2000 Nalin Dahyabhai +- FHS fixes +- fix undeclared function warnings from the new compiler +- fix URL + +* Fri Apr 07 2000 Trond Eivind Glomsrød +- switched to use /usr/share/dict/words + +* Tue Apr 06 1999 Preston Brown +- strip binaries + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 4) + +* Wed Jan 06 1999 Cristian Gafton +- build for glibc 2.1 + +* Sat May 09 1998 Prospector System +- translations modified for de, fr, tr + +* Tue Mar 10 1998 Cristian Gafton +- updated to 2.7 +- build shared libraries + +* Mon Nov 03 1997 Donnie Barnes +- added -fPIC + +* Mon Oct 13 1997 Donnie Barnes +- basic spec file cleanups + +* Mon Jun 02 1997 Erik Troan +- built against glibc