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