From: Graham Leggett
Date: Sat, 14 Sep 2013 15:02:10 +0000 (+0000)
Subject: mod_ldap: "LDAPReferrals off" does not disable LDAPReferrals feature.
X-Git-Tag: 2.4.7~227
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cb67f7294439a412360498cfb11aaa9cae3dab99;p=apache
mod_ldap: "LDAPReferrals off" does not disable LDAPReferrals feature.
Make "off" really "off" and add "unset" to take SDK defaults
trunk patch: http://svn.apache.org/r1517388
docs: http://svn.apache.org/r1518265
Submitted by: covener
Reviewed by: jim, humbedooh
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1523263 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/CHANGES b/CHANGES
index 58adc0b11e..3ab1a36156 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@
Changes with Apache 2.4.7
+ *) mod_ldap: Change "LDAPReferrals off" to actually set the underlying LDAP
+ SDK option to OFF, and introduce "LDAPReferrals default" to take the SDK
+ default, sans rebind authentication callback.
+ [Jan Kaluza ]
+
*) core: Log a message at TRACE1 when the client aborts a connection.
[Eric Covener]
diff --git a/STATUS b/STATUS
index b94d2aabab..ae86d7d18f 100644
--- a/STATUS
+++ b/STATUS
@@ -145,14 +145,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
+1: covener, jim, humbedooh
- * mod_ldap: "LDAPReferrals off" does not disable LDAPReferrals feature.
- Make "off" really "off" and add "unset" to take SDK defaults
- trunk patch: http://svn.apache.org/r1517388
- docs: http://svn.apache.org/r1518265
- 2.4.x patch: trunk works
- +1: covener, jim, humbedooh
-
-
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
diff --git a/docs/manual/mod/mod_ldap.xml b/docs/manual/mod/mod_ldap.xml
index 3f6e034968..b6c7022d77 100644
--- a/docs/manual/mod/mod_ldap.xml
+++ b/docs/manual/mod/mod_ldap.xml
@@ -507,19 +507,40 @@ valid
LDAPReferrals
Enable referral chasing during queries to the LDAP server.
-LDAPReferrals On|Off
+LDAPReferrals On|Off|default
LDAPReferrals On
directory.htaccess
AuthConfig
Some LDAP servers divide their directory among multiple domains and use referrals
- to direct a client when a domain boundary is crossed. By setting LDAPReferrals On
- referrals will be chased (setting it to off causes referrals to be ignored). The directive
- LDAPReferralHopLimit
works in conjunction with this directive to limit the
- number of referral hops to follow before terminating the LDAP query. When referral processing
- is enabled client credentials will be provided, via a rebind callback, for any LDAP server
- requiring them.
+ to direct a client when a domain boundary is crossed. This is similar to a HTTP redirect.
+ LDAP client libraries may or may not chase referrals by default. This directive
+ explicitly configures the referral chasing in the underlying SDK.
+
+
+ LDAPReferrals takes the takes the following values:
+
+ - "on"
+ -
When set to "on", the underlying SDK's referral chasing state
+ is enabled, LDAPReferralHopLimit is used to
+ override the SDK's hop limit, and an LDAP rebind callback is
+ registered.
+ - "off"
+ -
When set to "off", the underlying SDK's referral chasing state
+ is disabled completely.
+ - "default"
+ -
When set to "default", the underlying SDK's referral chasing state
+ is not changed, LDAPReferralHopLimit is not
+ used to overide the SDK's hop limit, and no LDAP rebind callback is
+ registered.
+
+
+
+ The directive LDAPReferralHopLimit
works in conjunction with
+ this directive to limit the number of referral hops to follow before terminating the LDAP query.
+ When referral processing is enabled by a value of "On", client credentials will be provided,
+ via a rebind callback, for any LDAP server requiring them.
diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c
index 7c6a5e300b..93a520cd89 100644
--- a/modules/ldap/util_ldap.c
+++ b/modules/ldap/util_ldap.c
@@ -60,6 +60,7 @@
#endif
#define AP_LDAP_HOPLIMIT_UNSET -1
+#define AP_LDAP_CHASEREFERRALS_SDKDEFAULT -1
#define AP_LDAP_CHASEREFERRALS_OFF 0
#define AP_LDAP_CHASEREFERRALS_ON 1
@@ -364,7 +365,7 @@ static int uldap_connection_init(request_rec *r,
ldap_option = ldc->deref;
ldap_set_option(ldc->ldap, LDAP_OPT_DEREF, &ldap_option);
- if (ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
+ if (ldc->ChaseReferrals != AP_LDAP_CHASEREFERRALS_SDKDEFAULT) {
/* Set options for rebind and referrals. */
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, APLOGNO(01278)
"LDAP: Setting referrals to %s.",
@@ -384,7 +385,9 @@ static int uldap_connection_init(request_rec *r,
uldap_connection_unbind(ldc);
return(result->rc);
}
+ }
+ if (ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
if ((ldc->ReferralHopLimit != AP_LDAP_HOPLIMIT_UNSET) && ldc->ChaseReferrals == AP_LDAP_CHASEREFERRALS_ON) {
/* Referral hop limit - only if referrals are enabled and a hop limit is explicitly requested */
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, APLOGNO(01280)
@@ -2536,15 +2539,25 @@ static const char *util_ldap_set_connection_timeout(cmd_parms *cmd,
static const char *util_ldap_set_chase_referrals(cmd_parms *cmd,
void *config,
- int mode)
+ const char *arg)
{
util_ldap_config_t *dc = config;
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server, APLOGNO(01311)
- "LDAP: Setting referral chasing %s",
- (mode == AP_LDAP_CHASEREFERRALS_ON) ? "ON" : "OFF");
+ "LDAP: Setting referral chasing %s", arg);
- dc->ChaseReferrals = mode;
+ if (0 == strcasecmp(arg, "on")) {
+ dc->ChaseReferrals = AP_LDAP_CHASEREFERRALS_ON;
+ }
+ else if (0 == strcasecmp(arg, "off")) {
+ dc->ChaseReferrals = AP_LDAP_CHASEREFERRALS_OFF;
+ }
+ else if (0 == strcasecmp(arg, "default")) {
+ dc->ChaseReferrals = AP_LDAP_CHASEREFERRALS_SDKDEFAULT;
+ }
+ else {
+ return "LDAPReferrals must be 'on', 'off', or 'default'";
+ }
return(NULL);
}
@@ -3076,9 +3089,9 @@ static const command_rec util_ldap_cmds[] = {
"Specify the LDAP socket connection timeout in seconds "
"(default: 10)"),
- AP_INIT_FLAG("LDAPReferrals", util_ldap_set_chase_referrals,
+ AP_INIT_TAKE1("LDAPReferrals", util_ldap_set_chase_referrals,
NULL, OR_AUTHCFG,
- "Choose whether referrals are chased ['ON'|'OFF']. Default 'ON'"),
+ "Choose whether referrals are chased ['ON'|'OFF'|'DEFAULT']. Default 'ON'"),
AP_INIT_TAKE1("LDAPReferralHopLimit", util_ldap_set_referral_hop_limit,
NULL, OR_AUTHCFG,