[Freeipa-devel] [PATCH 0074] Fix zone removal in persistent search update_zone()

Adam Tkac atkac at redhat.com
Tue Oct 9 11:08:23 UTC 2012


On Fri, Oct 05, 2012 at 01:15:13PM +0200, Petr Spacek wrote:
> 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.

Ack

> From e09eebf3c370ff4106013cdeda10a80782e26611 Mon Sep 17 00:00:00 2001
> From: Petr Spacek <pspacek at 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 <pspacek at 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
> 


-- 
Adam Tkac, Red Hat, Inc.




More information about the Freeipa-devel mailing list