diff options
author | Erik Fonnesbeck <efonnes@gmail.com> | 2010-11-10 22:03:07 -0700 |
---|---|---|
committer | Erik Fonnesbeck <efonnes@gmail.com> | 2010-11-10 22:43:08 -0700 |
commit | 88bc276013552268ebef7058cd7b58c89de67125 (patch) | |
tree | 5f496839e6dd01a9ece86526e869ac446568c114 | |
parent | ea57ccb86b5c75246dabb8306c35b997cb4ede9d (diff) | |
download | pfsense-88bc276013552268ebef7058cd7b58c89de67125.zip pfsense-88bc276013552268ebef7058cd7b58c89de67125.tar.gz |
Fix filter_rules_sort's compare function to know about floating rules so it won't change their order.
-rw-r--r-- | etc/inc/util.inc | 16 | ||||
-rwxr-xr-x | usr/local/www/guiconfig.inc | 19 | ||||
-rwxr-xr-x | usr/local/www/interfaces_assign.php | 17 |
3 files changed, 28 insertions, 24 deletions
diff --git a/etc/inc/util.inc b/etc/inc/util.inc index 63b76da..2be567a 100644 --- a/etc/inc/util.inc +++ b/etc/inc/util.inc @@ -566,6 +566,22 @@ function get_configured_ip_aliases_list() { } +/* comparison function for sorting by the order in which interfaces are normally created */ +function compare_interface_friendly_names($a, $b) { + if ($a == $b) + return 0; + else if ($a == 'wan') + return -1; + else if ($b == 'wan') + return 1; + else if ($a == 'lan') + return -1; + else if ($b == 'lan') + return 1; + + return strnatcmp($a, $b); +} + /* return the configured interfaces list. */ function get_configured_interface_list($only_opt = false, $withdisabled = false) { global $config; diff --git a/usr/local/www/guiconfig.inc b/usr/local/www/guiconfig.inc index 4c68a32..d1a92c7 100755 --- a/usr/local/www/guiconfig.inc +++ b/usr/local/www/guiconfig.inc @@ -464,19 +464,22 @@ function filter_rules_sort() { for ($i = 0; isset($config['filter']['rule'][$i]); $i++) $config['filter']['rule'][$i]['seq'] = $i; - function filtercmp($a, $b) { - if ($a['interface'] == $b['interface']) - return $a['seq'] - $b['seq']; - else - return -strcmp($a['interface'], $b['interface']); - } - - usort($config['filter']['rule'], "filtercmp"); + usort($config['filter']['rule'], "filter_rules_compare"); /* strip the sequence numbers again */ for ($i = 0; isset($config['filter']['rule'][$i]); $i++) unset($config['filter']['rule'][$i]['seq']); } +function filter_rules_compare($a, $b) { + if ($a['interface'] == $b['interface'] || ( isset($a['floating']) && isset($b['floating']) )) + return $a['seq'] - $b['seq']; + else if (isset($a['floating'])) + return -1; + else if (isset($b['floating'])) + return 1; + else + return compare_interface_friendly_names($a['interface'], $b['interface']); +} function firewall_check_for_advanced_options(&$item) { $item_set = ""; diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php index b4c8525..fbd6e7f 100755 --- a/usr/local/www/interfaces_assign.php +++ b/usr/local/www/interfaces_assign.php @@ -320,7 +320,7 @@ if ($_GET['act'] == "add") { $config['interfaces'][$newifname]['descr'] = $descr; } - uksort($config['interfaces'], "compare_interface_names"); + uksort($config['interfaces'], "compare_interface_friendly_names"); /* Find an unused port for this interface */ foreach ($portlist as $portname => $portinfo) { @@ -350,21 +350,6 @@ if ($_GET['act'] == "add") { } -function compare_interface_names($a, $b) { - if ($a == $b) - return 0; - else if ($a == 'wan') - return -1; - else if ($b == 'wan') - return 1; - else if ($a == 'lan') - return -1; - else if ($b == 'lan') - return 1; - - return strnatcmp($a, $b); -} - include("head.inc"); if(file_exists("/var/run/interface_mismatch_reboot_needed")) |