From 8d3061f04a0ba201736c818c0663ee30781bcb02 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Fri, 17 Sep 2010 12:46:25 +0000
Subject: [PATCH] Fixed: FS#1318 - Bind won't load zone if multiple entries
 exist for same hostname

---
 interface/web/dns/dns_a_edit.php            | 2 +-
 interface/web/dns/dns_cname_edit.php        | 5 +++++
 interface/web/dns/lib/lang/en_dns_a.lng     | 2 +-
 interface/web/dns/lib/lang/en_dns_cname.lng | 1 +
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/interface/web/dns/dns_a_edit.php b/interface/web/dns/dns_a_edit.php
index d1bc853a87..01d6198d9d 100644
--- a/interface/web/dns/dns_a_edit.php
+++ b/interface/web/dns/dns_a_edit.php
@@ -97,7 +97,7 @@ class page_action extends tform_actions {
 		} // end if user is not admin
 		
 		//* Check for duplicates where IP and hostname are the same
-		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE type = 'A' AND name = '".$this->dataRecord["name"]."' AND zone = '".$this->dataRecord["zone"]."' and data = '".$this->dataRecord["data"]."' and id != ".$this->id);
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = '".$this->dataRecord["name"]."' AND zone = '".$this->dataRecord["zone"]."' and data = '".$this->dataRecord["data"]."' and id != ".$this->id.") OR (type = 'CNAME' AND name = '".$this->dataRecord["name"]."' AND zone = '".$this->dataRecord["zone"]."' and id != ".$this->id.")");
 		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
 		unset($tmp);
 		
diff --git a/interface/web/dns/dns_cname_edit.php b/interface/web/dns/dns_cname_edit.php
index 5513ff84d3..9a76c1f07d 100644
--- a/interface/web/dns/dns_cname_edit.php
+++ b/interface/web/dns/dns_cname_edit.php
@@ -96,6 +96,11 @@ class page_action extends tform_actions {
 			}
 		} // end if user is not admin
 		
+		//* Check for duplicates where IP and hostname are the same
+		$tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE (type = 'A' AND name = '".$this->dataRecord["name"]."' AND zone = '".$this->dataRecord["zone"]."' and id != ".$this->id.") OR (type = 'CNAME' AND name = '".$this->dataRecord["name"]."' AND zone = '".$this->dataRecord["zone"]."' and id != ".$this->id.")");
+		if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
+		unset($tmp);
+		
 		
 		// Set the server ID of the rr record to the same server ID as the parent record.
 		$this->dataRecord["server_id"] = $soa["server_id"];
diff --git a/interface/web/dns/lib/lang/en_dns_a.lng b/interface/web/dns/lib/lang/en_dns_a.lng
index 599de5cf93..5bd9c33544 100644
--- a/interface/web/dns/lib/lang/en_dns_a.lng
+++ b/interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,5 +12,5 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'IP-Address empty';
 $wb["data_error_regex"] = 'IP-Address format invalid';
-$wb["data_error_duplicate"] = 'Duplicate A-Record';
+$wb["data_error_duplicate"] = 'Duplicate A-Record or CNAME-Record';
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/en_dns_cname.lng b/interface/web/dns/lib/lang/en_dns_cname.lng
index 46f73a3878..96061b27c9 100644
--- a/interface/web/dns/lib/lang/en_dns_cname.lng
+++ b/interface/web/dns/lib/lang/en_dns_cname.lng
@@ -12,4 +12,5 @@ $wb["name_error_empty"] = 'The hostname is empty.';
 $wb["name_error_regex"] = 'The hostname has the wrong format.';
 $wb["data_error_empty"] = 'Target hostname empty';
 $wb["data_error_regex"] = 'Target hostname format invalid';
+$wb["data_error_duplicate"] = 'Duplicate A-Record or CNAME-Record';
 ?>
\ No newline at end of file
-- 
GitLab