Hello,

Fix zone removal in persistent search update_zone().

Without this patch any zone removed through ipa dnszone-del will remain active and will return SERVFAILs.

--
Petr^2 Spacek
From e09eebf3c370ff4106013cdeda10a80782e26611 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 5 Oct 2012 13:02:37 +0200
Subject: [PATCH] Fix zone removal in persistent search update_zone() handler.

Signed-off-by: Petr Spacek <pspa...@redhat.com>
---
 src/ldap_helper.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 68b635f84b4c9015752667510c0497e5f56bc7ab..199b345bb604c30bfa8a3690afc844ca8b264e89 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -3056,7 +3056,6 @@ update_zone(isc_task_t *task, isc_event_t *event)
 	ldap_qresult_t *ldap_qresult_record = NULL;
 	ldap_entry_t *entry_zone = NULL;
 	ldap_entry_t *entry_record = NULL;
-	isc_boolean_t delete = ISC_TRUE;
 	isc_mem_t *mctx;
 	dns_name_t prevname;
 	char *attrs_zone[] = {
@@ -3073,14 +3072,16 @@ update_zone(isc_task_t *task, isc_event_t *event)
 	dns_name_init(&prevname, NULL);
 
 	CHECK(manager_get_ldap_instance(pevent->dbname, &inst));
-	CHECK(ldap_query(inst, NULL, &ldap_qresult_zone, pevent->dn,
+
+	result = ldap_query(inst, NULL, &ldap_qresult_zone, pevent->dn,
 			 LDAP_SCOPE_BASE, attrs_zone, 0,
-			 "(&(objectClass=idnsZone)(idnsZoneActive=TRUE))"));
+			 "(&(objectClass=idnsZone)(idnsZoneActive=TRUE))");
+	if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
+		CLEANUP_WITH(result);
 
-	for (entry_zone = HEAD(ldap_qresult_zone->ldap_entries);
-			entry_zone != NULL;
-			entry_zone = NEXT(entry_zone, link)) {
-		delete = ISC_FALSE;
+	if (result == ISC_R_SUCCESS &&
+	    HEAD(ldap_qresult_zone->ldap_entries) != NULL) {
+		entry_zone = HEAD(ldap_qresult_zone->ldap_entries);
 		CHECK(ldap_parse_zoneentry(entry_zone, inst));
 
 		if (PSEARCH_MODDN(pevent->chgtype)) {
@@ -3106,10 +3107,9 @@ update_zone(isc_task_t *task, isc_event_t *event)
 		}
 
 		INSIST(NEXT(entry_zone, link) == NULL); /* no multiple zones with same DN */
-	}
-
-	if (delete)
+	} else {
 		CHECK(ldap_delete_zone(inst, pevent->dn, ISC_TRUE));
+	}
 
 cleanup:
 	if (result != ISC_R_SUCCESS)
-- 
1.7.11.4

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to