From 8fe30b2167b5b56461b11dbf02aca83030070caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Mon, 14 May 2018 14:51:14 +0100 Subject: [PATCH] log: actually do substring matches with fnmatch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Historically we matched log filters with strstr(), and when switching to fnmatch in cbb0fd3cfdc287f6f4653ef1f04a7cfb2ea51b27, it was stated that we would continue to match substrings, with "foo" being equivalent to "*foo*". Unfortuntely I forget to provide the code to actually make that happen. This fixes it to prepend and append "*". We don't bother to check if the pattern already has a leading/trailing '*', because "**foo**" will match the same as "*foo*". Reviewed-by: Erik Skultety Signed-off-by: Daniel P. Berrangé --- src/util/virlog.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/util/virlog.c b/src/util/virlog.c index be9fc0cf78..e008dd9c54 100644 --- a/src/util/virlog.c +++ b/src/util/virlog.c @@ -1409,6 +1409,7 @@ virLogFilterNew(const char *match, { virLogFilterPtr ret = NULL; char *mdup = NULL; + size_t mlen = strlen(match); virCheckFlags(VIR_LOG_STACK_TRACE, NULL); @@ -1418,9 +1419,16 @@ virLogFilterNew(const char *match, return NULL; } - if (VIR_STRDUP_QUIET(mdup, match) < 0) + /* We must treat 'foo' as equiv to '*foo*' for fnmatch + * todo substring matches, so add 2 extra bytes + */ + if (VIR_ALLOC_N_QUIET(mdup, mlen + 3) < 0) return NULL; + mdup[0] = '*'; + memcpy(mdup + 1, match, mlen); + mdup[mlen + 1] = '*'; + if (VIR_ALLOC_QUIET(ret) < 0) { VIR_FREE(mdup); return NULL;