summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2013-09-09 10:33:55 -0300
committerRenato Botelho <garga@FreeBSD.org>2013-09-12 08:44:51 -0300
commit0d33f1fc6f9e548f6918b828c6c272d6b7296ec8 (patch)
treefb303da2933080918092dc53fe0156bfe4ed2df1 /etc
parent6b1cb3fda770ea2edeed57c353e131f17830cab4 (diff)
downloadpfsense-0d33f1fc6f9e548f6918b828c6c272d6b7296ec8.zip
pfsense-0d33f1fc6f9e548f6918b828c6c272d6b7296ec8.tar.gz
When block a MAC address, add it to a DB to make it possible to redirect it to a URL
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/captiveportal.inc35
1 files changed, 34 insertions, 1 deletions
diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc
index e1452ef..d143f4d 100644
--- a/etc/inc/captiveportal.inc
+++ b/etc/inc/captiveportal.inc
@@ -952,8 +952,12 @@ function captiveportal_passthrumac_configure_entry($macent) {
$rules = "add {$ruleno} pipe {$pipeup} ip from any to any MAC any {$macent['mac']}\n";
$ruleno++;
$rules .= "add {$ruleno} pipe {$pipedown} ip from any to any MAC {$macent['mac']} any\n";
- } else
+ } else {
$rules = "add {$ruleno} deny ip from any to any MAC {$macent['mac']} any\n";
+ $blockedmacs = captiveportal_read_blockedmacs_db();
+ $blockedmacs[] = $macent['mac'];
+ captiveportal_write_blockedmacs_db($blockedmacs);
+ }
return $rules;
}
@@ -979,6 +983,12 @@ function captiveportal_passthrumac_delete_entry($macent) {
$rules .= "pipe delete " . $pipeno . "\n";
$rules .= "pipe delete " . ++$pipeno . "\n";
}
+ } else {
+ $blockedmacs = captiveportal_read_blockedmacs_db();
+ foreach ($blockedmacs as $idx => $blockedmac)
+ if ($blockedmac == $macent['mac'])
+ unset($blockedmacs[$idx]);
+ captiveportal_write_blockedmacs_db($blockedmacs);
}
return $rules;
@@ -2087,6 +2097,29 @@ function captiveportal_write_usedmacs_db($usedmacs) {
unlock($cpumaclck);
}
+function captiveportal_read_blockedmacs_db() {
+ global $g, $cpzone;
+
+ $cpumaclck = lock("captiveblockedmacs{$cpzone}");
+ if (file_exists("{$g['vardb_path']}/captiveportal_blockedmacs_{$cpzone}.db")) {
+ $blockedmacs = file("{$g['vardb_path']}/captiveportal_blockedmacs_{$cpzone}.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ if (!$blockedmacs)
+ $blockedmacs = array();
+ } else
+ $blockedmacs = array();
+
+ unlock($cpumaclck);
+ return $blockedmacs;
+}
+
+function captiveportal_write_blockedmacs_db($blockedmacs) {
+ global $g, $cpzone;
+
+ $cpumaclck = lock("captiveblockedmacs{$cpzone}", LOCK_EX);
+ @file_put_contents("{$g['vardb_path']}/captiveportal_blockedmacs_{$cpzone}.db", implode("\n", $blockedmacs));
+ unlock($cpumaclck);
+}
+
function captiveportal_send_server_accounting($off = false) {
global $cpzone, $config;
OpenPOWER on IntegriCloud