From 32f0677dbca9e3347b931c1d0105eb37aa57e90d Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 25 Jun 2021 16:21:17 +0200 Subject: [eventlog] Add event filtering and notification system --- modules-available/syslog/api.inc.php | 20 ++++------- modules-available/syslog/inc/clientlog.inc.php | 47 ++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 14 deletions(-) create mode 100644 modules-available/syslog/inc/clientlog.inc.php (limited to 'modules-available/syslog') diff --git a/modules-available/syslog/api.inc.php b/modules-available/syslog/api.inc.php index 3378afe6..cc64b31c 100644 --- a/modules-available/syslog/api.inc.php +++ b/modules-available/syslog/api.inc.php @@ -64,25 +64,17 @@ $longdesc = ''; if (isset($_POST['longdesc'])) $longdesc = $_POST['longdesc']; $longdesc = Request::post('longdesc', '', 'string'); -if ($type[0] !== '.' && $type[0] !== '~') { +if (preg_match('/^[a-z0-9\-]+$/', $type)) { - // Spam from IP - $row = Database::queryFirst('SELECT Count(*) AS cnt FROM clientlog WHERE clientip = :client AND dateline + 1800 > UNIX_TIMESTAMP()', array(':client' => $ip)); + // Spam from IP? + $row = Database::queryFirst('SELECT Count(*) AS cnt FROM clientlog + WHERE clientip = :client AND dateline + 1800 > UNIX_TIMESTAMP()', + [':client' => $ip]); if ($row !== false && $row['cnt'] > 250) { exit(0); } - $ret = Database::exec('INSERT INTO clientlog (dateline, logtypeid, clientip, machineuuid, description, extra) VALUES (UNIX_TIMESTAMP(), :type, :client, :uuid, :description, :longdesc)', array( - 'type' => $type, - 'client' => $ip, - 'description' => $description, - 'longdesc' => $longdesc, - 'uuid' => $uuid, - ), true); - if ($ret === false) { - error_log("Constraint failed for client log from $uuid for $type : $description"); - die("NOPE.\n"); - } + ClientLog::write(['machineuuid' => $uuid, 'clientip' => $ip], $type, $description, $longdesc); } diff --git a/modules-available/syslog/inc/clientlog.inc.php b/modules-available/syslog/inc/clientlog.inc.php new file mode 100644 index 00000000..b38c29fe --- /dev/null +++ b/modules-available/syslog/inc/clientlog.inc.php @@ -0,0 +1,47 @@ + $client['clientip']]); + if ($res === false) { + error_log("Invalid client IP for client log: " . $client['clientip']); + return false; + } + $client['machineuuid'] = $res['machineuuid']; + } + if (!isset($client['clientip'])) { + $res = Database::queryFirst("SELECT clientip FROM machine WHERE machineuuid = :uuid", + ['uuid' => $client['machineuuid']]); + if ($res === false) { + error_log("Invalid machine uuid for client log: " . $client['machineuuid']); + return false; + } + $client['clientip'] = $res['clientip']; + } + $data = [ + 'type' => $type, + 'clientip' => $client['clientip'], + 'description' => $description, + 'extra' => $longDesc, + 'machineuuid' => $client['machineuuid'], + ]; + $res = Database::exec('INSERT INTO clientlog (dateline, logtypeid, clientip, machineuuid, description, extra) + VALUES (UNIX_TIMESTAMP(), :type, :clientip, :machineuuid, :description, :extra)', $data, true); + if ($res === false) { + error_log("Constraint failed for client log from {$client['machineuuid']} for $type : $description"); + return false; + } + EventLog::applyFilterRules($type, $data + $client); + return true; + } + +} \ No newline at end of file -- cgit v1.2.3-55-g7522