I'm no longer actively maintaining mod_ldap_userdir; it is orphaned. If you have some programming experience and would like to take over maintainership, I'd be happy to answer questions and provide initial guidance, and make all of the web site's content available.

mod_ldap_userdir, written by John Morrissey, is a module that enables the Apache web server to look up user home directories (for /~user URLs) from an LDAP directory.


mod_ldap_userdir is licensed under the GPL, with an exception to allow linking against OpenSSL:

  1. The linking of mod_ldap_userdir with OpenSSL is allowed. You may distribute the resulting executable without including the source code for OpenSSL in the source distribution.

Tested Platforms

mod_ldap_userdir should build and run on just about any Unix or Unix-like platform. It is agnostic when it comes to LDAP servers and SDKs, so it should be able to link against and access just about anything you have.

Current Release

The mod_ldap_userdir source repository is also available.

Previous Relases

Installation Instructions:


* Avoid a segfault when LDAPUserDirUseTLS is enabled, and the
  LDAPUserDirUseTLS configuration directive is specified later in
  the configuration than LDAPUserDirServerURL.

* Remove Apache 1.3.x support. Apache 1.3.x has been end of life since
  January 2010.
* Use remote path to the source tarball in the included .spec, which
  makes 'rpmbuild -tb' work on the source tarball.

* Implement an internal failover mechanism instead of relying on the LDAP
  SDK's built-in failover (if any). Fixes failover regression introduced
  in v1.1.13 when ldap_initialize() was first used.
* Multiple LDAP URL arguments may now be passed to LDAPUserDirServerURL:

  LDAPUserDirServerURL ldap:// ldap://
* Portability fix: don't use ldap_initialize() and ldap_unbind_ext_s()
  unless we're building against the corresponding versions of the OpenLDAP
* Updated documentation to mention using "." (the current directory) when
  the user's home directory itself should be exposed, instead of a
  subdirectory below it. Thanks to Peter Tselios <tselios.petros@gmail.com>
  for mentioning this issue.

* TLS support was not being enabled when the --with-tls option was
  explicitly passed to configure. Replace --with-tls with the more
  correct option --enable-tls.

* Fix segfault when LDAPUserDirDNInfo isn't specified (implicitly specifying
  anonymous binds) with modern LDAP SDKs (LDAP_API_VERSION >= 2000).

* Avoid segfault attempting to free() uninitialized pointer when a user
  does not have a uid or homeDirectory attr, one or both of those attrs
  are not readable by the DN configured by LDAPUserDirDNInfo, or an
  out-of-memory condition is encountered while fetching any LDAP attribute.

* Missed ldap_init() -> ldap_initialize() change when making changes to
  comply with draft-ietf-ldapext-ldap-c-api-04. Older versions may segfault
  on 64-bit systems when mod_ldap_userdir is built with more recent OpenLDAP
  SDK headers.
* Previous versions enabled TLS when the ldaps:// scheme was specified in
  LDAPUserdirServerURL URL. This behavior was incorrect, since ldaps://
  indicates LDAP over SSL (port 636 by default) should be enabled. If you
  wish to continue using TLS, you must modify your configuration to specify
  the ldap:// scheme in the LDAPUserdirServerURL URL and add the directive
  'LDAPUserDirUseTLS on' to your configuration.
* LDAPUserDirUseTLS now throws a configuration error when TLS is enabled and
  the ldaps:// scheme is specified in the LDAPUserdirServerURL URL.
* Fixes to bugs in suexec support submitted by Witold Baryluk
* Avoid infinite loop when LDAPUserDirDNInfo bind DN doesn't have access to
  one or more LDAP attributes.
* Logging improvements
  * Don't complain about inaccessible [ug]idNumber values when reading the
    user's LDAP entry, since we might not be using suexec.
  * Complain in suexec handler if we found the user's LDAP entry but it
    was missing [ug]idNumber values.

* Updated the suexec hooks to fetch the user's UID and GID (uidNumber and
  gidNumber attributes, respectively) from the LDAP directory instead of
  relying on Apache to fetch them for us. This allows suexec access for
  LDAP-only users with no OS support required for looking up these users'
* Removed the LDAPUserDirCacheTimeout directive from the Apache 1.x build. 
  Caching is only supported with Apache 2.0 and later, so this directive was
  being silently ignored under Apache 1.x. If you run Apache 1.x, you *must*
  remove the LDAPUserDirCacheTimeout directive from your configuration.
* Fix handling of the cache timeout, so setting it to 0 seconds (to disable
  caching) now works.
* Use non-deprecated LDAP API functions if the LDAP SDK is new enough to
  comply with draft-ietf-ldapext-ldap-c-api-04.

* Add LDAPProtocolVersion directive to specify the LDAP protocol version
  to use. The LDAP protocol version now defaults to LDAPv3 instead of
  LDAPv2. Thanks to Aaron Brace <abrace@metrocastcablevision.com>
  for the patch.
* Fetch the user's canonical username (as returned by the LDAP directory)
  to pass to suEXEC instead of passing the username as received in the URL.
  Thanks to Aaron Brace <abrace@metrocastcablevision.com> for the
* The previous change also removes the LDAPUserDirHomeAttribute directive
  in favor of the new LDAPAttribute directive. To migrate your previous
  configuration, change:

    LDAPUserDirHomeAttribute username


    LDAPAttribute uid username

  More information on LDAPAttribute is in DIRECTIVES.
* Fix libldap/liblber autodetection when using --with-sdk-headers and/or
  --with-sdk-libdir configure options. Thanks to Daniel Lark
  <dlark@viaccess.net> for the bug report.
* No longer require GNU make.

* Apache 2.2 support. Thanks to Hiroto Kagotani <hiroto.kagotani@gmail.com>
  and Takeshi Inagaki <ts-inagaki@kmn.co.jp> for reporting this.
* Refined LDAP over TLS support. Thanks to Hiroto Kagotani
  <hiroto.kagotani@gmail.com> and Takeshi Inagaki <ts-inagaki@kmn.co.jp>
  for reporting problems when building in non-TLS mode.
* Sun/Solaris LDAP SDK support. Thanks to Takeshi Inagaki
  <ts-inagaki@kmn.co.jp> for reporting this.
* Better sanity checking of the timeout value. Thanks to Italo Foppiano
  Reyes <ifoppian@udec.cl> for reporting a problem with this.

* Add LDAPUserDirServerURL directive, which takes a single LDAP URL
  argument. Suggested by Fabien Picarougne
* Register a configuration merge handler so directives from the main
  server (outside a VirtualHost) are merged down and treated as overridable
  defaults inside VirtualHosts. Errant behavior reported by Alexander Perlis
* Fix building with Apache1.
* Build system improvements:
  * Build with LDAP TLS support automatically, if present.
  * Use proper build path to mod_ldap_userdir.so with Apache2 builds.
  * Improve autoconf usage.
  * Drop autoconf support for Netscape LDAP SDK. autoconf support for it was
    broken, and I can't find anyone still using it.

* Add caching support (with accompanying LDAPUserDirCacheTimeout directive),
  reducing the number of LDAP searches that need to be performed.

* Add LDAPUserDirHomeAttribute attribute instead of depending on a
  build-time change to switch the homeDirectory attribute's name, loosely
  based on code by O'Shaughnessy Evans <shaug@wumpus.org>.
* Now running module/child init handlers for Apache 2, too.
* Remove child exit handler; I can't find a good way to replicate this
  with Apache 2's hooks and it's not really necessary anyway, since the
  connection will be closed on child exit.

* Fix Apache 2-ism that crept into v1.1.5. Tohru Murakami
  <murakami-toru.nospam@nexs.nec.co.jp> and Jerome Spenlehauer

* Add suexec hooks for Apache 2, contributed by Marc Lewis

* Fixed bug that prevented startup if LDAPUserDirSearchScope was configured.

* Fixed Apache2-isms that crept into 1.1.2.

* Update the mod_ldap_userdir version added by ap_add_version_component.
* Build fixes for Netware and Win32 by Guenter Knauf <gk@gknw.de>.
* Support for wildcards and redirection by Shyokou Ouyou

* Compilation fix for platforms that don't define TRUE in their headers.

* Apache 2.x support. Thanks to Shane Boulter (sboulter at ariasolutions dot
  com) for providing an account with which I could implement Apache 2.x
* Improved build system.
* Got rid of dependency on ldap_build_filter(), which will fix builds against
  OpenLDAP 2.1.x, Novell eDirectory and a couple others.
* Postcard-ware licensing addition.

* Fixed a couple hard-coded references to the "homeDirectory" attr. (Thanks
  to Christian Zoffoli [czoffoli at xmerlin dot org] for pointing this out.)

* Initial revision of standalone module. mod_ldap_userdir includes the same
  functionality as apache-userdirldap 1.5 and adds TLS/SSL support for
  connections to the LDAP server.