Cracklib password policy plugin for LdapCherry

https://travis-ci.org/kakwa/ldapcherry-ppolicy-cracklib.svg?branch=master Number of PyPI downloads PyPI version Documentation Status
Doc:Documentation on ReadTheDoc
Dev:Source code on GitHub
PyPI:Package on Pypi
Author:Pierre-Francois Carpentier - copyright © 2015


From pypi:

pip install lcppolicy_cracklib

From sources:

$ python setup.py install



In ldapcherry.ini:


# password policy module
ppolicy.module = 'lcppolicy_cracklib'
# minimum password length (optional default: 0)
min_length = 10
# minimum number of upper case characters (optional default: 0)
min_upper = 1
# minimum number of lower case characters (optional default: 0)
min_lower = 2
# minimum number of digits (optional default: 0)
min_digit = 1
# minimum number of non alphanumeric characters (optional default: 0)
min_other = 1
# path to dictionary (optional)
dict_path = '/var/cache/cracklib/cracklib_dict'

Enable module

To enable this module, set ppolicy.module to lcppolicy_cracklib in section [ppolicy] of ldapcherry.ini:


ppolicy.module = 'lcppolicy_cracklib'


This plugin takes the following parameters in ldapcherry.ini (all the parameters are optional):

Parameter Section Description Values Comment
min_length ppolicy Minimum length of password integer Default: 0
min_upper ppolicy Minimum number of upper case characters Integer Default: 0
min_digit ppolicy Minimum number of digit characters Integer Default: 0
min_lower ppolicy Minimum number of lower case characters Integer Default: 0
min_other ppolicy Minimum number of non alphanumeric characters Integer Default: 0
dict_path ppolicy Path to dictionary Path

Default: default cracklib dictionary, usually ‘/var/cache/cracklib/cracklib_dict’.

If pointing, for example, to /path/dict, then /path/dict.hwm, /path/dict.pwd and /path/dict.pwi must exist.

Custom dictionary

To build custom cracklib dictionaries:

  1. Get one or many word list files (for example here: http://www.winedt.org/Dict/).
  2. If necessary, encode it to UTF-8.
  3. Generate the cracklib dictionary.


# Just create a work directory
$ mkdir dict/
$ cd dict/

# Recover and unzip the word list
$ wget http://www.winedt.org/Dict/unicode/fr.zip
$ unzip fr.zip

# UTF-8 encoding
$ file *
fr.dic: Little-endian UTF-16 Unicode text
fr.txt: ASCII text, with CRLF line terminators
fr.zip: Zip archive data, at least v2.0 to extract
$ iconv -f UTF-16 -t UTF-8 fr.dic >fr2.dic

# Create the dictionary
$ cat fr2.dic | cracklib-packer mydict

# Result
$ ls mydict*
mydict.hwm  mydict.pwd  mydict.pwi


Most distributions already provide dictionaries and a cron script to update cracklib dictionary.

For example in Debian/Ubuntu:

# Search available dictionary
$ apt-cache search 'dictionary' | egrep '^w'

# Take a look at the cron script and configuration
$ cat /etc/cron.daily/cracklib-runtime
$ cat /etc/cracklib/cracklib.conf



  • initial version
Fork me on GitHub