diff options
author | Renato Botelho <garga@FreeBSD.org> | 2013-09-09 10:33:55 -0300 |
---|---|---|
committer | Renato Botelho <garga@FreeBSD.org> | 2013-09-12 08:44:51 -0300 |
commit | 0d33f1fc6f9e548f6918b828c6c272d6b7296ec8 (patch) | |
tree | fb303da2933080918092dc53fe0156bfe4ed2df1 /etc | |
parent | 6b1cb3fda770ea2edeed57c353e131f17830cab4 (diff) | |
download | pfsense-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.inc | 35 |
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; |