Revision 8451d0a9
Added by Renato Botelho almost 8 years ago
src/etc/inc/captiveportal.inc | ||
---|---|---|
356 | 356 |
unlink_if_exists("{$g['vardb_path']}/captiveportal_radius_{$cpzone}.db"); |
357 | 357 |
unlink_if_exists("{$g['vardb_path']}/captiveportal_{$cpzone}.rules"); |
358 | 358 |
/* Release allocated pipes for this zone */ |
359 |
captiveportal_free_dnrules(); |
|
359 |
$pipes_to_remove = captiveportal_free_dnrules();
|
|
360 | 360 |
|
361 |
captiveportal_delete_rules(); |
|
361 |
captiveportal_delete_rules($pipes_to_remove);
|
|
362 | 362 |
|
363 | 363 |
if (empty($config['captiveportal'])) { |
364 | 364 |
set_single_sysctl("net.link.ether.ipfw", "0"); |
... | ... | |
687 | 687 |
} |
688 | 688 |
|
689 | 689 |
/* Delete all rules related to specific cpzone */ |
690 |
function captiveportal_delete_rules() { |
|
690 |
function captiveportal_delete_rules($pipes_to_remove = array()) {
|
|
691 | 691 |
global $g, $cpzoneid, $cpzone; |
692 | 692 |
|
693 | 693 |
$skipto1 = captiveportal_ipfw_ruleno($cpzoneid); |
... | ... | |
715 | 715 |
$delrules .= "table {$table} destroy\n"; |
716 | 716 |
} |
717 | 717 |
|
718 |
foreach ($pipes_to_remove as $pipeno) { |
|
719 |
$delrules .= "pipe delete {$pipeno}\n"; |
|
720 |
} |
|
721 |
|
|
718 | 722 |
if (empty($delrules)) { |
719 | 723 |
return; |
720 | 724 |
} |
... | ... | |
1764 | 1768 |
function captiveportal_free_dnrules($rulenos_start = 2000, $rulenos_range_max = 64500) { |
1765 | 1769 |
global $g, $cpzone; |
1766 | 1770 |
|
1771 |
$removed_pipes = array(); |
|
1772 |
|
|
1767 | 1773 |
$cpruleslck = lock("captiveportalrulesdn", LOCK_EX); |
1768 | 1774 |
if (file_exists("{$g['vardb_path']}/captiveportaldn.rules")) { |
1769 | 1775 |
$rules = unserialize(file_get_contents("{$g['vardb_path']}/captiveportaldn.rules")); |
... | ... | |
1771 | 1777 |
while ($ridx < $rulenos_range_max) { |
1772 | 1778 |
if ($rules[$ridx] == $cpzone) { |
1773 | 1779 |
$rules[$ridx] = false; |
1780 |
$removed_pipes[] = $ridx; |
|
1774 | 1781 |
$ridx++; |
1775 | 1782 |
$rules[$ridx] = false; |
1783 |
$removed_pipes[] = $ridx; |
|
1776 | 1784 |
$ridx++; |
1777 | 1785 |
} else { |
1778 | 1786 |
$ridx += 2; |
... | ... | |
1782 | 1790 |
unset($rules); |
1783 | 1791 |
} |
1784 | 1792 |
unlock($cpruleslck); |
1793 |
|
|
1794 |
return $removed_pipes; |
|
1785 | 1795 |
} |
1786 | 1796 |
|
1787 | 1797 |
function captiveportal_get_next_dn_ruleno($rulenos_start = 2000, $rulenos_range_max = 64500) { |
Also available in: Unified diff
Fix #7834: Delete IPFW pipes when disable Captive Portal zone