1.3.0 - 2017-11-20 - Various improvements and cleanup
-----------------------------------------------------

This release driven primarily by https://bitbucket.org/jdufresne/.

- **Backwards incompatible**: Removed support for obsolete versions of
  Django (<=1.7, plus 1.9).

- Fix `#58`_: Delay saving new users as long as possible. This will allow
  :setting:`AUTH_LDAP_USER_ATTR_MAP` to populate required fields before creating
  a new Django user.

  ``LDAPBackend.get_or_create_user()`` is now
  :meth:`~django_auth_ldap.backend.LDAPBackend.get_or_build_user` to avoid
  confusion. The old name may still be overridden for now.

- Support querying by a field other than the username field with
  :setting:`AUTH_LDAP_USER_QUERY_FIELD`.

- New method
  :meth:`~django_auth_ldap.backend.LDAPBackend.authenticate_ldap_user()` to
  provide pre- and post-authenication hooks.

- Add support for Django 2.0.

.. _#58: https://bitbucket.org/illocution/django-auth-ldap/issues/58/


1.2.16 - 2017-09-30 - Minor fixes
---------------------------------

- Fix `#86`_: Better cache key sanitizing.

- Improved handling of LDAPError. A case existed where the error would not get
  caught while loading group permissions.

.. _#86: https://bitbucket.org/illocution/django-auth-ldap/issues/86/


1.2.15 - 2017-08-17 - Documentation improvements
------------------------------------------------

- Fix `#83`_: Improved documentation for finding the official repository and
  contributing.

.. _#83: https://bitbucket.org/illocution/django-auth-ldap/issues/83/


1.2.14 - 2017-07-24 - User DN caching
-------------------------------------

- Fix `#82`_: Under search/bind mode, the user's DN will now be cached for
  performance.

.. _#82: https://bitbucket.org/illocution/django-auth-ldap/issues/82/


1.2.13 - 2017-06-19 - Selective group mirroring
-----------------------------------------------

- Support selective group mirroring with :setting:`AUTH_LDAP_MIRROR_GROUPS` and
  :setting:`AUTH_LDAP_MIRROR_GROUPS_EXCEPT`.

- Fix `#73`_: Work around Django 1.11 bug with multiple authentication backends.

.. _#73: https://bitbucket.org/illocution/django-auth-ldap/issues/73/


1.2.12 - 2017-05-20 - Complex group queries
-------------------------------------------

- Support for complex group queries via
  :class:`~django_auth_ldap.config.LDAPGroupQuery`.


1.2.11 - 2017-04-22 - Testing and debugging cleanup
---------------------------------------------------

- Some more descriptive object representations.

- Improved tox.ini organization.


1.2.9 - 2017-02-14 - Fix python-ldap incompatibility
----------------------------------------------------

- Fix `#65`_: Ignore python-ldap documentation and accept
  :data:`ldap.RES_SEARCH_ENTRY` from :meth:`ldap.LDAPObject.result`.

.. _#65: https://bitbucket.org/illocution/django-auth-ldap/issues/65/


1.2.8 - 2016-04-18 - AUTH_LDAP_USER_ATTRLIST
--------------------------------------------

- Add :setting:`AUTH_LDAP_USER_ATTRLIST` to override the set of attributes
  requested from the LDAP server.


1.2.7 - 2015-09-29 - Python 3
-----------------------------

- Support Python 3 with `pyldap <https://pypi.python.org/pypi/pyldap>`_.


1.2.6 - 2015-03-29
------------------

- Performance improvements to group mirroring (from
  `Denver Janke <https://bitbucket.org/denverjanke>`_).

- Add :data:`django_auth_ldap.backend.ldap_error` signal for custom handling of
  :exc:`~ldap.LDAPError` exceptions.

- Add :data:`django_auth_ldap.backend.LDAPBackend.default_settings` for
  per-subclass default settings.


1.2.5 - 2015-01-30
------------------

- Fix interaction between :setting:`AUTH_LDAP_AUTHORIZE_ALL_USERS` and
  :setting:`AUTH_LDAP_USER_SEARCH`.


1.2.4 - 2014-12-28 - nisNetgroup support
----------------------------------------

- Add support for nisNetgroup groups (thanks to Christopher Bartz).


1.2.3 - 2014-11-18
------------------

- Fix `#50`_: Improved escaping for filter strings.

- Accept (and ignore) arbitrary keyword arguments to
  :meth:`~django_auth_ldap.backend.LDAPBackend.authenticate`.

.. _#50: https://bitbucket.org/illocution/django-auth-ldap/issue/50/


1.2.2 - 2014-09-22
------------------

- Include test harness in source distribution. Some package maintainers find
  this helpful.


1.2.1 - 2014-08-24
------------------

- More verbose log messages for authentication failures.


1.2 - 2014-04-10
----------------

- django-auth-ldap now provides experimental Python 3 support. Python 2.5 was
  dropped.

  To sum up, django-auth-ldap works with Python 2.6, 2.7, 3.3 and 3.4.

  Since python-ldap isn't making progress toward Python 3, if you're using
  Python 3, you need to install a fork::

      $ pip install git+https://github.com/rbarrois/python-ldap.git@py3

  Thanks to `Aymeric Augustin <https://myks.org/en/>`_ for making this happen.


1.1.8 - 2014-02-01
------------------

* Fix `#43`_: Update :class:`~django_auth_ldap.config.LDAPSearchUnion` to work for
  group searches in addition to user searches.

* Tox no longer supports Python 2.5, so our tests now run on 2.6 and 2.7 only.

.. _#43: https://bitbucket.org/illocution/django-auth-ldap/issue/43/


1.1.7 - 2013-11-19
------------------

* Bug fix: :setting:`AUTH_LDAP_GLOBAL_OPTIONS` could be ignored in some cases
  (such as :func:`~django_auth_ldap.backend.LDAPBackend.populate_user`).


1.1.5 - 2013-10-25
------------------

* Fix `#41`_: Support POSIX group permissions with no gidNumber attribute.

* Support multiple group DNs for \*_FLAGS_BY_GROUP.


.. _#41: https://bitbucket.org/illocution/django-auth-ldap/issue/41/


1.1.4 - 2013-03-09
------------------

* Add support for Django 1.5's custom user models.


1.1.3 - 2013-01-05
------------------

* Fix `#33`_: Reject empty passwords by default.

  Unless :setting:`AUTH_LDAP_PERMIT_EMPTY_PASSWORD` is set to True,
  LDAPBackend.authenticate() will immediately return None if the password is
  empty. This is technically backwards-incompatible, but it's a more secure
  default for those LDAP servers that are configured such that binds without
  passwords always succeed.

* Fix `#39`_: Add support for pickling LDAP-authenticated users.


.. _#33: https://bitbucket.org/illocution/django-auth-ldap/issue/33/
.. _#39: https://bitbucket.org/illocution/django-auth-ldap/issue/39/


.. vim: ft=rst nospell tw=80
