X Simple Authentication

  Implement support for simple LDAP authentication with username and password.
  This will take a change in the URI parser because the one provided by
  libldap (which we use to parse the URI right now) does not support embedded
  usernames and passwords in the URI.

* SASL Authentication Support (SER-392)
 
  The driver supports no authentication method at the moment, we should
  include support for simple authentication at least, but better SASL.

* TLS/SSL Support (SER-394)
  
  The driver should support encrypted connections to LDAP servers and some
  level of certificate validation. Currently there are no options or
  parameters to configure SSL/TLS certificates and keys to use.

* Copy Data from Config Data Structure (SER-395)

  The driver maintains an internal data structure that gets initialized from
  the supplied configuration file. The structure contains things like search
  filters and field mapping tables. The LDAP specific extension structures
  make a shallow copy of strings from the configuration data structure, they
  should rather copy the whole string so that they do not depend on the config
  structure.

X Implement Support For < And > Operators

  The LDAP search filter syntax (RFC4515) does not support < and > operators,
  only <= and >=. Currently the ldap driver simply uses <= instead of < and >=
  instead of >. We need a better implementation of this.

X Implement Support For Other Than str Parameters

X Escape Values of Parameters Injected Into the Search Filter

  see RFC4515 for description of escaping.

* Proper handling of NULL Values in Parameter (SER-396).

  Is it correct that parameters with NULL values are represented as paramName=
  in the filter?

* Use Asynchronous API Functions Instead of Synchronous (SER-397)

  This would be useful when we have support for multiple database drivers
  within one database context, then we could initiate multiple searches
  simultaneously without being blocked waiting for the result.

* Support For Multi-Value Attributes (SER-398)

  The module should support multi-value attributes. Objects containing
  attributes with multi-values should be returned as multiple records, each
  record containing one value of the multi-value attribute. Currently the
  module will report an error if it encounters a multi-value attribute.

* Support For Time Zones in Generalized Times (SER-399)
  
  The time conversion functions ignore time zones in GeneralizedTime
  attributes, this should be fixed.

* Handle Fractions of Seconds in Generalized Time (SER-400)
 
  There is no need to account fractions of seconds because we store time
  internally as time_t, but the parses should be able to skip fractions of
  seconds gracefully.

X Eliminate Use of All libldap Functions Marked as Deprecated (SER-401)

  We should eliminate the use of all functions that are marked as deprecated
  in the header field and remove LDAP_DEPRECATED define from all files.
  
X Support for Bool Attribute Types

  The module should be able to convert boolean attributes from the LDAP result
  into int fields.

X Support for Syntax Specification in the Config File

  There is no easy or portable way of retrieving syntaxes of attributes from
  the LDAP server, so it might be necessary to specify the syntax of
  attributes in the configuration file so that the module knows how to convert
  DB API fields into attribute values in command parameters.

X Support DB_NEQ Operator in Integer Attributes (SER-402)
 
  fld!=10 could be converted to the search filter as: (|(fld<=9)(fld>=11))

X Indicate Underflow/Overflow in Integer Attributes (SER-403)

  The operators < and > cannot be used in LDAP search filter, RFC4515 only
  supports <= and >= so we create the search filter like this: fld<10 ->
  (fld<=9) fld>10 -> (fld>=11) The module should issue an warning when the
  incremented/decremented field value overflows/underflows.

X Support for Older LDAP Libraries

  Older versions of the openldap client library might not contain
  LDAP_SCOPE_CHILDREN. We need to handle this case in a graceful manner and
  make sure that the module compiles.

* Check that we escape strings properly according to RFC4514 (SER-404)

* Support for server side comparison (SER-405)

  Support for server-side compare operation (could be used for authentication
  where the client would send the digest credentials and the server replies
  whether or not they are valid, similar to RADIUS digest authentication)

* Support for alias-dereferencing (SER-406)
 
  Aliases represent links to other entries or partitions of the namespace.
  When the distinguished name of an alias is used, the entry accessed is the
  entry to which the alias refers.  Alias dereferencing specifies if aliases
  are dereferenced-- that is, if the alias entry itself or the entry it points
  to is used. Aliases can be dereferenced or not when locating the base object
  and/or when searching under the base object.

* Support for handling of NULL Values in configuration parameters (SER-407)

  When an optional attribute is missing and also when the attribute is present
  but has no value; e.g. DN=NULL for anonymous authentication.

* Support for unsolicited notifications (SER-408)

  The only standardized unsolicited notification seems to be "notice of
  disconnection" so all that we can do is just log incoming asynchronous
  notifications from the server

* Support for asynchronous notifications (SER-409)

  Support for subscribing to notifications of changes in the DIT (optional)
  This could be useful for updating data that is cached in SER, such as the
  list of supported domains. This is a "nice to have" type of feature, so no
  time estimation for implementation.

* Support for automatic reconnects (SER-410)
  
  (check if we do it and if we do it properly).

* Support for referrals (SER-411)

  Implement support for referrals (in the ldap module, not in the libldap
  library).  Including loop detection.

* Support for time limited search operations (SER-412)

* Support for size limited search operations (SER-413)

