From 4e94a4ee26d8404a57d854e81a911355e2d14f93 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 13 Sep 2022 10:37:37 +0200 Subject: [statistics] Filter: Allow mac address with ':' and no separator at all Closes #3914 --- .../statistics/inc/statisticsfilter.inc.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'modules-available/statistics') diff --git a/modules-available/statistics/inc/statisticsfilter.inc.php b/modules-available/statistics/inc/statisticsfilter.inc.php index c54c56d1..d23ba92c 100644 --- a/modules-available/statistics/inc/statisticsfilter.inc.php +++ b/modules-available/statistics/inc/statisticsfilter.inc.php @@ -256,7 +256,7 @@ abstract class StatisticsFilter 'clientip' => new IpStatisticsFilter(), 'hostname' => new SimpleStatisticsFilter('hostname', self::OP_STRCMP, 'pc.fqdn.example.com'), 'machineuuid' => new SimpleStatisticsFilter('machineuuid', self::OP_STRCMP, '88888888-4444-4444-121212121212'), - 'macaddr' => new SimpleStatisticsFilter('macaddr', self::OP_STRCMP, '11-22-33-44-55-66'), + 'macaddr' => new MacAddressStatisticsFilter(), 'firstseen' => new DateStatisticsFilter('firstseen', '2020-10-15 14:00'), 'lastseen' => new DateStatisticsFilter('lastseen', '2020-10-15 14:00'), 'lastboot' => new DateStatisticsFilter('lastboot', '2020-10-15 14:00'), @@ -730,6 +730,26 @@ class NicSpeedStatisticsFilter extends StatisticsFilter } +class MacAddressStatisticsFilter extends SimpleStatisticsFilter +{ + public function __construct() + { + parent::__construct('macaddr', self::OP_STRCMP, '11-22-33-44-55-66'); + } + + public function whereClause(string $operator, $argument, array &$args, array &$joins): string + { + // Allow just 12 hex digits, and convert ':' to '-', which we unfortunately settled on for the DB format + if (preg_match('/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i', + $argument, $out)) { + $argument = $out[1] . '-' . $out[2] . '-' . $out[3] . '-' . $out[4] . '-' . $out[5] . '-' . $out[6]; + } elseif (strpos($argument, ':') !== false) { + $argument = str_replace(':', '-', $argument); + } + return parent::whereClause($operator, $argument, $args, $joins); + } +} + class AnyHardwarePropStatisticsFilter extends StatisticsFilter { -- cgit v1.2.3-55-g7522