summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorErmal <eri@pfsense.org>2013-07-10 15:26:26 +0000
committerErmal <eri@pfsense.org>2013-07-10 15:28:00 +0000
commitbc59bcff382f9310a58b310ec75f94ee650491ed (patch)
tree1dc64f24cb05a6d8e09534232b9e6c8a05c64baa /etc
parentde2fe652ca87d7c6c7db583050d3a807b034040f (diff)
downloadpfsense-bc59bcff382f9310a58b310ec75f94ee650491ed.zip
pfsense-bc59bcff382f9310a58b310ec75f94ee650491ed.tar.gz
Implement proper releasing of pipes allocated based on CPzone. Keep track of which zone a pipe is and release those pipes during disabling/deleting of zone. Ticket #3062, Pull request #698
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/captiveportal.inc30
1 files changed, 25 insertions, 5 deletions
diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc
index 830dbcb..071f823 100644
--- a/etc/inc/captiveportal.inc
+++ b/etc/inc/captiveportal.inc
@@ -363,6 +363,8 @@ EOD;
unlink_if_exists("{$g['vardb_path']}/captiveportal{$cpzone}.db");
unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db");
unlink_if_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules");
+ /* Release allocated pipes for this zone */
+ captiveportal_free_dnrules();
mwexec("/usr/local/sbin/ipfw_context -d {$cpzone}", true);
@@ -1341,8 +1343,26 @@ function captiveportal_write_elements() {
return 0;
}
+function captiveportal_free_dnrules($rulenos_start = 2000, $rulenos_range_max = 64500) {
+ global $cpzone;
+
+ $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++) {
+ if ($rules[$ridx] == $cpzone) {
+ $rules[$ruleno] = false;
+ $ridx++;
+ $rules[$ruleno] = false;
+ }
+ }
+ }
+ file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
+ unlock($cpruleslck);
+}
+
function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_max = 64500) {
- global $config, $g;
+ global $config, $g, $cpzone;
$cpruleslck = lock("captiveportalrulesdn", LOCK_EX);
$ruleno = 0;
@@ -1354,15 +1374,15 @@ function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_
continue;
}
$ruleno = $ridx;
- $rules[$ridx] = "used";
- $rules[++$ridx] = "used";
+ $rules[$ridx] = $cpzone;
+ $rules[++$ridx] = $cpzone;
break;
}
} else {
$rules = array_pad(array(), $rulenos_range_max, false);
$ruleno = $rulenos_start;
- $rules[$rulenos_start] = "used";
- $rules[++$rulenos_start] = "used";
+ $rules[$rulenos_start] = $cpzone;
+ $rules[++$rulenos_start] = $cpzone;
}
file_put_contents("{$g['vardb_path']}/captiveportaldn.rules", serialize($rules));
unlock($cpruleslck);
OpenPOWER on IntegriCloud