summaryrefslogtreecommitdiffstats
path: root/etc/inc
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2014-06-13 08:37:30 -0300
committerRenato Botelho <garga@FreeBSD.org>2014-06-13 08:37:30 -0300
commit44b79ffb8d4fec4030f72621756efeba5b31cc06 (patch)
tree232136747e153ae2f619f94d461137143712ceba /etc/inc
parentbcfd894ebdc31c4e5a6ff7dfe904772f08663d50 (diff)
parentc4107752cea55ba66857c6f81955c925a241ebd3 (diff)
downloadpfsense-44b79ffb8d4fec4030f72621756efeba5b31cc06.zip
pfsense-44b79ffb8d4fec4030f72621756efeba5b31cc06.tar.gz
Merge pull request #1222 from phil-davis/patch-8
Diffstat (limited to 'etc/inc')
-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