diff --git a/src/www/vpn_ipsec_mobile.php b/src/www/vpn_ipsec_mobile.php index c8e0e7cd0..cd4ce25d9 100644 --- a/src/www/vpn_ipsec_mobile.php +++ b/src/www/vpn_ipsec_mobile.php @@ -34,7 +34,7 @@ require_once("services.inc"); require_once("pfsense-utils.inc"); if (!is_array($config['ipsec'])) { - $config['ipsec'] = array(); + $config['ipsec'] = array(); } if (!is_array($config['ipsec']['phase1'])) { @@ -45,116 +45,73 @@ if (!is_array($config['ipsec']['client'])) { $config['ipsec']['client'] = array(); } -$a_phase1 = &$config['ipsec']['phase1']; -$a_client = &$config['ipsec']['client']; +// define formfields +$form_fields = "user_source,group_source,pool_address,pool_netbits,net_list +,save_passwd,dns_domain,dns_split,dns_server1,dns_server2,dns_server3 +,dns_server4,wins_server1,wins_server2,pfs_group,login_banner"; -if (count($a_client)) { - $pconfig['enable'] = $a_client['enable']; +if ($_SERVER['REQUEST_METHOD'] === 'GET') { + $pconfig = array(); + // defaults + $pconfig['pool_netbits'] = 24; - $pconfig['user_source'] = $a_client['user_source']; - $pconfig['group_source'] = $a_client['group_source']; - - $pconfig['pool_address'] = $a_client['pool_address']; - $pconfig['pool_netbits'] = $a_client['pool_netbits']; - $pconfig['net_list'] = $a_client['net_list']; - $pconfig['save_passwd'] = $a_client['save_passwd']; - $pconfig['dns_domain'] = $a_client['dns_domain']; - $pconfig['dns_split'] = $a_client['dns_split']; - $pconfig['dns_server1'] = $a_client['dns_server1']; - $pconfig['dns_server2'] = $a_client['dns_server2']; - $pconfig['dns_server3'] = $a_client['dns_server3']; - $pconfig['dns_server4'] = $a_client['dns_server4']; - $pconfig['wins_server1'] = $a_client['wins_server1']; - $pconfig['wins_server2'] = $a_client['wins_server2']; - $pconfig['pfs_group'] = $a_client['pfs_group']; - $pconfig['login_banner'] = $a_client['login_banner']; - - if (isset($pconfig['enable'])) { + // copy / initialize $pconfig attributes + foreach (explode(",",$form_fields) as $fieldname) { + $fieldname = trim($fieldname); + if(isset($config['ipsec']['client'][$fieldname])) { + $pconfig[$fieldname] = $config['ipsec']['client'][$fieldname]; + } elseif (!isset($pconfig[$fieldname])) { + // initialize element + $pconfig[$fieldname] = null; + } + } + if (isset($config['ipsec']['client']['enable'])) { $pconfig['enable'] = true; } - - if ($pconfig['pool_address']&&$pconfig['pool_netbits']) { - $pconfig['pool_enable'] = true; - } else { - $pconfig['pool_netbits'] = 24; + if (isset($config['ipsec']['client']['net_list'])) { + $pconfig['net_list'] = true; } - if (isset($pconfig['net_list'])) { - $pconfig['net_list_enable'] = true; + if (isset($config['ipsec']['client']['save_passwd'])) { + $pconfig['save_passwd'] = true; } - - if (isset($pconfig['save_passwd'])) { - $pconfig['save_passwd_enable'] = true; - } - - if ($pconfig['dns_domain']) { - $pconfig['dns_domain_enable'] = true; - } - - if ($pconfig['dns_split']) { - $pconfig['dns_split_enable'] = true; - } - - if ($pconfig['dns_server1']||$pconfig['dns_server2']||$pconfig['dns_server3']||$pconfig['dns_server4']) { - $pconfig['dns_server_enable'] = true; - } - - if ($pconfig['wins_server1']||$pconfig['wins_server2']) { - $pconfig['wins_server_enable'] = true; - } - - if (isset($pconfig['pfs_group'])) { - $pconfig['pfs_group_enable'] = true; - } - - if ($pconfig['login_banner']) { - $pconfig['login_banner_enable'] = true; - } -} - -if ($_POST['create']) { - header("Location: vpn_ipsec_phase1.php?mobile=true"); -} - -if ($_POST['apply']) { - $retval = 0; - $retval = vpn_ipsec_configure(); - $savemsg = get_std_save_message($retval); - if ($retval >= 0) { - if (is_subsystem_dirty('ipsec')) { - clear_subsystem_dirty('ipsec'); - } - } -} - -if ($_POST['submit']) { - unset($input_errors); +} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { + $input_errors = array(); $pconfig = $_POST; + if (isset($_POST['create'])) { + // create new phase1 entry + header("Location: vpn_ipsec_phase1.php?mobile=true"); + } elseif (isset($_POST['apply'])) { + // apply changes + $retval = 0; + $retval = vpn_ipsec_configure(); + $savemsg = get_std_save_message($retval); + if ($retval >= 0) { + if (is_subsystem_dirty('ipsec')) { + clear_subsystem_dirty('ipsec'); + } + } + } elseif (isset($_POST['submit'])) { + // save form changes - /* input consolidation */ + // input preparations + if (!empty($pconfig['user_source'])) { + $pconfig['user_source'] = implode(",", $pconfig['user_source']); + } + /* input validation */ + $reqdfields = explode(" ", "user_source group_source"); + $reqdfieldsn = array(gettext("User Authentication Source"),gettext("Group Authentication Source")); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); - - /* input validation */ - - $reqdfields = explode(" ", "user_source group_source"); - $reqdfieldsn = array(gettext("User Authentication Source"),gettext("Group Authentication Source")); - - do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); - - if ($pconfig['pool_enable']) { - if (!is_ipaddr($pconfig['pool_address'])) { + if (!empty($pconfig['pool_address']) && !is_ipaddr($pconfig['pool_address'])) { $input_errors[] = gettext("A valid IP address for 'Virtual Address Pool Network' must be specified."); } - } - if ($pconfig['dns_domain_enable']) { - if (!is_domain($pconfig['dns_domain'])) { + if (!empty($pconfig['dns_domain']) && !is_domain($pconfig['dns_domain'])) { $input_errors[] = gettext("A valid value for 'DNS Default Domain' must be specified."); } - } - if ($pconfig['dns_split_enable']) { if (!empty($pconfig['dns_split'])) { $domain_array=preg_split("/[ ,]+/", $pconfig['dns_split']); foreach ($domain_array as $curdomain) { @@ -164,110 +121,71 @@ if ($_POST['submit']) { } } } - } - if ($pconfig['dns_server_enable']) { - if (!$pconfig['dns_server1'] && !$pconfig['dns_server2'] && - !$pconfig['dns_server3'] && !$pconfig['dns_server4'] ) { - $input_errors[] = gettext("At least one DNS server must be specified to enable the DNS Server option."); - } - if ($pconfig['dns_server1'] && !is_ipaddr($pconfig['dns_server1'])) { + if (!empty($pconfig['dns_server1']) && !is_ipaddr($pconfig['dns_server1'])) { $input_errors[] = gettext("A valid IP address for 'DNS Server #1' must be specified."); } - if ($pconfig['dns_server2'] && !is_ipaddr($pconfig['dns_server2'])) { + if (!empty($pconfig['dns_server2']) && !is_ipaddr($pconfig['dns_server2'])) { $input_errors[] = gettext("A valid IP address for 'DNS Server #2' must be specified."); } - if ($pconfig['dns_server3'] && !is_ipaddr($pconfig['dns_server3'])) { + if (!empty($pconfig['dns_server3']) && !is_ipaddr($pconfig['dns_server3'])) { $input_errors[] = gettext("A valid IP address for 'DNS Server #3' must be specified."); } - if ($pconfig['dns_server4'] && !is_ipaddr($pconfig['dns_server4'])) { + if (!empty($pconfig['dns_server4']) && !is_ipaddr($pconfig['dns_server4'])) { $input_errors[] = gettext("A valid IP address for 'DNS Server #4' must be specified."); } - } - if ($pconfig['wins_server_enable']) { - if (!$pconfig['wins_server1'] && !$pconfig['wins_server2']) { - $input_errors[] = gettext("At least one WINS server must be specified to enable the DNS Server option."); - } - if ($pconfig['wins_server1'] && !is_ipaddr($pconfig['wins_server1'])) { + if (!empty($pconfig['wins_server1']) && !is_ipaddr($pconfig['wins_server1'])) { $input_errors[] = gettext("A valid IP address for 'WINS Server #1' must be specified."); } - if ($pconfig['wins_server2'] && !is_ipaddr($pconfig['wins_server2'])) { + if (!empty($pconfig['wins_server2']) && !is_ipaddr($pconfig['wins_server2'])) { $input_errors[] = gettext("A valid IP address for 'WINS Server #2' must be specified."); } - } - if ($pconfig['login_banner_enable']) { - if (!strlen($pconfig['login_banner'])) { - $input_errors[] = gettext("A valid value for 'Login Banner' must be specified."); + if (count($input_errors) == 0) { + $client = array(); + $copy_fields = "user_source,group_source,pool_address,pool_netbits,dns_domain,dns_server1 + ,dns_server2,dns_server3,dns_server4,wins_server1,wins_server2 + ,dns_split,pfs_group,login_banner"; + foreach (explode(",",$copy_fields) as $fieldname) { + $fieldname = trim($fieldname); + if(!empty($pconfig[$fieldname])) { + $client[$fieldname] = $pconfig[$fieldname]; + } + } + if (!empty($pconfig['enable'])) { + $client['enable'] = true; + } + + if (!empty($pconfig['net_list'])) { + $client['net_list'] = true; + } + + if (!empty($pconfig['save_passwd'])) { + $client['save_passwd'] = true; + } + + $config['ipsec']['client'] = $client; + + write_config(); + mark_subsystem_dirty('ipsec'); + + header("Location: vpn_ipsec_mobile.php"); + exit; } } - if (!$input_errors) { - $client = array(); - - if ($pconfig['enable']) { - $client['enable'] = true; - } - - if (!empty($pconfig['user_source'])) { - $client['user_source'] = implode(",", $pconfig['user_source']); - } - $client['group_source'] = $pconfig['group_source']; - - if ($pconfig['pool_enable']) { - $client['pool_address'] = $pconfig['pool_address']; - $client['pool_netbits'] = $pconfig['pool_netbits']; - } - - if ($pconfig['net_list_enable']) { - $client['net_list'] = true; - } - - if ($pconfig['save_passwd_enable']) { - $client['save_passwd'] = true; - } - - if ($pconfig['dns_domain_enable']) { - $client['dns_domain'] = $pconfig['dns_domain']; - } - - if ($pconfig['dns_split_enable']) { - $client['dns_split'] = $pconfig['dns_split']; - } - - if ($pconfig['dns_server_enable']) { - $client['dns_server1'] = $pconfig['dns_server1']; - $client['dns_server2'] = $pconfig['dns_server2']; - $client['dns_server3'] = $pconfig['dns_server3']; - $client['dns_server4'] = $pconfig['dns_server4']; - } - - if ($pconfig['wins_server_enable']) { - $client['wins_server1'] = $pconfig['wins_server1']; - $client['wins_server2'] = $pconfig['wins_server2']; - } - - if ($pconfig['pfs_group_enable']) { - $client['pfs_group'] = $pconfig['pfs_group']; - } - - if ($pconfig['login_banner_enable']) { - $client['login_banner'] = $pconfig['login_banner']; - } - -// $echo "login banner = {$pconfig['login_banner']}"; - - $a_client = $client; - - write_config(); - mark_subsystem_dirty('ipsec'); - - header("Location: vpn_ipsec_mobile.php"); - exit; + // initialize missing post attributes + foreach (explode(",",$form_fields) as $fieldname) { + $fieldname = trim($fieldname); + if (!isset($pconfig[$fieldname])) { + $pconfig[$fieldname] = null; + } } } +legacy_html_escape_form_data($pconfig); + $pgtitle = array(gettext("VPN"),gettext("IPsec"),gettext("Mobile")); $shortcut_section = "ipsec"; @@ -278,6 +196,15 @@ include("head.inc"); - - +