LDAP Patch
S Kalyanasundaram
skalyanasundaram at novell.com
Mon Jan 21 03:40:13 UTC 2008
> I would like to have a look at it, sounds interesting. But we are using
> Ubuntu and Cent OS - could you please provide the diffs ?
Here it is, You should be able to apply on top of
http://home.ntelos.net/~masneyb/dhcp-3.0.5-ldap-patch without any
problem.
--- server/ldap.c
+++ server/ldap.c 2007/03/01 11:22:25
@@ -1121,8 +1121,8 @@
}
while (ldap_stack != NULL &&
- (ldap_stack->ldent == NULL ||
- (ldap_stack->ldent = ldap_next_entry (ld, ldap_stack->ldent))
== NULL))
+ (ldap_stack->ldent == NULL || ( ldap_stack->processed &&
+ (ldap_stack->ldent = ldap_next_entry (ld, ldap_stack->ldent))
== NULL)))
{
if (ldap_stack->close_brace)
{
@@ -1257,9 +1257,9 @@
{
char **objectClass, *dn;
struct ldap_config_stack *entry;
- LDAPMessage * ent, * res;
+ LDAPMessage *ent, *res, *entfirst, *resfirst;
int i, j, ignore, found;
- int ret;
+ int ret, parsedn = 1;
if (ld == NULL)
ldap_start ();
@@ -1271,6 +1271,7 @@
"objectClass")) == NULL)
return;
+ entry->processed = 1;
ignore = 0;
found = 1;
for (i=0; objectClass[i] != NULL; i++)
@@ -1331,18 +1332,32 @@
LDAP_BUFFER_SIZE-1, NULL);
dn = ldap_get_dn (ld, entry->ldent);
-
+ if (dn == NULL)
+ {
+ ldap_stop();
+ return;
+ }
#if defined(DEBUG_LDAP)
- if (dn != NULL)
- log_info ("Found LDAP entry '%s'", dn);
+ else
+ {
+ log_info ("Found LDAP entry '%s'", dn);
+ }
#endif
- if (dn == NULL ||
- (ret = ldap_search_s (ld, dn, LDAP_SCOPE_ONELEVEL,
"objectClass=*",
+ if ((ret = ldap_search_s (ld, dn, LDAP_SCOPE_ONELEVEL,
"(!(|(|(objectClass=dhcpTSigKey)(objectClass=dhcpClass))
(objectClass=dhcpFailOverPeer)))",
NULL, 0, &res)) != LDAP_SUCCESS)
{
- if (dn)
- ldap_memfree (dn);
+ ldap_memfree (dn);
+
+ ldap_stop();
+ return;
+ }
+
+ if ((ret = ldap_search_s (ld, dn, LDAP_SCOPE_ONELEVEL,
"(|(|(objectClass=dhcpTSigKey)(objectClass=dhcpClass))
(objectClass=dhcpFailOverPeer))",
+ NULL, 0, &resfirst)) != LDAP_SUCCESS)
+ {
+ ldap_memfree (dn);
+ ldap_msgfree (res);
ldap_stop();
return;
@@ -1350,17 +1365,32 @@
ldap_memfree (dn);
- if ((ent = ldap_first_entry (ld, res)) != NULL)
+ ent = ldap_first_entry(ld, res);
+ entfirst = ldap_first_entry(ld, resfirst);
+
+ if (ent == NULL && entfirst == NULL)
+ {
+ parse_external_dns (entry->ldent);
+ next_ldap_entry (cfile);
+ }
+
+ if (ent != NULL)
{
add_to_config_stack (res, ent);
parse_external_dns (entry->ldent);
+ parsedn = 0;
}
else
+ ldap_msgfree (res);
+
+ if (entfirst != NULL)
{
- ldap_msgfree (res);
- parse_external_dns (entry->ldent);
- next_ldap_entry (cfile);
+ add_to_config_stack (resfirst, entfirst);
+ if(parsedn)
+ parse_external_dns (entry->ldent);
}
+ else
+ ldap_msgfree (resfirst);
}
Regards,
-Kalyan
More information about the dhcp-users
mailing list