From: Daniel P. Berrangé Date: Mon, 14 May 2018 13:51:14 +0000 (+0100) Subject: log: actually do substring matches with fnmatch X-Git-Tag: v4.4.0-rc1~146 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fe30b2167b5b56461b11dbf02aca83030070caf;p=thirdparty%2Flibvirt.git log: actually do substring matches with fnmatch 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é --- 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;