SHA256
1
0
forked from pool/dhcp
dhcp/dhcp-3.0.5-ldap-patch-referrals.dif

108 lines
3.4 KiB
Plaintext

--- includes/dhcpd.h
+++ includes/dhcpd.h 2007/01/24 13:50:54
@@ -462,6 +462,7 @@
# define SV_LDAP_METHOD 52
# define SV_LDAP_DEBUG_FILE 53
# define SV_LDAP_DHCP_SERVER_CN 54
+# define SV_LDAP_REFERRALS 55
#endif
#if !defined (DEFAULT_DEFAULT_LEASE_TIME)
--- server/ldap.c
+++ server/ldap.c 2007/01/24 14:25:16
@@ -55,6 +55,7 @@
*ldap_debug_file = NULL;
static int ldap_port = LDAP_PORT,
ldap_method = LDAP_METHOD_DYNAMIC,
+ ldap_referrals = -1,
ldap_debug_fd = -1;
static struct ldap_config_stack *ldap_stack = NULL;
@@ -532,6 +533,34 @@
return (ret);
}
+int
+ldap_rebind_cb (LDAP *ld, LDAP_CONST char *url, ber_tag_t request, ber_int_t msgid, void *parms)
+{
+ int ret;
+ LDAPURLDesc *ldapurl = NULL;
+ char *who = NULL, *pwd = NULL;
+
+ log_info("LDAP rebind to '%s'", url);
+ if ((ret = ldap_url_parse(url, &ldapurl)) != LDAP_SUCCESS)
+ {
+ log_error ("Error: Can not parse ldap rebind url '%s': %s",
+ url, ldap_err2string(ret));
+ return ret;
+ }
+
+ if (ldap_username != NULL || *ldap_username != '\0')
+ {
+ who = ldap_username;
+ pwd = ldap_password;
+ }
+
+ if ((ret = ldap_simple_bind_s (ld, who, pwd)) != LDAP_SUCCESS)
+ {
+ log_error ("Error: Cannot login into ldap server %s:%d: %s",
+ ldapurl->lud_host, ldapurl->lud_port, ldap_err2string (ret));
+ }
+ return ret;
+}
static void
ldap_start (void)
@@ -560,6 +589,7 @@
ldap_method = _do_lookup_dhcp_enum_option (options, SV_LDAP_METHOD);
ldap_debug_file = _do_lookup_dhcp_string_option (options,
SV_LDAP_DEBUG_FILE);
+ ldap_referrals = _do_lookup_dhcp_enum_option (options, SV_LDAP_REFERRALS);
#if defined (LDAP_CASA_AUTH)
if (!load_uname_pwd_from_miCASA(&ldap_username,&ldap_password))
@@ -611,6 +641,23 @@
ldap_err2string (ret));
}
+ if (ldap_referrals != -1)
+ {
+ if ((ret = ldap_set_option (ld, LDAP_OPT_REFERRALS, ldap_referrals ?
+ LDAP_OPT_ON : LDAP_OPT_OFF)) != LDAP_OPT_SUCCESS)
+ {
+ log_error ("Cannot %s LDAP referrals option: %s",
+ (ldap_referrals ? "enable" : "disable"),
+ ldap_err2string (ret));
+ }
+ }
+
+ if ((ret = ldap_set_rebind_proc(ld, ldap_rebind_cb, NULL)) != LDAP_SUCCESS)
+ {
+ log_error ("Warning: Cannot set ldap rebind procedure: %s",
+ ldap_err2string (ret));
+ }
+
#if defined (USE_SSL)
if ((ret = ldap_start_tls_s (ld, NULL, NULL)) != LDAP_SUCCESS)
log_error ("Warning: Cannot start TLS session to %s: %s",
--- server/stables.c
+++ server/stables.c 2007/01/24 13:52:54
@@ -492,6 +492,7 @@
{ "ldap-method", "Nldap-methods.", &server_universe, 52 },
{ "ldap-debug-file", "t", &server_universe, 53 },
{ "ldap-dhcp-server-cn", "t", &server_universe, 54 },
+ { "ldap-referrals", "f", &server_universe, 55 },
#else
{ "unknown-47", "X", &server_universe, 47 },
{ "unknown-48", "X", &server_universe, 48 },
@@ -501,8 +502,8 @@
{ "unknown-52", "X", &server_universe, 52 },
{ "unknown-53", "X", &server_universe, 53 },
{ "unknown-54", "X", &server_universe, 54 },
-#endif
{ "unknown-55", "X", &server_universe, 55 },
+#endif
{ "unknown-56", "X", &server_universe, 56 },
{ "unknown-57", "X", &server_universe, 57 },
{ "unknown-58", "X", &server_universe, 58 },