I am sponsoring this case for Jeff Trawick. It enables Apache (via APR) to
use OpenLDAP.
I'll make the contract between this case and PSARC/2008/507 available soon.
Template Version: @(#)sac_nextcase %I% %G% SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
1.1. Project/Component Working Name:
Apache and APR-Util Using OpenLDAP
1.2. Name of Document Author/Supplier:
Author: Jeff Trawick
1.3 Date of This Document:
21 February, 2009
4. Technical Description
2. Summary
2.1. Switch APR-Util to OpenLDAP
APR-Util is a support library used by Apache HTTP Server and
other applications. APR-Util provides limited abstractions
for LDAP libraries; it detects which libraries are available,
determines their capabilities, and provides helper functions
for more complex features such as configuring SSL certificates
for communication with the LDAP server. Applications are
expected to make direct calls to portable functions in the
underlying LDAP library and use APR-Util-specific calls for
non-portable operations.
APR-Util is most often used with OpenLDAP, though it does have
some support for a handful of other LDAP libraries, including
native Solaris LDAP. However, ldaps does not work with native
Solaris LDAP.
This project will change the APR-Util build configuration to
use OpenLDAP instead of native Solaris LDAP.
2.2 Switch Apache HTTP Server to OpenLDAP
Apache HTTP Server (Apache) uses the LDAP feature of APR-Util to
handle most LDAP details. (In fact it is the only publically
known application on any platform which uses that feature.)
It links to the LDAP libraries specified by APR-Util, includes
header files from paths specified by APR-Util, etc.; it uses
a mix of portable LDAP library calls and APR-Util calls to
implement Apache's LDAP features. Apache will not need to be
modified to build with OpenLDAP, but the APR-Util changes will
be reflected in different libraries and header files used by
Apache, and the LDAP calls made by Apache could change based
on compile-time tests for symbols in the APR-Util or LDAP header
files.
Note that the Apache documentation for mod_ldap at
http://httpd.apache.org/docs/2.2/mod/mod_ldap.html#settingcerts
states "SSL/TLS for the native Solaris LDAP libraries is not yet
supported. If required, install and use the OpenLDAP libraries
instead."
4. Technical Description:
4.1. Special library issues
4.1.1. Implications of the choice of LDAP SDK
The native Solaris LDAP and OpenLDAP SDKs implement some of the
same symbols. Any libraries loaded into the same process as
APR-Util and Apache must use the same LDAP SDK, or the behavior
is undefined.
Other users of the OpenSolaris-delivered OpenLDAP client library
should understand that the interfaces are Volatile and hence may
change in an incompatible manner in the future.
The LDAP SDK use in APR-Util is segregated to the separate
library apr_ldap.so which is loaded dynamically if APR-Util
LDAP functions are called, providing mitigation for a potential
user-provided APR-Util application which independently uses LDAP.
A list of packages within Nevada (b105) using APR-Util are shown
below, along with their use of LDAP:
i. Apache (and its commands) in SUNWapch22
This currently uses Solaris libldap, but that will be changed
by this project via the APR-Util build changes.
ii. mod_perl's APR.so, also packaged within SUNWapch22
and
iii. Subversion commands and libraries in SUNWsvn, Subversion
Perl and Python interfaces in SUNWsvn-python
These all use APR-Util but use neither the APR-Util LDAP
interfaces nor the Solaris LDAP interfaces.
Thus, the other applications in Nevada which use APR-Util will
not be negatively impacted by this change.
Special note about APR and Solaris LDAP:
Any application which uses APR-Util (libaprutil-1.so) also uses
APR (libapr-1.so). libapr-1.so has an unused reference to
libldap.so via another Solaris library it uses. Thus, any
application which uses APR-Util has an unused reference to
libldap.so. The packages in Nevada using APR-Util, listed above,
were checked with ldd -u to confirm that they did not use
libldap.so (other than Apache, which is changed with this
project).
4.1.2. Special OpenLDAP reentrancy considerations
OpenLDAP provides reentrant builds of the LDAP client functions
in libldap_r-2.4.so, and non-reentrant builds in libldap-2.4.so.
Because APR-Util supports threaded applications, it will use the
reentrant build.
Traditionally this distinction between libldap vs. libldap_r has
been a problem, particularly with applications like Apache which
have a plugin architecture which leads to unanticipated
combinations of code in the same address space. If APR-Util (and
thus Apache) uses the reentrant build and some Apache module uses
a library which uses the non-reentrant build, it is undefined
which build will actually be used.
Some distributors of OpenLDAP solve this problem by providing only
the reentrant build of the library, and pointing libldap to the
reentrant build. Because the potential problem has not been
avoided on OpenSolaris, a restriction for any applications or
libraries which may also use OpenLDAP in conjunction with APR-Util
is that they use the reentrant build.
4.1.3. Existing reference to native Solaris LDAP in libraries
used by Apache
libapr-1.so (APR, used by Apache and APR-Util) indirectly
references libldap.so, but ldd reports that libldap.so is an
unused dependency.
4.2. Bug/RFE Number(s):
6778978 ldaps causes Apache to segfault
6798092 APR-Util should use OpenLDAP instead of native Solaris LDAP
4.5. Interfaces:
This affects both APR-Util and Apache.
Imported Interfaces removed (no longer being imported):
NAME STABILITY NOTES
----------------------------------------------------------------------
LDAP Evolving PSARC/1997/276 et seq.
New Imported Interfaces:
NAME STABILITY NOTES
----------------------------------------------------------------------
OpenLDAP Volatile PSARC/2008/507
A contract for consuming the Volatile OpenLDAP interfaces from
PSARC/2008/507 will signed as part of this case proceedings.
4.6. Doc Impact:
Web Stack documentation should indicate that Apache and APR-Util
use the OpenLDAP SDK.
(The important detail of which LDAP SDK is utilized has been
omitted from the documentation in previous releases.)
4.6.1. Implications for Apache configuration
Refer users to the OpenLDAP-specific details for configuring ldaps
connections at
http://httpd.apache.org/docs/2.2/mod/mod_ldap.html#settingcerts
If practical, include within the documentation a sample LDAP
configuration showing ldaps connections to a directory server.
4.6.1. Implications for libraries that can be loaded into Apache
or other processes with APR-Util
State that Apache and APR-Util use the OpenLDAP SDK, and
specifically the libraries libldap_r-2.4.so and liblber-2.4.so, so
any other LDAP libraries cannot be loaded into Apache or other
processes with APR-Util.
Note also that the OpenLDAP interfaces in OpenSolaris are
classified as Volatile and may change in an incompatible
manner in future updates or releases.
4.7. Admin/Config Impact:
APR-Util does not have an administration interface.
Non-SSL LDAP configurations of Apache will continue to work as-is.
SSL LDAP connections can now be configured.
4.10. Packaging & Delivery:
// What packages, clusters or metaclusters does this proposal
// impact? What is its impact on install/upgrade?
APR-Util's LDAP interface is package SUNWapu13-ldap.
SUNWapu13-ldap will be changed to add a dependency on SUNWopenldap.
Native Solaris LDAP is part of SUNWcsl, which will continue to be
a dependency of SUNWapu13-ldap.
4.12. Dependencies:
// List all dependencies that this proposal has on other
// proposals, components or products. Include interface
// specifics above in the interfaces section; list component
// version requirements here.
OpenLDAP 2.4.x in package SUNWopenldap
(/usr/include/openldap/*.h, libldap_r-2.4.so, liblber-2.4.so)
6. Resources and Schedule
6.4. Steering Committee requested information
6.4.1. Consolidation C-team Name:
sfw
6.5. ARC review type: FastTrack
6.6. ARC Exposure: open