summaryrefslogtreecommitdiffstats
path: root/etc/rc.filter_synchronize
diff options
context:
space:
mode:
authorErmal Luçi <eri@pfsense.org>2009-10-09 18:37:55 +0000
committerErmal Luçi <eri@pfsense.org>2009-10-09 18:37:55 +0000
commit32166410625a32602904170e7a2d501d21cf36c4 (patch)
treeb37b9ccdd45f982ec927775f8b9d1537f2dd37ea /etc/rc.filter_synchronize
parent7c26752dfcef83d3b957b7127c309fc4ef2e3cc1 (diff)
downloadpfsense-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_synchronize94
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()
OpenPOWER on IntegriCloud