From 3d3f986d13a0bfa8cd9578b8ce7401759b736808 Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Thu, 13 Mar 2014 07:07:44 -0400
Subject: [PATCH] Implemented: FS#3235 - Allow 'any' value in zone xfer field

---
 interface/web/dns/lib/lang/en_dns_soa.lng  |    2 +-
 interface/web/dns/form/dns_soa.tform.php   |    9 +++++++++
 interface/lib/classes/validate_dns.inc.php |   44 ++++++++++++++++++++++++++++++++++++++++++++
 interface/web/dns/lib/lang/de_dns_soa.lng  |    2 +-
 4 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/interface/lib/classes/validate_dns.inc.php b/interface/lib/classes/validate_dns.inc.php
index 413be16..212c4d7 100644
--- a/interface/lib/classes/validate_dns.inc.php
+++ b/interface/lib/classes/validate_dns.inc.php
@@ -283,5 +283,49 @@
 		}
 		return $new_serial;
 	}
+	
+	function validate_xfer($field_name, $field_value, $validator) {
+		global $app;
+		
+		$errorMessage = '';
+		
+		if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
+		if($validator['allowempty'] == 'y' && $field_value == '') {
+			//* Do nothing
+		} elseif ($field_value == 'any') {
+			//* Do nothing
+		} else {
+			//* Check if its a IPv4 or IPv6 address
+			if(isset($validator['separator']) && $validator['separator'] != '') {
+				//* When the field may contain several IP addresses, split them by the char defined as separator
+				$field_value_array = explode($validator['separator'], $field_value);
+			} else {
+				$field_value_array[] = $field_value;
+			}
+			foreach($field_value_array as $field_value) {
+				$field_value = trim($field_value);
+				if(function_exists('filter_var')) {
+						if(!filter_var($field_value, FILTER_VALIDATE_IP)) {
+						$errmsg = $validator['errmsg'];
+						$errorMessage .= $app->tform->lng($errmsg)."<br />\r\n";
+					}
+				} else {
+					//* Check content with regex, if we use php < 5.2
+					$ip_ok = 0;
+					if(preg_match("/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i", $field_value)){
+						$ip_ok = 1;
+					}
+					if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
+						$ip_ok = 1;
+					}
+					if($ip_ok == 0) {
+						$errmsg = $validator['errmsg'];
+						$errorMessage .= $app->tform->lng($errmsg)."<br />\r\n";
+					}
+				}
+			}
+		}
+		return $errorMessage;
+	}
 
 }
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index e4237e0..1e4f9a6 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -217,11 +217,20 @@
 		'xfer' => array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'TEXT',
+			'validators' => array (  0 => array ( 'type' => 'CUSTOM',
+					'class' => 'validate_dns',
+					'function' => 'validate_xfer',
+					'allowempty' => 'y',
+					'separator' => ',',
+					'errmsg'=> 'xfer_error_regex'),
+			),
+			/*
 			'validators' => array (  0 => array ( 'type' => 'ISIP',
 					'allowempty' => 'y',
 					'separator' => ',',
 					'errmsg'=> 'xfer_error_regex'),
 			),
+			*/
 			'default' => '',
 			'value'  => '',
 			'width'  => '30',
diff --git a/interface/web/dns/lib/lang/de_dns_soa.lng b/interface/web/dns/lib/lang/de_dns_soa.lng
index 2cb73e7..d751da1 100644
--- a/interface/web/dns/lib/lang/de_dns_soa.lng
+++ b/interface/web/dns/lib/lang/de_dns_soa.lng
@@ -34,5 +34,5 @@
 $wb['expire_range_error'] = 'Min. Expire ist 60 Sekunden.';
 $wb['minimum_range_error'] = 'Min. Minimum ist 60 Sekunden.';
 $wb['ttl_range_error'] = 'Min. TTL ist 60 Sekunden.';
-$wb['xfer_error_regex'] = 'Bitte Beachten: Verwenden Sie eine IP Adresse.';
+$wb['xfer_error_regex'] = 'Zonentransfer: Verwenden Sie eine oder mehrere durch Komma getrennte IP Adressen oder das Wort: any.';
 ?>
\ No newline at end of file
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index 65e3f92..f74c92f 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -23,7 +23,7 @@
 $wb["mbox_error_regex"] = 'Email format invalid.';
 $wb["also_notify_txt"] = 'Also Notify';
 $wb['also_notify_error_regex'] = 'Also notify: Please use an IP address.';
-$wb['xfer_error_regex'] = 'Xfer: Please use an IP address.';
+$wb['xfer_error_regex'] = 'Xfer: Please use one or more IP addresses, separated by , or use the keyword: any';
 $wb["update_acl_txt"] = 'Update ACL';
 $wb['seconds_txt'] = 'Seconds';
 $wb['eg_domain_tld'] = 'e.g. domain.tld';

--
Gitblit v1.9.1