Hello,

    Don't fail if idnsSOAserial attribute is missing in LDAP.

    DNS zones created on remote IPA 3.0 server don't have
    idnsSOAserial attribute present in LDAP.

    https://bugzilla.redhat.com/show_bug.cgi?id=894131


Attached patch contains the minimal set of changes need for resurrecting BIND.

In configurations with serial auto-increment:
- enabled (IPA 3.0+ default) - some new serial is written back to LDAP nearly immediately
- disabled - the attribute will be missing forever

--
Petr^2 Spacek
From 958f46a5ceee336e2466686bafbb203082e2ccc1 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 11 Jan 2013 17:30:03 +0100
Subject: [PATCH] Don't fail if idnsSOAserial attribute is missing in LDAP.

DNS zones created on remote IPA 3.0 server don't have
idnsSOAserial attribute present in LDAP.

https://bugzilla.redhat.com/show_bug.cgi?id=894131

Signed-off-by: Petr Spacek <pspa...@redhat.com>
---
 src/ldap_entry.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/ldap_entry.c b/src/ldap_entry.c
index 1e165ca696ccafa177f17b97bda08ed9cc344c7d..52b927d410300eb6df98ea058c3a08b426d66a70 100644
--- a/src/ldap_entry.c
+++ b/src/ldap_entry.c
@@ -350,8 +350,9 @@ ldap_entry_getfakesoa(ldap_entry_t *entry, const ld_string_t *fake_mname,
 	ldap_valuelist_t values;
 	int i = 0;
 
+	const char *soa_serial_attr = "idnsSOAserial";
 	const char *soa_attrs[] = {
-		"idnsSOAmName", "idnsSOArName", "idnsSOAserial",
+		"idnsSOAmName", "idnsSOArName", soa_serial_attr,
 		"idnsSOArefresh", "idnsSOAretry", "idnsSOAexpire",
 		"idnsSOAminimum", NULL
 	};
@@ -366,12 +367,25 @@ ldap_entry_getfakesoa(ldap_entry_t *entry, const ld_string_t *fake_mname,
 		CHECK(str_cat_char(target, " "));
 	}
 	for (; soa_attrs[i] != NULL; i++) {
-		CHECK(ldap_entry_getvalues(entry, soa_attrs[i], &values));
+		result = ldap_entry_getvalues(entry, soa_attrs[i], &values);
+		/** Workaround for
+		 *  https://bugzilla.redhat.com/show_bug.cgi?id=894131
+		 *  DNS zones created on remote IPA 3.0 server don't have
+		 *  idnsSOAserial attribute present in LDAP. */
+		if (result == ISC_R_NOTFOUND
+		    && soa_attrs[i] == soa_serial_attr) {
+			/* idnsSOAserial is missing! Read it as 1. */
+			CHECK(str_cat_char(target, "1 "));
+			continue;
+		} else if (result != ISC_R_SUCCESS)
+			goto cleanup;
+
 		CHECK(str_cat_char(target, HEAD(values)->value));
 		CHECK(str_cat_char(target, " "));
 	}
 
 cleanup:
+	/* TODO: check for memory leaks */
 	return result;
 }
 
-- 
1.7.11.7

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

Reply via email to