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:
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.
The mod_ldap_userdir source repository is also available.
You are strongly encouraged to read up on the LDAP config-file directives in the DIRECTIVES file, included with the distribution. At minimum, you'll need to have LDAPUserDir, LDAPUserDirDNInfo, and LDAPUserDirBaseDN configuration directives in your httpd.conf.
A set of basic mod_ldap_userdir configuration directives would look like:LDAPUserDir public_html
Of course, you will need to update these configuration directives with the proper values for your environment.
v1.1.19: * Avoid a segfault when LDAPUserDirUseTLS is enabled, and the LDAPUserDirUseTLS configuration directive is specified later in the configuration than LDAPUserDirServerURL. v1.1.18: * 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. v1.1.17: * 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://127.0.0.1/??sub ldap://172.16.0.1/??sub * Portability fix: don't use ldap_initialize() and ldap_unbind_ext_s() unless we're building against the corresponding versions of the OpenLDAP SDK. * 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 <email@example.com> for mentioning this issue. v1.1.16: * 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. v1.1.15: * Fix segfault when LDAPUserDirDNInfo isn't specified (implicitly specifying anonymous binds) with modern LDAP SDKs (LDAP_API_VERSION >= 2000). v1.1.14: * 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. v1.1.13: * 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 <firstname.lastname@example.org>. * 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. v1.1.12: * 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' UID/GIDs. * 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. v1.1.11: * 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 <email@example.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 <firstname.lastname@example.org> for the patch. * The previous change also removes the LDAPUserDirHomeAttribute directive in favor of the new LDAPAttribute directive. To migrate your previous configuration, change: LDAPUserDirHomeAttribute username to: 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 <email@example.com> for the bug report. * No longer require GNU make. v1.1.10: * Apache 2.2 support. Thanks to Hiroto Kagotani <firstname.lastname@example.org> and Takeshi Inagaki <email@example.com> for reporting this. * Refined LDAP over TLS support. Thanks to Hiroto Kagotani <firstname.lastname@example.org> and Takeshi Inagaki <email@example.com> for reporting problems when building in non-TLS mode. * Sun/Solaris LDAP SDK support. Thanks to Takeshi Inagaki <firstname.lastname@example.org> for reporting this. * Better sanity checking of the timeout value. Thanks to Italo Foppiano Reyes <email@example.com> for reporting a problem with this. v1.1.9: * Add LDAPUserDirServerURL directive, which takes a single LDAP URL argument. Suggested by Fabien Picarougne <firstname.lastname@example.org>. * 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 <email@example.com>. * 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. v1.1.8: * Add caching support (with accompanying LDAPUserDirCacheTimeout directive), reducing the number of LDAP searches that need to be performed. v1.1.7: * 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 <firstname.lastname@example.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. v1.1.6: * Fix Apache 2-ism that crept into v1.1.5. Tohru Murakami <email@example.com> and Jerome Spenlehauer <firstname.lastname@example.org>. v1.1.5: * Add suexec hooks for Apache 2, contributed by Marc Lewis <email@example.com>. v1.1.4: * Fixed bug that prevented startup if LDAPUserDirSearchScope was configured. v1.1.3: * Fixed Apache2-isms that crept into 1.1.2. v1.1.2: * Update the mod_ldap_userdir version added by ap_add_version_component. * Build fixes for Netware and Win32 by Guenter Knauf <firstname.lastname@example.org>. * Support for wildcards and redirection by Shyokou Ouyou <email@example.com>. v1.1.1 * Compilation fix for platforms that don't define TRUE in their headers. v1.1 * 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 support. * 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. v1.0.1 * Fixed a couple hard-coded references to the "homeDirectory" attr. (Thanks to Christian Zoffoli [czoffoli at xmerlin dot org] for pointing this out.) v1.0: * 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.