From 4c1935a6b6ec8d8cb95c6b5af3399927d30fbe66 Mon Sep 17 00:00:00 2001 From: Savetheinternet Date: Wed, 27 Jul 2011 13:40:27 +1000 Subject: per-board bans --- inc/functions.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'inc/functions.php') diff --git a/inc/functions.php b/inc/functions.php index 91b68bfc..c8d52160 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -400,7 +400,12 @@ $body = '

You are banned! ;_;

-

You have been banned ' . +

You have been banned from ' . + (!isset($ban['uri']) ? + 'all boards': + '' . sprintf($config['board_abbreviation'], $ban['uri']) . '' + ) . + ' ' . ($ban['reason'] ? 'for the following reason:' : 'for an unspecified reason.') . '

' . ($ban['reason'] ? @@ -464,7 +469,7 @@ )); } - function checkBan() { + function checkBan($board = 0) { global $config, $memcached; if(!isset($_SERVER['REMOTE_ADDR'])) { @@ -474,17 +479,19 @@ if($config['memcached']['enabled']) { // Cached ban? - if($ban = $memcached->get("ban_${_SERVER['REMOTE_ADDR']}")) { + if($ban = $memcached->get("ban_${board}_${_SERVER['REMOTE_ADDR']}")) { displayBan($ban); } } - $query = prepare("SELECT * FROM `bans` WHERE `ip` = :ip ORDER BY `expires` IS NULL DESC, `expires` DESC, `expires` DESC LIMIT 1"); + $query = prepare("SELECT `set`, `expires`, `reason`, `board`, `uri` FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` WHERE (`board` IS NULL OR `uri` = :board) AND `ip` = :ip ORDER BY `expires` IS NULL DESC, `expires` DESC, `expires` DESC LIMIT 1"); $query->bindValue(':ip', $_SERVER['REMOTE_ADDR']); + $query->bindValue(':board', $board); $query->execute() or error(db_error($query)); if($query->rowCount() < 1 && $config['ban_range']) { - $query = prepare("SELECT * FROM `bans` WHERE :ip REGEXP CONCAT('^', REPLACE(REPLACE(`ip`, '.', '\\.'), '*', '[0-9]*'), '$') ORDER BY `expires` IS NULL DESC, `expires` DESC LIMIT 1"); + $query = prepare("SELECT `set`, `expires`, `reason`, `board`, `uri` FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` WHERE (`board` IS NULL OR `uri` = :board) AND :ip REGEXP CONCAT('^', REPLACE(REPLACE(`ip`, '.', '\\.'), '*', '[0-9]*'), '$') ORDER BY `expires` IS NULL DESC, `expires` DESC LIMIT 1"); $query->bindValue(':ip', $_SERVER['REMOTE_ADDR']); + $query->bindValue(':board', $board); $query->execute() or error(db_error($query)); } @@ -506,7 +513,7 @@ } if($config['memcached']['enabled']) - $memcached->set("ban_${_SERVER['REMOTE_ADDR']}", $ban, $ban['expires']); + $memcached->set("ban_${board}_${_SERVER['REMOTE_ADDR']}", $ban, $ban['expires']); displayBan($ban); } } -- cgit v1.3