summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/inc/filter_log.inc22
1 files changed, 18 insertions, 4 deletions
diff --git a/etc/inc/filter_log.inc b/etc/inc/filter_log.inc
index cddd5d2..6b3e279 100644
--- a/etc/inc/filter_log.inc
+++ b/etc/inc/filter_log.inc
@@ -81,11 +81,17 @@ function conv_log_filter($logfile, $nentries, $tail = 50, $filtertext = "", $fil
return isset($config['syslog']['reverse']) ? $filterlog : array_reverse($filterlog);
}
+function escape_filter_regex($filtertext) {
+ /* If the caller (user) has not already put a backslash before a slash, to escape it in the regex, */
+ /* then this will do it. Take out any "\/" already there, then turn all ordinary "/" into "\/". */
+ return str_replace('/', '\/', str_replace('\/', '/', $filtertext));
+}
+
function match_filter_line($flent, $filtertext = "") {
if (!$filtertext)
return true;
- $filtertext = str_replace(' ', '\s+', $filtertext);
- return preg_match("/{$filtertext}/i", implode(" ", array_values($flent)));
+ $filtertext = escape_filter_regex(str_replace(' ', '\s+', $filtertext));
+ return @preg_match("/{$filtertext}/i", implode(" ", array_values($flent)));
}
function match_filter_field($flent, $fields) {
@@ -95,12 +101,20 @@ function match_filter_field($flent, $fields) {
$fields[$field] = substr($fields[$field], 1);
if (preg_match("/act/i", $field)) {
if ( (in_arrayi($flent[$field], explode(",", str_replace(" ", ",", $fields[$field]))) ) ) return false;
- } else if ( (preg_match("/{$fields[$field]}/i", $flent[$field])) ) return false;
+ } else {
+ $field_regex = escape_filter_regex($fields[$field]);
+ if ( (@preg_match("/{$field_regex}/i", $flent[$field])) )
+ return false;
+ }
}
else {
if (preg_match("/act/i", $field)) {
if ( !(in_arrayi($flent[$field], explode(",", str_replace(" ", ",", $fields[$field]))) ) ) return false;
- } else if ( !(preg_match("/{$fields[$field]}/i", $flent[$field])) ) return false;
+ } else {
+ $field_regex = escape_filter_regex($fields[$field]);
+ if ( !(@preg_match("/{$field_regex}/i", $flent[$field])) )
+ return false;
+ }
}
}
return true;
OpenPOWER on IntegriCloud