From b5f119957e32fbcb31f21b473396f0478d6f56ac Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Wed, 06 Feb 2013 11:06:41 -0500 Subject: [PATCH] Fixed: FS#2607 - DNS Form IPv6 issues - Extended the tform ISIP check and added the options 'allowempty' and 'separator' --- interface/web/dns/lib/lang/en_dns_soa.lng | 3 + interface/web/dns/form/dns_soa.tform.php | 13 +++--- interface/lib/classes/tform.inc.php | 57 +++++++++++++++++----------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/interface/lib/classes/tform.inc.php b/interface/lib/classes/tform.inc.php index 7580ead..8e36fb2 100644 --- a/interface/lib/classes/tform.inc.php +++ b/interface/lib/classes/tform.inc.php @@ -939,31 +939,44 @@ } break; case 'ISIP': - //* Check if its a IPv4 or IPv6 address - if(function_exists('filter_var')) { - if(!filter_var($field_value,FILTER_VALIDATE_IP)) { - $errmsg = $validator['errmsg']; - if(isset($this->wordbook[$errmsg])) { - $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n"; - } else { - $this->errorMessage .= $errmsg."<br />\r\n"; - } - } + if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n'; + if($validator['allowempty'] == 'y' && $field_value == '') { + //* Do nothing } 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; + //* 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; } - 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']; - if(isset($this->wordbook[$errmsg])) { - $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n"; + foreach($field_value_array as $field_value) { + if(function_exists('filter_var')) { + if(!filter_var($field_value,FILTER_VALIDATE_IP)) { + $errmsg = $validator['errmsg']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n"; + } else { + $this->errorMessage .= $errmsg."<br />\r\n"; + } + } } else { - $this->errorMessage .= $errmsg."<br />\r\n"; + //* 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']; + if(isset($this->wordbook[$errmsg])) { + $this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n"; + } else { + $this->errorMessage .= $errmsg."<br />\r\n"; + } + } } } } diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php index c8306ae..ebc49cf 100644 --- a/interface/web/dns/form/dns_soa.tform.php +++ b/interface/web/dns/form/dns_soa.tform.php @@ -217,8 +217,9 @@ 'xfer' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^[0-9\.\,]{0,255}$/', + 'validators' => array ( 0 => array ( 'type' => 'ISIP', + 'allowempty' => 'y', + 'separator' => ',', 'errmsg'=> 'xfer_error_regex'), ), 'default' => '', @@ -229,13 +230,11 @@ 'also_notify' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', - 'validators' => array ( 0 => array ( 'type' => 'REGEX', - 'regex' => '/^(((25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(;){0,1}(\ ){0,1}){0,10}$/', + 'validators' => array ( 0 => array ( 'type' => 'ISIP', + 'allowempty' => 'y', + 'separator' => ',', 'errmsg'=> 'also_notify_error_regex' ), -// 0 => array ( 'type' => 'ISIPV4', -// 'errmsg'=> 'also_notify_error_regex' -// ), ), 'default' => '', 'value' => '', diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng index d526093..271572d 100644 --- a/interface/web/dns/lib/lang/en_dns_soa.lng +++ b/interface/web/dns/lib/lang/en_dns_soa.lng @@ -22,7 +22,8 @@ $wb["mbox_error_empty"] = 'Email is empty.'; $wb["mbox_error_regex"] = 'Email format invalid.'; $wb["also_notify_txt"] = 'Also Notify'; -$wb['also_notify_error_regex'] = 'Please use an IP address.'; +$wb['also_notify_error_regex'] = 'Also notify: Please use an IP address.'; +$wb['xfer_error_regex'] = 'Also notify: Please use an IP address.'; $wb["update_acl_txt"] = 'Update ACL'; $wb['seconds_txt'] = 'Seconds'; $wb['eg_domain_tld'] = 'e.g. domain.tld'; -- Gitblit v1.9.1