summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Fonnesbeck <efonnes@gmail.com>2010-11-10 22:03:07 -0700
committerErik Fonnesbeck <efonnes@gmail.com>2010-11-10 22:43:08 -0700
commit88bc276013552268ebef7058cd7b58c89de67125 (patch)
tree5f496839e6dd01a9ece86526e869ac446568c114
parentea57ccb86b5c75246dabb8306c35b997cb4ede9d (diff)
downloadpfsense-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.inc16
-rwxr-xr-xusr/local/www/guiconfig.inc19
-rwxr-xr-xusr/local/www/interfaces_assign.php17
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"))
OpenPOWER on IntegriCloud