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