diff options
author | Phil Davis <phil.davis@inf.org> | 2015-07-22 19:36:09 +0545 |
---|---|---|
committer | Phil Davis <phil.davis@inf.org> | 2015-07-22 19:36:09 +0545 |
commit | a607968ab4fbfc5fa3baf6ce6282065e22b81847 (patch) | |
tree | 5a7529bb3382dc94eab21982af9101e8f979af63 /usr/local | |
parent | fcb477c057a23706dc84b0b27deb2f411226faa0 (diff) | |
download | pfsense-a607968ab4fbfc5fa3baf6ce6282065e22b81847.zip pfsense-a607968ab4fbfc5fa3baf6ce6282065e22b81847.tar.gz |
Handle IPsec Advanced Settings save before IPsec is enabled
If the Advanced Settings are saved before any other IPsec is set up then $config['ipsec'] can be just the empty string. As a result you can get:
a) If you select some debug settings then those are not saved. The code to save those settings was only executed when $config['ipsec'] was already an array. Actually the code already did the necessary "if isset() then unset()" stuuf. So I just took the the "if is_array()" away from the code block.
b) Some potential unset() can go wrong with errors like:
Fatal error: Cannot unset string offsets in /usr/local/www/vpn_ipsec_settings.php on line 168
This is corrected by adding more "if (isset())" checks.
Fixes Redmine #4865
Diffstat (limited to 'usr/local')
-rw-r--r-- | usr/local/www/vpn_ipsec_settings.php | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/usr/local/www/vpn_ipsec_settings.php b/usr/local/www/vpn_ipsec_settings.php index f77135b..8b31f57 100644 --- a/usr/local/www/vpn_ipsec_settings.php +++ b/usr/local/www/vpn_ipsec_settings.php @@ -120,15 +120,13 @@ if ($_POST) { if (!$input_errors) { - if (is_array($config['ipsec'])) { - foreach ($ipsec_loglevels as $lkey => $ldescr) { - if (empty($_POST["ipsec_{$lkey}"])) { - if (isset($config['ipsec']["ipsec_{$lkey}"])) { - unset($config['ipsec']["ipsec_{$lkey}"]); - } - } else { - $config['ipsec']["ipsec_{$lkey}"] = $_POST["ipsec_{$lkey}"]; + foreach ($ipsec_loglevels as $lkey => $ldescr) { + if (empty($_POST["ipsec_{$lkey}"])) { + if (isset($config['ipsec']["ipsec_{$lkey}"])) { + unset($config['ipsec']["ipsec_{$lkey}"]); } + } else { + $config['ipsec']["ipsec_{$lkey}"] = $_POST["ipsec_{$lkey}"]; } } @@ -171,7 +169,9 @@ if ($_POST) { } if ($_POST['noshuntlaninterfaces'] == "yes") { - unset($config['ipsec']['noshuntlaninterfaces']); + if (isset($config['ipsec']['noshuntlaninterfaces'])) { + unset($config['ipsec']['noshuntlaninterfaces']); + } } else { $config['ipsec']['noshuntlaninterfaces'] = true; } @@ -188,7 +188,7 @@ if ($_POST) { if (!empty($_POST['uniqueids'])) { $config['ipsec']['uniqueids'] = $_POST['uniqueids']; - } else { + } else if (isset($config['ipsec']['uniqueids'])) { unset($config['ipsec']['uniqueids']); } @@ -196,8 +196,12 @@ if ($_POST) { $config['system']['maxmss_enable'] = true; $config['system']['maxmss'] = $_POST['maxmss']; } else { - unset($config['system']['maxmss_enable']); - unset($config['system']['maxmss']); + if (isset($config['system']['maxmss_enable'])) { + unset($config['system']['maxmss_enable']); + } + if (isset($config['system']['maxmss'])) { + unset($config['system']['maxmss']); + } } write_config(); |