示例#1
0
 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;
 }
示例#2
0
 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);
}
示例#4
0
 /**
  * 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;
 }
示例#5
0
 /**
  * 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;
 }
示例#6
0
 /**
  * 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;
 }
示例#7
0
 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;
 }
示例#8
0
/**
 * 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);
}
示例#9
0
 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;
 }
示例#10
0
/**
 * 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;
}