function validatePost($post) { global $fmdb, $__FM_CONFIG; if (empty($post['server_name'])) { return __('No server name defined.'); } /** Check name field length */ $field_length = getColumnLength('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_name'); if ($field_length !== false && strlen($post['server_name']) > $field_length) { return sprintf(dngettext($_SESSION['module'], 'Server name is too long (maximum %d character).', 'Server name is too long (maximum %d characters).', $field_length), $field_length); } /** Does the record already exist for this account? */ basicGet('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', $post['server_name'], 'server_', 'server_name', "AND server_id!='{$post['server_id']}'"); if ($fmdb->num_rows) { return __('This server name already exists.'); } if (empty($post['server_config_file'])) { $post['server_config_file'] = $__FM_CONFIG['fw']['config_file']['default']; if (!is_array($__FM_CONFIG['fw']['config_file'][$post['server_type']]) && $__FM_CONFIG['fw']['config_file'][$post['server_type']]) { $post['server_config_file'] = $__FM_CONFIG['fw']['config_file'][$post['server_type']]; } elseif (is_array($__FM_CONFIG['fw']['config_file'][$post['server_type']])) { if (isset($post['server_os_distro'])) { $distro = $post['server_os_distro']; } else { if ($post['action'] == 'edit') { $distro = getNameFromID($post['server_id'], 'fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'servers', 'server_', 'server_id', 'server_os_distro'); } } if (isset($distro) && array_key_exists($distro, $__FM_CONFIG['fw']['config_file'][$post['server_type']])) { $post['server_config_file'] = $__FM_CONFIG['fw']['config_file'][$post['server_type']][$distro]; } } } /** Set default ports */ if (empty($post['server_update_port']) || isset($post['server_update_port']) && $post['server_update_method'] == 'cron') { $post['server_update_port'] = 0; } if (!empty($post['server_update_port']) && !verifyNumber($post['server_update_port'], 1, 65535, false)) { return __('Server update port must be a valid TCP port.'); } if (empty($post['server_update_port']) && isset($post['server_update_method'])) { if ($post['server_update_method'] == 'http') { $post['server_update_port'] = 80; } elseif ($post['server_update_method'] == 'https') { $post['server_update_port'] = 443; } elseif ($post['server_update_method'] == 'ssh') { $post['server_update_port'] = 22; } } return $post; }
function validatePost($post) { global $fmdb, $__FM_CONFIG; $post['cfg_comment'] = trim($post['cfg_comment']); if (is_array($post['cfg_data'])) { $post['cfg_data'] = join(' ', $post['cfg_data']); } if (isset($post['cfg_name'])) { $def_option = "'{$post['cfg_name']}'"; } elseif (isset($post['cfg_id'])) { $def_option = "(SELECT cfg_name FROM fm_{$__FM_CONFIG[$_SESSION['module']]['prefix']}config WHERE cfg_id = {$post['cfg_id']})"; } else { return false; } if (!isset($post['view_id'])) { $post['view_id'] = 0; } if (!isset($post['domain_id'])) { $post['domain_id'] = 0; } $query = "SELECT def_type,def_dropdown FROM fm_{$__FM_CONFIG[$_SESSION['module']]['prefix']}functions WHERE def_option = {$def_option}"; $fmdb->get_results($query); if ($fmdb->num_rows) { $result = $fmdb->last_result; if ($result[0]->def_dropdown == 'no') { $valid_types = trim(str_replace(array('(', ')'), '', $result[0]->def_type)); switch ($valid_types) { case 'integer': case 'seconds': case 'minutes': case 'size_in_bytes': if (!verifyNumber($post['cfg_data'])) { return $post['cfg_data'] . ' is an invalid number.'; } break; case 'port': if (!verifyNumber($post['cfg_data'], 0, 65535)) { return $post['cfg_data'] . ' is an invalid port number.'; } break; case 'quoted_string': $post['cfg_data'] = '"' . trim($post['cfg_data'], '"') . '"'; break; case 'quoted_string | none': $post['cfg_data'] = '"' . trim($post['cfg_data'], '"') . '"'; if ($post['cfg_data'] == '"none"') { $post['cfg_data'] = 'none'; } break; case 'address_match_element': /** Need to check for valid ACLs or IP addresses */ break; case 'ipv4_address | ipv6_address': if (!verifyIPAddress($post['cfg_data'])) { return $post['cfg_data'] . ' is an invalid IP address.'; } break; case 'ipv4_address | *': case 'ipv6_address | *': if ($post['cfg_data'] != '*') { if (!verifyIPAddress($post['cfg_data'])) { $post['cfg_data'] . ' is an invalid IP address.'; } } break; } } } return $post; }
function validateEntry($action, $id, $data, $record_type) { $messages = null; $html = null; $append = array('CNAME', 'NS', 'MX', 'SRV', 'DNAME', 'CERT', 'RP', 'NAPTR'); if ($action == 'create' && !isset($data['record_append']) && in_array($record_type, $append) && substr($data['record_value'], -1) != '.') { $data['record_append'] = 'yes'; } elseif (!isset($data['record_append']) && in_array($record_type, $append)) { $data['record_append'] = 'no'; } if (!empty($data['record_value'])) { $data['record_value'] = str_replace(array('"', "'"), '', $data['record_value']); foreach ($data as $key => $val) { $data[$key] = trim($val, '"\''); if ($key == 'record_name' && $record_type != 'PTR') { if (!$val) { $val = '@'; $data[$key] = $val; } if (!verifyName($val, $id, true, $record_type)) { $messages['errors'][$key] = __('Invalid'); } } if (in_array($key, array('record_ttl', 'record_priority', 'record_weight', 'record_port'))) { if (!empty($val) && verifyNumber($val) === false) { $messages['errors'][$key] = __('Invalid'); } } if ($record_type == 'A') { if ($key == 'record_value') { if (verifyIPAddress($val) === false) { $messages['errors'][$key] = __('Invalid IP'); } } if ($key == 'PTR') { global $domain_id; $retval = checkPTRZone($data['record_value'], $domain_id); list($val, $error_msg) = $retval; if ($val == null) { $messages['errors']['record_value'] = $error_msg; } else { $messages['info']['record_value'] = $error_msg; } } } if ($record_type == 'PTR') { if ($key == 'record_name') { if ($domain_map == 'reverse') { if (verifyIPAddress(buildFullIPAddress($data['record_name'], $domain)) === false) { $messages['errors'][$key] = __('Invalid record'); } } else { if (!verifyCNAME('yes', $data['record_name'], false, true)) { $messages['errors'][$key] = __('Invalid record'); } } } } if (in_array($record_type, array('CNAME', 'DNAME', 'MX', 'NS', 'SRV', 'NAPTR')) || $record_type == 'PTR' && $key == 'record_value') { if ($key == 'record_value') { $val = $data['record_append'] == 'yes' || $val == '@' ? trim($val, '.') : trim($val, '.') . '.'; $data[$key] = $val; if (!verifyCNAME($data['record_append'], $val) || $record_type == 'NS' && !validateHostname($val)) { $messages['errors'][$key] = __('Invalid value'); } } } if (!count($messages['errors'])) { $html .= buildInputReturn($action, $id, $key, $val); } else { $html = null; } } } elseif ($record_type == 'SOA') { if ($_POST['create']['soa_template_chosen']) { global $fm_dns_records; // Save the soa_template_chosen in domains table and end include_once ABSPATH . 'fm-modules/fmDNS/classes/class_records.php'; $fm_dns_records->assignSOA($_POST['create']['soa_template_chosen'], $_POST['domain_id']); header('Location: zone-records.php?map=' . $_POST['map'] . '&domain_id=' . $_POST['domain_id'] . '&record_type=SOA'); } if (!isset($data['soa_append'])) { $data['soa_append'] = 'no'; } foreach ($data as $key => $val) { if (in_array($key, array('domain_id', 'soa_status'))) { continue; } if ($key == 'soa_email_address') { $val = strpos($val, '@') ? str_replace('@', '.', rtrim($val, '.') . '.') : $val; $data[$key] = $val; } if (in_array($key, array('soa_master_server', 'soa_email_address'))) { $val = rtrim($val, '.'); if (strpos($_POST['update'][$id]['soa_master_server'], $domain) && strpos($_POST['update'][$id]['soa_email_address'], $domain)) { $new_val = rtrim(str_replace($domain, '', $val), '.'); if ($new_val != rtrim($val, '.')) { $data['soa_append'] = 'yes'; } $val = $new_val; } if ($data['soa_append'] == 'no') { $val .= '.'; } } if ($key != 'soa_append') { if (in_array($key, array('soa_master_server', 'soa_email_address'))) { $val = $data['soa_append'] == 'yes' ? trim($val, '.') : trim($val, '.') . '.'; $data[$key] = $val; if (!verifyCNAME($data['soa_append'], $val, false) || $key == 'soa_master_server' && !validateHostname($val)) { $messages['errors'][$key] = __('Invalid'); } } else { if (array_key_exists('soa_template', $data) && $data['soa_template'] == 'yes') { if (!verifyNAME($val, $id, false)) { $messages['errors'][$key] = __('Invalid'); } } } } if (!count($messages['errors'])) { $html .= buildInputReturn($action, $id, $key, $val); } else { $html = null; } } } else { unset($data); } return array($data, $html, $messages); }
/** * Updates the selected server */ function updateServer($post) { global $fmdb, $__FM_CONFIG; if (empty($post['server_name'])) { return __('No server name defined.'); } if (empty($post['server_root_dir'])) { $post['server_root_dir'] = $__FM_CONFIG['ns']['named_root_dir']; } if (empty($post['server_zones_dir'])) { $post['server_zones_dir'] = $__FM_CONFIG['ns']['named_zones_dir']; } if (empty($post['server_config_file'])) { $post['server_config_file'] = $__FM_CONFIG['ns']['named_config_file']; } if (empty($post['server_update_method'])) { $post['server_update_method'] = 'cron'; } $post['server_root_dir'] = rtrim($post['server_root_dir'], '/'); $post['server_chroot_dir'] = rtrim($post['server_chroot_dir'], '/'); $post['server_zones_dir'] = rtrim($post['server_zones_dir'], '/'); /** Check name field length */ $field_length = getColumnLength('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_name'); if ($field_length !== false && strlen($post['server_name']) > $field_length) { return sprintf(dngettext($_SESSION['module'], 'Server name is too long (maximum %d character).', 'Server name is too long (maximum %d characters).', $field_length), $field_length); } /** Does the record already exist for this account? */ basicGet('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', sanitize($post['server_name']), 'server_', 'server_name', "AND server_id!='{$post['server_id']}'"); if ($fmdb->num_rows) { return __('This server name already exists.'); } /** Process server_key */ if (!isset($post['server_key']) || !is_numeric($post['server_key'])) { $post['server_key'] = 0; } /** Set default ports */ if ($post['server_update_method'] == 'cron') { $post['server_update_port'] = 0; } if (!empty($post['server_update_port']) && !verifyNumber($post['server_update_port'], 1, 65535, false)) { return __('Server update port must be a valid TCP port.'); } if (empty($post['server_update_port'])) { if ($post['server_update_method'] == 'http') { $post['server_update_port'] = 80; } elseif ($post['server_update_method'] == 'https') { $post['server_update_port'] = 443; } elseif ($post['server_update_method'] == 'ssh') { $post['server_update_port'] = 22; } } $exclude = array('submit', 'action', 'server_id', 'compress', 'AUTHKEY', 'module_name', 'module_type', 'config', 'SERIALNO', 'sub_type'); $post['server_run_as'] = $post['server_run_as_predefined'] == 'as defined:' ? $post['server_run_as'] : null; if (!in_array($post['server_run_as_predefined'], enumMYSQLSelect('fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_run_as_predefined'))) { $post['server_run_as'] = $post['server_run_as_predefined']; $post['server_run_as_predefined'] = 'as defined:'; } $sql_edit = null; foreach ($post as $key => $data) { if (!in_array($key, $exclude)) { $sql_edit .= $key . "='" . sanitize($data) . "',"; } } $sql = rtrim($sql_edit, ','); /** Update the server */ $old_name = getNameFromID($post['server_id'], 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'servers', 'server_', 'server_id', 'server_name'); $query = "UPDATE `fm_{$__FM_CONFIG['fmDNS']['prefix']}servers` SET {$sql} WHERE `server_id`={$post['server_id']} AND `account_id`='{$_SESSION['user']['account_id']}'"; $result = $fmdb->query($query); if ($fmdb->sql_errors) { return __('Could not update the server because a database error occurred.'); } /** Return if there are no changes */ if (!$fmdb->rows_affected) { return true; } setBuildUpdateConfigFlag(getServerSerial($post['server_id'], $_SESSION['module']), 'yes', 'build'); $tmp_key = $post['server_key'] ? getNameFromID($post['server_key'], 'fm_' . $__FM_CONFIG['fmDNS']['prefix'] . 'keys', 'key_', 'key_id', 'key_name') : 'None'; $tmp_runas = $post['server_run_as_predefined'] == 'as defined:' ? $post['server_run_as'] : $post['server_run_as_predefined']; addLogEntry("Updated server '{$old_name}' to:\nName: {$post['server_name']}\nKey: {$tmp_key}\nType: {$post['server_type']}\n" . "Run-as: {$tmp_runas}\nUpdate Method: {$post['server_update_method']}\nConfig File: {$post['server_config_file']}\n" . "Server Root: {$post['server_root_dir']}\nServer Chroot: {$post['server_chroot_dir']}\n" . "Zone file directory: {$post['server_zones_dir']}"); return true; }
/** * Updates the selected server */ function update($post) { global $fmdb, $__FM_CONFIG; if (empty($post['server_name'])) { return __('No server name defined.'); } /** Check name field length */ $field_length = getColumnLength('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', 'server_name'); /** Does the record already exist for this account? */ basicGet('fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', sanitize($post['server_name']), 'server_', 'server_name'); if ($fmdb->num_rows) { $result = $fmdb->last_result; if ($result[0]->server_id != $post['server_id']) { return __('This server name already exists.'); } } /** Set default ports */ if (!empty($post['server_port']) && !verifyNumber($post['server_port'], 1, 65535, false)) { return __('Server port must be a valid TCP port.'); } if (empty($post['server_port'])) { $post['server_port'] = $__FM_CONFIG['fmSQLPass']['default']['ports'][$post['server_type']]; } $exclude = array('submit', 'action', 'server_id', 'page'); $sql_edit = null; $old_name = getNameFromID($post['server_id'], 'fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'servers', 'server_', 'server_id', 'server_name'); $log_message = "Updated a database server ({$old_name}) with the following details:\n"; /** Convert groups and policies arrays into strings */ if (isset($post['server_groups']) && is_array($post['server_groups'])) { $temp_var = null; foreach ($post['server_groups'] as $id) { $temp_var .= $id . ';'; } $post['server_groups'] = rtrim($temp_var, ';'); } /** Handle credentials */ if (is_array($post['server_credentials'])) { $post['server_credentials'] = serialize($post['server_credentials']); } foreach ($post as $key => $data) { if (!in_array($key, $exclude)) { $sql_edit .= $key . "='" . sanitize($data) . "',"; if ($key == 'server_credentials') { $data = str_repeat('*', 7); } if ($key == 'server_groups') { if ($data) { $group_array = explode(';', $data); $clean_data = null; foreach ($group_array as $group_id) { $clean_data .= getNameFromID($group_id, 'fm_' . $__FM_CONFIG['fmSQLPass']['prefix'] . 'groups', 'group_', 'group_id', 'group_name') . '; '; } $data = rtrim($clean_data, '; '); } else { $data = 'None'; } } $log_message .= $data ? formatLogKeyData('server_', $key, $data) : null; } } $sql = rtrim($sql_edit, ','); // Update the server $query = "UPDATE `fm_{$__FM_CONFIG['fmSQLPass']['prefix']}servers` SET {$sql} WHERE `server_id`={$post['server_id']} AND `account_id`='{$_SESSION['user']['account_id']}'"; $result = $fmdb->query($query); if (!$fmdb->result) { return __('Could not add the server because a database error occurred.'); } /** Return if there are no changes */ if (!$fmdb->rows_affected) { return true; } addLogEntry($log_message); return true; }
/** * Saves the options */ function save() { global $fmdb, $__FM_CONFIG, $fm_name; if (!currentUserCan('manage_settings')) { return _('You do not have permission to make these changes.'); } $force_logout = false; $exclude = array('save', 'item_type', 'gen_ssh'); $ports = array('ldap_port', 'ldap_port_ssl', 'fm_port_ssl'); $log_message = _('Set system settings to the following:') . "\n"; foreach ($_POST as $key => $data) { if (!in_array($key, $exclude)) { unset($data_array); if (is_array($data)) { $data_array = $data; $account_id = $_SESSION['user']['account_id']; $data = $data[$account_id]; } else { $account_id = 0; } /** Check if the option has changed */ $current_value = getOption($key, $account_id); unset($account_id); if ($current_value == $data) { continue; } if ($key == 'mail_from' && isEmailAddressValid($data) === false) { return sprintf(_('%s is not a valid e-mail address.'), $data); } if (in_array($key, $ports)) { if (!verifyNumber($data, 1, 65535, false)) { return _('Invalid port number specified.'); } } if (isset($data_array)) { $data = $data_array; } $new_array[$key] = $current_value === false ? array($data, 'insert') : array($data, 'update'); } } if (isset($new_array) && is_array($new_array)) { foreach ($new_array as $option => $value) { list($option_value, $command) = $value; if (is_array($option_value)) { $data_array = $option_value; $account_id = $_SESSION['user']['account_id']; $option_value = $option_value[$account_id]; } else { $account_id = 0; } /** Update with the new value */ $result = setOption($option, $option_value, $command, false, $account_id); unset($account_id); if (!$result) { return _('Could not save settings because a database error occurred.'); } $log_value = trim($option_value); $log_message .= ucwords(str_replace('_', ' ', $option)) . ': '; if (@is_array($__FM_CONFIG['options'][$option][0])) { foreach ($__FM_CONFIG['options'][$option] as $array) { if ($log_value == $array[1]) { $log_message .= $array[0]; break; } } } elseif ($option == 'mail_smtp_pass') { $log_message .= str_repeat('*', 8); } elseif ($option == 'date_format' || $option == 'time_format') { $log_message .= date($log_value); } elseif ($option == 'ldap_user_template') { $log_message .= getNameFromID($log_value, 'fm_users', 'user_', 'user_id', 'user_login'); } elseif ($option_value == '1') { $log_message .= _('Yes'); } elseif ($option_value == '0') { $log_message .= _('No'); } else { $log_message .= $log_value; } $log_message .= "\n"; if ($option == 'auth_method') { $force_logout = true; } if (isset($data_array)) { $data = $data_array; unset($data_array); } } addLogEntry($log_message, $fm_name); if ($force_logout) { exit('force_logout'); } return true; } return true; }
function validatePost($post) { global $fmdb, $__FM_CONFIG; if (!$post['control_id']) { unset($post['control_id']); } $post['control_comment'] = trim($post['control_comment']); if (is_array($post['control_keys'])) { $post['control_keys'] = join(',', $post['control_keys']); } if (!empty($post['control_ip']) && $post['control_ip'] != '*') { if (!verifyIPAddress($post['control_ip'])) { sprintf(__('%s is not a valid IP address.'), $post['control_ip']); } } else { $post['control_ip'] = '*'; } if (empty($post['control_addresses'])) { return __('Allowed addresses not defined.'); } if (!empty($post['control_port'])) { if (!verifyNumber($post['control_port'], 0, 65535)) { return sprintf(__('%d is not a valid port number.'), $post['control_port']); } } else { $post['control_port'] = 953; } return $post; }
/** * Returns whether the CIDR is valid or not * * @since 2.1 * @package fmDNS * * @param string $cidr CIDR to check * @param integer $max_bits Maximum valid bits * @return boolean */ function checkCIDR($cidr, $max_bits) { return verifyNumber($cidr, 0, $max_bits); }
function validatePost($post) { global $fmdb, $__FM_CONFIG; if (empty($post['service_name'])) { return __('No service name defined.'); } /** Check name field length */ $field_length = getColumnLength('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'services', 'service_name'); if ($field_length !== false && strlen($post['service_name']) > $field_length) { return sprintf(dngettext($_SESSION['module'], 'Service name is too long (maximum %d character).', 'Service name is too long (maximum %d characters).', $field_length), $field_length); } /** Does the record already exist for this account? */ basicGet('fm_' . $__FM_CONFIG[$_SESSION['module']]['prefix'] . 'services', $post['service_name'], 'service_', 'service_name', "AND service_type='{$post['service_type']}' AND service_id!={$post['service_id']}"); if ($fmdb->num_rows) { return __('This service name already exists.'); } /** Set ports */ if ($post['service_type'] != 'icmp') { foreach ($post['port_src'] as $port) { if (!empty($port) && !verifyNumber($port, 0, 65535, false)) { return sprintf(__('Source ports must be a valid %s port range.'), strtoupper($post['service_type'])); } if (empty($port) || $port == 0) { $post['port_src'] = array('', ''); break; } } sort($post['port_src']); $post['service_src_ports'] = implode(':', $post['port_src']); if ($post['service_src_ports'] == ':') { $post['service_src_ports'] = null; } foreach ($post['port_dest'] as $port) { if (!empty($port) && !verifyNumber($port, 0, 65535, false)) { return sprintf(__('Destination ports must be a valid %s port range.'), strtoupper($post['service_type'])); } if (empty($port) || $port == 0) { $post['port_dest'] = array('', ''); break; } } sort($post['port_dest']); $post['service_dest_ports'] = implode(':', $post['port_dest']); if ($post['service_dest_ports'] == ':') { $post['service_dest_ports'] = null; } unset($post['service_icmp_code']); unset($post['service_icmp_type']); } else { if (!empty($post['service_icmp_type']) && !verifyNumber($post['service_icmp_type'], -1, 40, false)) { return __('ICMP type is invalid.'); } if (empty($post['service_icmp_type'])) { $post['service_icmp_type'] = 0; } if (!empty($post['service_icmp_code']) && !verifyNumber($post['service_icmp_code'], -1, 15, false)) { return __('ICMP code is invalid.'); } if (empty($post['service_icmp_code'])) { $post['service_icmp_code'] = 0; } } /** Process TCP Flags */ if (@is_array($post['service_tcp_flags']) && $post['service_type'] == 'tcp') { $decimals['settings'] = $decimals['mask'] = 0; foreach ($post['service_tcp_flags'] as $type_array => $dec_array) { foreach ($dec_array as $dec => $checked) { $decimals[$type_array] += $dec; } } $post['service_tcp_flags'] = implode(':', $decimals); } else { $post['service_tcp_flags'] = null; } return $post; }
/** * Cleans addresses for future parsing * * @since 1.0 * @package facileManager * @subpackage fmDNS */ function verifyAndCleanAddresses($data, $subnets_allowed = 'subnets-allowed') { /** Remove extra spaces */ $data = preg_replace('/\\s\\s+/', ' ', $data); /** Swap delimiters for ; */ $data = str_replace(array("\n", ';', ' ', ','), ',', $data); $data = str_replace(',,', ',', $data); $data = trim($data, ','); // if (!empty($data)) $data .= ','; $addresses = explode(',', $data); foreach ($addresses as $ip_address) { $ip_address = rtrim(trim($ip_address), '.'); if (!strlen($ip_address)) { continue; } // if ($allow_acl && preg_match("/^acl__(\d).*/", $ip_address)) continue; /** Handle negated addresses */ if (strpos($ip_address, '!') === 0) { $ip_address = substr($ip_address, 1); } /** IPv4 checks */ if (strpos($ip_address, ':') === false) { if (strpos($ip_address, '/') !== false && $subnets_allowed == 'subnets-allowed') { $cidr_array = explode('/', $ip_address); list($ip_address, $cidr) = $cidr_array; /** Valid CIDR? */ if (!verifyNumber($cidr, 0, 32)) { return sprintf(__('%s is not valid.'), "{$ip_address}/{$cidr}"); } } /** Create full IP */ $ip_octets = explode('.', $ip_address); if (count($ip_octets) < 4) { $ip_octets = array_merge($ip_octets, array_fill(count($ip_octets), 4 - count($ip_octets), 0)); } $ip_address = implode('.', $ip_octets); } if (verifyIPAddress($ip_address) === false) { return sprintf(__('%s is not valid.'), $ip_address); } } return $data; }