diff options
author | Ermal Luçi <eri@pfsense.org> | 2009-10-09 18:37:55 +0000 |
---|---|---|
committer | Ermal Luçi <eri@pfsense.org> | 2009-10-09 18:37:55 +0000 |
commit | 32166410625a32602904170e7a2d501d21cf36c4 (patch) | |
tree | b37b9ccdd45f982ec927775f8b9d1537f2dd37ea /etc/rc.filter_synchronize | |
parent | 7c26752dfcef83d3b957b7127c309fc4ef2e3cc1 (diff) | |
download | pfsense-32166410625a32602904170e7a2d501d21cf36c4.zip pfsense-32166410625a32602904170e7a2d501d21cf36c4.tar.gz |
Correctly fix Bug #38
The issue is that when unsetting array members the count() that is evaluated on every iteration so it will not correctly process some items.
Diffstat (limited to 'etc/rc.filter_synchronize')
-rw-r--r-- | etc/rc.filter_synchronize | 94 |
1 files changed, 54 insertions, 40 deletions
diff --git a/etc/rc.filter_synchronize b/etc/rc.filter_synchronize index 182a1f1..7e9a980 100644 --- a/etc/rc.filter_synchronize +++ b/etc/rc.filter_synchronize @@ -86,48 +86,62 @@ function carp_sync_xml($url, $password, $sections, $port = 80, $method = 'pfsens $config_copy = $config; /* strip out nosync items */ - if (is_array($config_copy['nat']['advancedoutbound']['rule'])) - for ($x = 0; $x < count($config_copy['nat']['advancedoutbound']['rule']); $x++) { - $config_copy['nat']['advancedoutbound']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['advancedoutbound']['rule'][$x]['descr']); - if (isset ($config_copy['nat']['advancedoutbound']['rule'][$x]['nosync'])) - unset ($config_copy['nat']['advancedoutbound']['rule'][$x]); + if (is_array($config_copy['nat']['advancedoutbound']['rule'])) { + $rulescnt = count($config_copy['nat']['advancedoutbound']['rule']); + for ($x = 0; $x < $rulescnt; $x++) { + $config_copy['nat']['advancedoutbound']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['advancedoutbound']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['advancedoutbound']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['advancedoutbound']['rule'][$x]); + } + } + if (is_array($config_copy['nat']['rule'])) { + $natcnt = count($config_copy['nat']['rule']); + for ($x = 0; $x < $natcnt; $x++) { + $config_copy['nat']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['rule'][$x]['descr']); + if (isset ($config_copy['nat']['rule'][$x]['nosync'])) + unset ($config_copy['nat']['rule'][$x]); + } } - if (is_array($config_copy['nat']['rule'])) - for ($x = 0; $x < count($config_copy['nat']['rule']); $x++) { - $config_copy['nat']['rule'][$x]['descr'] = remove_special_characters($config_copy['nat']['rule'][$x]['descr']); - if (isset ($config_copy['nat']['rule'][$x]['nosync'])) - unset ($config_copy['nat']['rule'][$x]); - } - if (is_array($config_copy['filter']['rule'])) - for ($x = 0; $x < count($config_copy['filter']['rule']); $x++) { - $config_copy['filter']['rule'][$x]['descr'] = remove_special_characters($config_copy['filter']['rule'][$x]['descr']); - if (isset ($config_copy['filter']['rule'][$x]['nosync'])) - unset ($config_copy['filter']['rule'][$x]); - } - if (is_array($config_copy['aliases']['alias'])) - for ($x = 0; $x < count($config_copy['aliases']['alias']); $x++) { - $config_copy['aliases']['alias'][$x]['descr'] = remove_special_characters($config_copy['aliases']['alias'][$x]['descr']); - if (isset ($config_copy['aliases']['alias'][$x]['nosync'])) - unset ($config_copy['aliases']['alias'][$x]); - } - if (is_array($config_copy['dnsmasq']['hosts'])) - for ($x = 0; $x < count($config_copy['dnsmasq']['hosts']); $x++) { - $config_copy['dnsmasq']['hosts'][$x]['descr'] = remove_special_characters($config_copy['dnsmasq']['hosts'][$x]['descr']); - if (isset ($config_copy['dnsmasq']['hosts'][$x]['nosync'])) - unset ($config_copy['dnsmasq']['hosts'][$x]); - } - if (is_array($config_copy['virtualip']['vip'])) - for ($x = 0; $x < count($config_copy['virtualip']['vip']); $x++) { - $config_copy['virtualip']['vip'][$x]['descr'] = remove_special_characters($config_copy['virtualip']['vip'][$x]['descr']); - if (isset ($config_copy['virtualip']['vip'][$x]['nosync']) or $config_copy['virtualip']['vip'][$x]['mode'] == "proxyarp") - unset ($config_copy['virtualip']['vip'][$x]); - } - if (is_array($config_copy['ipsec']['tunnel'])) - for ($x = 0; $x < count($config_copy['ipsec']['tunnel']); $x++) { - $config_copy['ipsec']['tunnel'][$x]['descr'] = remove_special_characters($config_copy['ipsec']['tunnel'][$x]['descr']); - if (isset ($config_copy['ipsec']['tunnel'][$x]['nosync'])) - unset ($config_copy['ipsec']['tunnel'][$x]); + if (is_array($config_copy['filter']['rule'])) { + $filtercnt = count($config_copy['filter']['rule']); + for ($x = 0; $x < $filtercnt; $x++) { + $config_copy['filter']['rule'][$x]['descr'] = remove_special_characters($config_copy['filter']['rule'][$x]['descr']); + if (isset ($config_copy['filter']['rule'][$x]['nosync'])) + unset ($config_copy['filter']['rule'][$x]); + } } + if (is_array($config_copy['aliases']['alias'])) { + $aliascnt = count($config_copy['aliases']['alias']); + for ($x = 0; $x < $aliascnt; $x++) { + $config_copy['aliases']['alias'][$x]['descr'] = remove_special_characters($config_copy['aliases']['alias'][$x]['descr']); + if (isset ($config_copy['aliases']['alias'][$x]['nosync'])) + unset ($config_copy['aliases']['alias'][$x]); + } + } + if (is_array($config_copy['dnsmasq']['hosts'])) { + $dnscnt = count($config_copy['dnsmasq']['hosts']); + for ($x = 0; $x < $dnscnt; $x++) { + $config_copy['dnsmasq']['hosts'][$x]['descr'] = remove_special_characters($config_copy['dnsmasq']['hosts'][$x]['descr']); + if (isset ($config_copy['dnsmasq']['hosts'][$x]['nosync'])) + unset ($config_copy['dnsmasq']['hosts'][$x]); + } + } + if (is_array($config_copy['virtualip']['vip'])) { + $vipcnt = count($config_copy['virtualip']['vip']); + for ($x = 0; $x < $vipcnt; $x++) { + $config_copy['virtualip']['vip'][$x]['descr'] = remove_special_characters($config_copy['virtualip']['vip'][$x]['descr']); + if (isset ($config_copy['virtualip']['vip'][$x]['nosync']) or $config_copy['virtualip']['vip'][$x]['mode'] == "proxyarp") + unset ($config_copy['virtualip']['vip'][$x]); + } + } + if (is_array($config_copy['ipsec']['tunnel'])) { + $ipseccnt = count($config_copy['ipsec']['tunnel']); + for ($x = 0; $x < $ipseccnt; $x++) { + $config_copy['ipsec']['tunnel'][$x]['descr'] = remove_special_characters($config_copy['ipsec']['tunnel'][$x]['descr']); + if (isset ($config_copy['ipsec']['tunnel'][$x]['nosync'])) + unset ($config_copy['ipsec']['tunnel'][$x]); + } + } foreach ($sections as $section) { /* we can't use array_intersect_key() |