Re: [Freeipa-devel] [PATCH 0151] Disallow all zone transfers/queries if transfer/query policy configuration failed

2013-05-14 Thread Petr Spacek

On 9.5.2013 14:20, Tomas Hozza wrote:

On 04/19/2013 12:44 PM, Petr Spacek wrote:

Hello,

Disallow all zone transfers/queries if transfer/query policy
configuration failed.

Without this patch the old policy stays in effect
if re-configuration with the new policy failed.

https://fedorahosted.org/bind-dyndb-ldap/ticket/116



ACK.

Patch looks OK!


Pushed to master: 0a5051392e218702a37073823101cbb6553b9445

--
Petr^2 Spacek

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


Re: [Freeipa-devel] [PATCH 0151] Disallow all zone transfers/queries if transfer/query policy configuration failed

2013-05-09 Thread Tomas Hozza
On 04/19/2013 12:44 PM, Petr Spacek wrote:
 Hello,
 
 Disallow all zone transfers/queries if transfer/query policy
 configuration failed.
 
 Without this patch the old policy stays in effect
 if re-configuration with the new policy failed.
 
 https://fedorahosted.org/bind-dyndb-ldap/ticket/116
 

ACK.

Patch looks OK!


Regards,

Tomas Hozza

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


[Freeipa-devel] [PATCH 0151] Disallow all zone transfers/queries if transfer/query policy configuration failed

2013-04-19 Thread Petr Spacek

Hello,

Disallow all zone transfers/queries if transfer/query policy configuration 
failed.

Without this patch the old policy stays in effect
if re-configuration with the new policy failed.

https://fedorahosted.org/bind-dyndb-ldap/ticket/116

--
Petr^2 Spacek
From f2f1207d16e2ae91f824c7543722bf262884fecc Mon Sep 17 00:00:00 2001
From: Petr Spacek pspa...@redhat.com
Date: Fri, 19 Apr 2013 12:41:04 +0200
Subject: [PATCH] Disallow all zone transfers/queries if transfer/query policy
 configuration failed.

Without this patch the old policy stays in effect
if re-configuration with the new policy failed.

https://fedorahosted.org/bind-dyndb-ldap/ticket/116

Signed-off-by: Petr Spacek pspa...@redhat.com
---
 src/acl.c |  7 +++
 src/acl.h |  3 +++
 src/ldap_helper.c | 52 ++--
 3 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/src/acl.c b/src/acl.c
index 0adc82cebc5bc514647084f42bd8a115a88c6bb2..754cd53dc3d31b99d0954836feafbd46747c48c2 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -64,6 +64,7 @@
 #include str.h
 #include util.h
 #include log.h
+#include types.h
 
 static isc_once_t once = ISC_ONCE_INIT;
 static cfg_type_t *update_policy;
@@ -84,6 +85,12 @@ static cfg_type_t cfg_type_empty_map = {
 
 static cfg_type_t *empty_map_p = cfg_type_empty_map;
 
+const enum_txt_assoc_t acl_type_txts[] = {
+	{ acl_type_query,	query		},
+	{ acl_type_transfer,	transfer	},
+	{ -1,			NULL		} /* end marker */
+};
+
 static cfg_type_t *
 get_type_from_tuplefield(const cfg_type_t *cfg_type, const char *name)
 {
diff --git a/src/acl.h b/src/acl.h
index 7e4471bcc3624719f384d3ced54914631d1136c1..3e99490cfe614867117beb96a07e6bf9fdc72fbe 100644
--- a/src/acl.h
+++ b/src/acl.h
@@ -22,14 +22,17 @@
 #define _LD_ACL_H_
 
 #include ldap_entry.h
+#include types.h
 
 #include dns/acl.h
 
 typedef enum acl_type {
 	acl_type_query,
 	acl_type_transfer
 } acl_type_t;
 
+extern const enum_txt_assoc_t acl_type_txts[];
+
 isc_result_t
 acl_configure_zone_ssutable(const char *policy_str, dns_zone_t *zone);
 
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 4d8fb084e6564597dd694a905d749870c8626c94..4bcdf5e3e400eeac3214e8e7fdc9e11a5b471ab6 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -762,6 +762,44 @@ cleanup:
 	return result;
 }
 
+static isc_result_t
+configure_zone_acl(isc_mem_t *mctx, dns_zone_t *zone,
+		void (acl_setter)(dns_zone_t *zone, dns_acl_t *acl),
+		const char *aclstr, acl_type_t type) {
+	isc_result_t result;
+	isc_result_t result2;
+	dns_acl_t *acl = NULL;
+	const char *type_txt = NULL;
+
+	result = acl_from_ldap(mctx, aclstr, type, acl);
+	if (result != ISC_R_SUCCESS) {
+		result2 = get_enum_description(acl_type_txts, type, type_txt);
+		if (result2 != ISC_R_SUCCESS) {
+			log_bug(invalid acl type %u, type);
+			type_txt = unknown;
+		}
+
+		dns_zone_logc(zone, DNS_LOGCATEGORY_SECURITY, ISC_LOG_ERROR,
+			  %s policy is invalid: %s; configuring most 
+			  restrictive %s policy as possible,
+			  type_txt, isc_result_totext(result), type_txt);
+		result2 = acl_from_ldap(mctx, , type, acl);
+		if (result2 != ISC_R_SUCCESS) {
+			dns_zone_logc(zone, DNS_LOGCATEGORY_SECURITY, ISC_LOG_CRITICAL,
+  cannot configure restrictive %s policy: %s,
+  type_txt, isc_result_totext(result2));
+			FATAL_ERROR(__FILE__, __LINE__,
+insecure state detected);
+		}
+	}
+	acl_setter(zone, acl);
+
+	if (acl != NULL)
+		dns_acl_detach(acl);
+
+	return result;
+}
+
 /* In BIND9 terminology ssu means Simple Secure Update */
 static isc_result_t
 configure_zone_ssutable(dns_zone_t *zone, const char *update_str)
@@ -1346,24 +1384,18 @@ ldap_parse_master_zoneentry(ldap_entry_t *entry, ldap_instance_t *inst)
 	log_debug(2, Setting allow-query for %p: %s, zone, dn);
 	result = ldap_entry_getvalues(entry, idnsAllowQuery, values);
 	if (result == ISC_R_SUCCESS) {
-		dns_acl_t *queryacl = NULL;
-		CHECK(acl_from_ldap(inst-mctx, HEAD(values)-value,
-		  acl_type_query, queryacl));
-		dns_zone_setqueryacl(zone, queryacl);
-		dns_acl_detach(queryacl);
+		CHECK(configure_zone_acl(inst-mctx, zone, dns_zone_setqueryacl,
+	 HEAD(values)-value, acl_type_query));
 	} else {
 		log_debug(2, allow-query not set);
 		dns_zone_clearqueryacl(zone);
 	}
 
 	log_debug(2, Setting allow-transfer for %p: %s, zone, dn);
 	result = ldap_entry_getvalues(entry, idnsAllowTransfer, values);
 	if (result == ISC_R_SUCCESS) {
-		dns_acl_t *transferacl = NULL;
-		CHECK(acl_from_ldap(inst-mctx, HEAD(values)-value,
-		  acl_type_transfer, transferacl));
-		dns_zone_setxfracl(zone, transferacl);
-		dns_acl_detach(transferacl);
+		CHECK(configure_zone_acl(inst-mctx, zone, dns_zone_setxfracl,
+	 HEAD(values)-value, acl_type_transfer));
 	} else {
 		log_debug(2, allow-transfer not set);
 		dns_zone_clearxfracl(zone);
-- 
1.7.11.7

___
Freeipa-devel mailing list
Freeipa-devel@redhat.com