# 1.4.19

Release Date: 2019-10-22

- Fixed plugin registration for aeChildClasses.

# 1.4.18

Release Date: 2019-10-22

- Updated code causing SyntaxError with Python 3:
  - Avoid using type `long`.
  - Replaced ancient syntax when raising exceptions.
  - Renamed module web2ldap.ldaputil.async to web2ldap.ldaputil.asynch.
  - Avoid string literals starting like `ur''`.
  - Removed unused code.
- Added support for upcoming Æ-DIR attribute aeChildClasses.

# 1.4.17

Release Date: 2019-08-25

- Fixed lots of typos (thanks to Klemens).
- Pinned to use ldap0 0.2.7.
- More code-cleaning.

# 1.4.16

Release Date: 2019-07-15

- Changed path names for trusted CA certs in default configuration.
- Dropped dependency on certifi module.

# 1.4.15

Release Date: 2019-07-13

- Simplified syntax checking in Æ-DIR plugin class for attribute memberUid.
- New plugin class DerefDynamicDNSelectList is meant as drop-in replacement for DynamicDNSelectList which improves caching behaviour with multi-valued attributes. This requires the LDAP server to support the Dereference Control.
- Various Æ-DIR plugin classes now use new base class DerefDynamicDNSelectList.

# 1.4.14

Release Date: 2019-07-09

- Æ-DIR plugin classes for attributes member, memberUid and rfc822MailMember now empties attribute value list in case aeStatus is set to archived (2).

# 1.4.13

Release Date: 2019-06-26

- Some more code-cleaning.
- Fixed plugin class DHCPConfigStatement to generate correct links for searching dNSZone entries.
- A new consolidated function to determine remote hostname or address avoids to accept an empty string.
- Removed wrong Type= lines from example systemd units.

# 1.4.12

Release Date: 2019-06-02

- Fixed regression when displaying login form after failed SASL/GSSAPI bind.
- Code changes after scanning with bandit:
  - Removed non-functional use of pickle module.
  - Module defusedxml is now optionally used for parsing XML attribute values to avoid various attack vectors.

# 1.4.11

Release Date: 2019-05-22

- Fixed plugin class for aRecord to generate correct filter string for searching PTR RRs.

# 1.4.10

Release Date: 2019-03-25

- Fixed setting env var LDAPNOINIT=1 early enough by later import of sub-module.

# 1.4.9

Release Date: 2019-03-20

- Added support for new Æ-DIR attribute aeRequires in aeSrvGroup entries.

# 1.4.8

Release Date: 2019-02-22

- Correctly display a form field for attribute memberUid in case no LDAP URL is set in plugin class attribute for searching members.

# 1.4.7

Release Date: 2019-02-16

- Correctly ignore empty DNS SRV RR when handling ldap0.NO_SUCH_OBJECT for dc-style DNs.

# 1.4.6

Release Date: 2019-02-14

- Fixed regression when displaying input form when for chasing referrals.
- Added some simple LDIF templates for MS AD.

# 1.4.5

Release Date: 2019-02-13

- Regression fix for AD-specific plugin class for objectSID.
- Now multiple values are accepted for form parameter read_expandattr. So the user can manually choose which attributes are displayed with expanded value lists.

# 1.4.4

Release Date: 2019-02-11

- Fixed superfluous session creation.
- More CSS tuning for varying display size based on CSS media queries.
- Submit button in add/modify input form has now text [Save] especially to distinguish it from [Modify] in context menu.
- Some classes now use base class LogHelper for output of class-/instance-specific log prefix.

# 1.4.3

Release Date: 2019-02-06

- More small UI changes and CSS tuning.
- Display the parent DN in LDIF template select screen if no matching template was found for parent's object classes.

# 1.4.2

Release Date: 2019-01-31

- CSS tuning to make user interface look more breezy, save horizontal space and more elastic rendering depending on current window width.
- Dropped displaying operational attributes with extra HTML template because it looked very confusing and could not be improved. You have to remove host-/site-specific the obsolete parameter read_operationalattrstemplate from your config module web2ldapcnf.hosts.
- Stripped down basic search form for Æ-DIR.
- Stripped displayed attributes from inputform_supentrytemplate for Æ-DIR because the multiple lines were confusing.
- Fixed assertion raised because of missing encoding step in plugin class for aeNwDevice.

# 1.4.1

Release Date: 2019-01-28

- Fixed plugin class Integer not to use hard-coded regex pattern when creating input field.
- Fixed plugin class for Æ-DIR attribute aeStatus to gracefully handle empty value string in attribute aeNotBefore.

# 1.4.0

Release Date: 2019-01-27

## Installation and configuration changes

- Site-specific configuration is now checked during startup for valid option names and their type. So you have to clean up your old configuration not to contain any obsolete parameter.
- Mandates update of module ldap0.
- Dropped external dependency on separate module package pyweblib because it is now partially shipped as internal package web2ldap.web.
- Configuration parameter web2ldapcnf.hosts.ldap_uri_list now must contain list of 2-tuples of Unicode strings.
- Because of internal API changes custom plugins have to be changed.
- Some renaming in CSS identifiers to save network bandwidth when displaying many search results. Thus custom CSS files must be updated.

## New features/enhancements

- Web2LDAPConfig instances defined and web2ldapcnf.hosts now have a method `.clone()` which gives even more flexibility for defining configuration items.
- New site-specific configuration parameter binddn_mapping is used for specifying bind DN mappings with an LDAP URL. Especially it allows statically derived bind DNs without LDAP search.
- [ConnInfo] shows max. 30 of the last search bases used before.
- Bulk-copying entries is now more efficient.
- All DN information is now always request-specific (formerly session-specific). This improves user experience when navigating in multiple browser tabs.
- HTML5 attribute pattern is set for <input> tags in case the plugin class has class attribute input_pattern.
- Heavy code-cleaning including fixing of various minor bugs:
  - pylint score (default config) is now 8.16 which is a huge gain in code quality especially compared to -16.33 of last release 1.3.38
  - Compliance to PEP-8
  - Changed some optional imports to mandatory dependencies
  - Handling the password policy response controls (see draft-behera-ldap-password-policy) is now done within module package ldap0.
  - Class ldap0.schema.models.SchemaElementOIDSet used wherever possible.
- Module logging used instead of sys.stderr.write() for writing log messages.
  - Improved exception logging.
  - Debug logging of form class registrations.
  - Debug logs and warnings during plugin registrations.
  - Debug logging of session handling.
  - System environment, Python interpreter, etc.

## Fixes

- Tree viewer now correctly uses configuration parameters dit_*.
- Removed some dangerous mutable default values used for key-word arguments.
- Many small fixes along code-cleaning which are not worth to be mentioned separately.

## Dropped features

- Dropped support for running on Windows.
- Removed the separate `web2ldap-checkinst` console script. Module requirements checking is now done via pip installation anyway and some installation information is logged during startup.
- Removed configuration parameter web2ldapcnf.sec_sslacceptedciphers.
- Removed site-specific configuration parameter search_tablistattrs because the generic parameter search_tdtemplate is much more useful anyway.
- Replaced site-specific configuration parameter binddnsearch by more flexible parameter binddn_mapping.
- Hunked out non-functional code for handling "Authorization Identity Request and Response Controls" (see RFC 3829).
- Dropped login form parameter login_filterstr. The user can search for an entry and use link [Bind as] from the context menu.
- Removed obsolete X.509 certificate extension parser classes:
  - web2ldap.mspki.vendorext.VerisignCZAG
  - web2ldap.mspki.nsext
- Removed the tool tips from [Read] link of displayed search results because tool tips in general are not helpful for better UX. Better performance, less network traffic is much more important.
- For now all german HTML templates (files `etc/web2ldap/templates/*.html.de`) and select list properties (files `etc/web2ldap/properties/*.properties.de`) were removed because a language mix does not look nice to beginners.