summaryrefslogtreecommitdiffstats
path: root/etc/inc/captiveportal.inc
diff options
context:
space:
mode:
authorErmal <eri@pfsense.org>2013-12-24 10:22:54 +0000
committerErmal <eri@pfsense.org>2013-12-24 10:22:54 +0000
commit4fd85b115e2550969ddeadd43a2bc6dafff21779 (patch)
tree11d6712b04ea66e436de81f32ddff9a3c68c487d /etc/inc/captiveportal.inc
parent27cea9a385ea9b1df2cc3c23d9e1a619f83b3746 (diff)
downloadpfsense-4fd85b115e2550969ddeadd43a2bc6dafff21779.zip
pfsense-4fd85b115e2550969ddeadd43a2bc6dafff21779.tar.gz
Switch to a while loop to make things clear and readble. Also properly set zone dedicated rules in the rules/pipes DBs to properly release when a zone is deactivated
Diffstat (limited to 'etc/inc/captiveportal.inc')
-rw-r--r--etc/inc/captiveportal.inc89
1 files changed, 54 insertions, 35 deletions
diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc
index 9531d3d..8234895 100644
--- a/etc/inc/captiveportal.inc
+++ b/etc/inc/captiveportal.inc
@@ -1344,15 +1344,18 @@ function captiveportal_free_dnrules($rulenos_start = 2000, $rulenos_range_max =
$cpruleslck = lock("captiveportalrulesdn", LOCK_EX);
if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules"));
- for ($ridx = $rulenos_start; $ridx < $rulenos_range_max; $ridx++) {
+ while ($ridx < $rulenos_range_max) {
if ($rules[$ridx] == $cpzone) {
$rules[$ridx] = false;
$ridx++;
$rules[$ridx] = false;
- }
+ $ridx++;
+ } else
+ $ridx += 2;
}
+ file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
+ unset($rules);
}
- file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
unlock($cpruleslck);
}
@@ -1363,24 +1366,28 @@ function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_
$ruleno = 0;
if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules"));
- for ($ridx = $rulenos_start; $ridx < $rulenos_range_max; $ridx++) {
- if ($rules[$ridx]) {
+ $ridx = $rulenos_start;
+ while ($ridx < $rulenos_range_max) {
+ if ($rules[$ridx] === false) {
+ $ridx += 2;
+ } else {
+ $ruleno = $ridx;
+ $rules[$ridx] = $cpzone;
$ridx++;
- continue;
+ $rules[$ridx] = $cpzone;
+ break;
}
- $ruleno = $ridx;
- $rules[$ridx] = $cpzone;
- $rules[++$ridx] = $cpzone;
- break;
}
} else {
$rules = array_pad(array(), $rulenos_range_max, false);
$ruleno = $rulenos_start;
$rules[$rulenos_start] = $cpzone;
- $rules[++$rulenos_start] = $cpzone;
+ $rulenos_start++;
+ $rules[$rulenos_start] = $cpzone;
}
file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
unlock($cpruleslck);
+ unset($rules);
return $ruleno;
}
@@ -1395,6 +1402,7 @@ function captiveportal_free_dn_ruleno($ruleno) {
$ruleno++;
$rules[$ruleno] = false;
file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
+ unset($rules);
}
unlock($cpruleslck);
}
@@ -1407,17 +1415,19 @@ function captiveportal_get_dn_passthru_ruleno($value) {
return NULL;
$cpruleslck = lock("captiveportalrulesdn", LOCK_EX);
+ $ruleno = NULL;
if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules"));
- $ruleno = intval(`/sbin/ipfw -x {$cpzone} show | /usr/bin/grep {$value} | /usr/bin/grep -v grep | /usr/bin/cut -d " " -f 5 | /usr/bin/head -n 1`);
- if ($rules[$ruleno]) {
- unlock($cpruleslck);
- return $ruleno;
- }
+ unset($output);
+ $_gb = exec("/sbin/ipfw -x {$cpzone} show | /usr/bin/grep {$value} | /usr/bin/grep -v grep | /usr/bin/cut -d \" \" -f 5 | /usr/bin/head -n 1", $output);
+ $ruleno = intval($output[0]);
+ if (!$rules[$ruleno])
+ $ruleno = NULL;
+ unset($rules);
}
-
unlock($cpruleslck);
- return NULL;
+
+ return $ruleno;
}
/*
@@ -1436,28 +1446,33 @@ function captiveportal_get_next_ipfw_ruleno($rulenos_start = 2, $rulenos_range_m
$ruleno = 0;
if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"));
- for ($ridx = 2; $ridx < ($rulenos_range_max - $rulenos_start); $ridx++) {
+ $ridx = $rulenos_start;
+ while ($ridx < $rulenos_range_max) {
if ($rules[$ridx]) {
/*
* This allows our traffic shaping pipes to be the in pipe the same as ruleno
* and the out pipe ruleno + 1.
*/
+ $ridx += 2;
+ } else {
+ $ruleno = $ridx;
+ $rules[$ridx] = $cpzone;
$ridx++;
- continue;
+ $rules[$ridx] = $cpzone;
+ break;
}
- $ruleno = $ridx;
- $rules[$ridx] = "used";
- $rules[++$ridx] = "used";
- break;
}
} else {
$rules = array_pad(array(), $rulenos_range_max, false);
- $rules[$rulenos_start] = "used";
- $rules[++$rulenos_start] = "used";
- $ruleno = 2;
+ $ruleno = $rulenos_start;
+ $rules[$rulenos_start] = $cpzone;
+ $rulenos_start++;
+ $rules[$rulenos_start] = $cpzone;
}
file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules));
unlock($cpruleslck);
+ unset($rules);
+
return $ruleno;
}
@@ -1472,10 +1487,12 @@ function captiveportal_free_ipfw_ruleno($ruleno) {
if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"));
$rules[$ruleno] = false;
- $rules[++$ruleno] = false;
+ $ruleno++;
+ $rules[$ruleno] = false;
file_put_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules", serialize($rules));
}
unlock($cpruleslck);
+ unset($rules);
}
function captiveportal_get_ipfw_passthru_ruleno($value) {
@@ -1486,17 +1503,19 @@ function captiveportal_get_ipfw_passthru_ruleno($value) {
return NULL;
$cpruleslck = lock("captiveportalrules{$cpzone}", LOCK_EX);
+ $ruleno = NULL;
if (file_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules")) {
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"));
- $ruleno = intval(`/sbin/ipfw -x {$cpzone} show | /usr/bin/grep {$value} | /usr/bin/grep -v grep | /usr/bin/cut -d " " -f 1 | /usr/bin/head -n 1`);
- if ($rules[$ruleno]) {
- unlock($cpruleslck);
- return $ruleno;
- }
+ unset($output);
+ $_gb = exec("/sbin/ipfw -x {$cpzone} show | /usr/bin/grep {$value} | /usr/bin/grep -v grep | /usr/bin/cut -d \" \" -f 5 | /usr/bin/head -n 1", $output);
+ $ruleno = intval($output[0]);
+ if (!$rules[$ruleno])
+ $ruleno = NULL;
}
-
unlock($cpruleslck);
- return NULL;
+ unset($rules);
+
+ return $ruleno;
}
/**
OpenPOWER on IntegriCloud