Skip to content

Commit 462eebb

Browse files
author
Gábor Nagy
authored
Merge pull request syslog-ng#1899 from balabit/remove-posix-re-support
logmatcher: remove POSIX regexp support
2 parents a9f3d67 + 7163eef commit 462eebb

File tree

4 files changed

+52
-250
lines changed

4 files changed

+52
-250
lines changed

lib/filter/tests/test_filters.c

Lines changed: 33 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,6 @@ compile_pattern(FilterRE *f, gchar *regexp, const gchar *type, gint flags)
8888
return NULL;
8989
}
9090

91-
FilterExprNode *
92-
create_posix_regexp_filter(NVHandle handle, gchar *regexp, gint flags)
93-
{
94-
return compile_pattern(filter_re_new(handle), regexp, "posix", flags);
95-
}
96-
97-
FilterExprNode *
98-
create_posix_regexp_match(gchar *regexp, gint flags)
99-
{
100-
return compile_pattern(filter_match_new(), regexp, "posix", flags);
101-
}
102-
10391
FilterExprNode *
10492
create_pcre_regexp_filter(gint field, gchar *regexp, gint flags)
10593
{
@@ -305,42 +293,42 @@ main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
305293
testcase("<7> openvpn[2499]: PTHREAD support initialized", filter_level_new(level_bits("debug")), 1);
306294
}
307295

308-
testcase("<15> openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_PROGRAM, "^openvpn$", 0),
296+
testcase("<15> openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_PROGRAM, "^openvpn$", 0),
309297
1);
310-
testcase("<15> openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_PROGRAM, "^open$", 0), 0);
311-
TEST_ASSERT(create_posix_regexp_filter(LM_V_PROGRAM, "((", 0) == NULL);
298+
testcase("<15> openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_PROGRAM, "^open$", 0), 0);
299+
TEST_ASSERT(create_pcre_regexp_filter(LM_V_PROGRAM, "((", 0) == NULL);
312300

313-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_HOST,
301+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_HOST,
314302
"^host$", 0), 1);
315-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_HOST,
303+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_HOST,
316304
"^hos$", 0), 0);
317-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_HOST,
305+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_HOST,
318306
"pthread", 0), 0);
319-
TEST_ASSERT(create_posix_regexp_filter(LM_V_HOST, "((", 0) == NULL);
307+
TEST_ASSERT(create_pcre_regexp_filter(LM_V_HOST, "((", 0) == NULL);
320308

321309

322-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_MESSAGE,
310+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_MESSAGE,
323311
"^PTHREAD ", 0), 1);
324-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_MESSAGE,
312+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_MESSAGE,
325313
"PTHREAD s", 0), 1);
326-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_MESSAGE,
314+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_MESSAGE,
327315
"^PTHREAD$", 0), 0);
328-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_filter(LM_V_MESSAGE,
316+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_filter(LM_V_MESSAGE,
329317
"(?i)pthread", 0), 1);
330318

331319

332-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_match(" PTHREAD ",
320+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_match(" PTHREAD ",
333321
0), 1);
334322
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
335-
create_posix_regexp_match("^openvpn\\[2499\\]: PTHREAD", 0), 1);
336-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_match("^PTHREAD$",
323+
create_pcre_regexp_match("^openvpn\\[2499\\]: PTHREAD", 0), 1);
324+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_match("^PTHREAD$",
337325
0), 0);
338-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_match("(?i)pthread",
326+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_match("(?i)pthread",
339327
0), 1);
340-
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_posix_regexp_match("pthread",
328+
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", create_pcre_regexp_match("pthread",
341329
LMF_ICASE), 1);
342330

343-
TEST_ASSERT(create_posix_regexp_match("((", 0) == NULL);
331+
TEST_ASSERT(create_pcre_regexp_match("((", 0) == NULL);
344332

345333
#if SYSLOG_NG_ENABLE_IPV6
346334
sender_saddr = g_sockaddr_inet6_new("2001:db80:85a3:8d30:1319:8a2e:3700:7348", 5000);
@@ -391,22 +379,22 @@ main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
391379
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized", filter_netmask_new("127.0.0.2/32"), 0);
392380

393381
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
394-
fop_or_new(create_posix_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("PTHREAD", 0)), 1);
382+
fop_or_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("PTHREAD", 0)), 1);
395383
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
396-
fop_or_new(create_posix_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 1);
384+
fop_or_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 1);
397385
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
398-
fop_or_new(create_posix_regexp_match("^PTHREAD$", 0), create_posix_regexp_match(" PTHREAD ", 0)), 1);
386+
fop_or_new(create_pcre_regexp_match("^PTHREAD$", 0), create_pcre_regexp_match(" PTHREAD ", 0)), 1);
399387
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
400-
fop_or_new(create_posix_regexp_match(" PAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 0);
388+
fop_or_new(create_pcre_regexp_match(" PAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 0);
401389

402390
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
403-
fop_and_new(create_posix_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("PTHREAD", 0)), 1);
391+
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("PTHREAD", 0)), 1);
404392
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
405-
fop_and_new(create_posix_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 0);
393+
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 0);
406394
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
407-
fop_and_new(create_posix_regexp_match("^PTHREAD$", 0), create_posix_regexp_match(" PTHREAD ", 0)), 0);
395+
fop_and_new(create_pcre_regexp_match("^PTHREAD$", 0), create_pcre_regexp_match(" PTHREAD ", 0)), 0);
408396
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
409-
fop_and_new(create_posix_regexp_match(" PAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 0);
397+
fop_and_new(create_pcre_regexp_match(" PAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 0);
410398

411399
/* LEVEL_NUM is 7 */
412400
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
@@ -469,13 +457,13 @@ main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
469457
create_template("alma"), KW_GT), 0);
470458

471459

472-
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_posix_regexp_filter(LM_V_MESSAGE,
460+
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_pcre_regexp_filter(LM_V_MESSAGE,
473461
"(a)(l) (fa)", LMF_STORE_MATCHES), 1, "1","a");
474462

475-
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_posix_regexp_filter(LM_V_MESSAGE,
463+
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_pcre_regexp_filter(LM_V_MESSAGE,
476464
"(a)(l) (fa)", LMF_STORE_MATCHES), 1, "0","al fa");
477465

478-
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_posix_regexp_filter(LM_V_MESSAGE,
466+
testcase_with_backref_chk("<15>Oct 15 16:17:01 host openvpn[2499]: al fa", create_pcre_regexp_filter(LM_V_MESSAGE,
479467
"(a)(l) (fa)", LMF_STORE_MATCHES), 1, "232", NULL);
480468

481469

@@ -491,7 +479,7 @@ main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
491479
"pthread", 0), 0);
492480
TEST_ASSERT(create_pcre_regexp_filter(LM_V_HOST, "((", 0) == NULL);
493481

494-
TEST_ASSERT(create_posix_regexp_filter(LM_V_HOST, "(?iana", 0) == NULL);
482+
TEST_ASSERT(create_pcre_regexp_filter(LM_V_HOST, "(?iana", 0) == NULL);
495483

496484
TEST_ASSERT(create_pcre_regexp_filter(LM_V_HOST, "(?iana", 0) == NULL);
497485

@@ -505,13 +493,13 @@ main(int argc G_GNUC_UNUSED, char *argv[] G_GNUC_UNUSED)
505493
"(?i)pthread", 0), 1);
506494

507495
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
508-
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("PTHREAD", 0)), 1);
496+
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("PTHREAD", 0)), 1);
509497
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
510-
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 0);
498+
fop_and_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 0);
511499
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
512-
fop_and_new(create_pcre_regexp_match("^PTHREAD$", 0), create_posix_regexp_match(" PTHREAD ", 0)), 0);
500+
fop_and_new(create_pcre_regexp_match("^PTHREAD$", 0), create_pcre_regexp_match(" PTHREAD ", 0)), 0);
513501
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
514-
fop_and_new(create_pcre_regexp_match(" PAD ", 0), create_posix_regexp_match("^PTHREAD$", 0)), 0);
502+
fop_and_new(create_pcre_regexp_match(" PAD ", 0), create_pcre_regexp_match("^PTHREAD$", 0)), 0);
515503

516504
testcase("<15>Oct 15 16:17:01 host openvpn[2499]: PTHREAD support initialized",
517505
fop_or_new(create_pcre_regexp_match(" PTHREAD ", 0), create_pcre_regexp_match("PTHREAD", 0)), 1);

lib/logmatcher.c

Lines changed: 9 additions & 194 deletions
Original file line numberDiff line numberDiff line change
@@ -58,197 +58,6 @@ log_matcher_init(LogMatcher *self, const LogMatcherOptions *options)
5858
self->free_fn = log_matcher_free_method;
5959
}
6060

61-
typedef struct _LogMatcherPosixRe
62-
{
63-
LogMatcher super;
64-
regex_t pattern;
65-
} LogMatcherPosixRe;
66-
67-
static gboolean
68-
log_matcher_posix_re_compile(LogMatcher *s, const gchar *re, GError **error)
69-
{
70-
LogMatcherPosixRe *self = (LogMatcherPosixRe *) s;
71-
gint rc;
72-
const gchar *re_comp = re;
73-
gint flags = REG_EXTENDED;
74-
75-
g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
76-
log_matcher_store_pattern(s, re);
77-
78-
if (re[0] == '(' && re[1] == '?')
79-
{
80-
gint i;
81-
82-
for (i = 2; re[i] && re[i] != ')'; i++)
83-
{
84-
if (re[i] == 'i')
85-
{
86-
/* deprecated */
87-
msg_warning_once("WARNING: Your configuration file uses an obsoleted regexp option, please update your configuration",
88-
evt_tag_str("option", "(?i)"),
89-
evt_tag_str("change", "use ignore-case flag instead of (?i)"));
90-
91-
flags |= REG_ICASE;
92-
}
93-
}
94-
if (re[i])
95-
{
96-
re_comp = &re[i + 1];
97-
}
98-
else
99-
{
100-
g_set_error(error, LOG_MATCHER_ERROR, 0, "missing closing parentheses in regexp flags");
101-
return FALSE;
102-
}
103-
}
104-
105-
if (self->super.flags & LMF_ICASE)
106-
flags |= REG_ICASE;
107-
if (self->super.flags & LMF_NEWLINE)
108-
flags |= REG_NEWLINE;
109-
if ((self->super.flags & (LMF_MATCH_ONLY + LMF_STORE_MATCHES)) == LMF_MATCH_ONLY)
110-
flags |= REG_NOSUB;
111-
112-
rc = regcomp(&self->pattern, re_comp, flags);
113-
if (rc)
114-
{
115-
gchar buf[256];
116-
117-
regerror(rc, &self->pattern, buf, sizeof(buf));
118-
g_set_error(error, LOG_MATCHER_ERROR, 0, "Error compiling regular expression: %s", buf);
119-
return FALSE;
120-
}
121-
return TRUE;
122-
}
123-
124-
static void
125-
log_matcher_posix_re_feed_backrefs(LogMatcher *s, LogMessage *msg, gint value_handle, regmatch_t *matches,
126-
const gchar *value)
127-
{
128-
gint i;
129-
gboolean indirect = _shall_set_values_indirectly(value_handle);
130-
131-
for (i = 0; i < RE_MAX_MATCHES && matches[i].rm_so != -1; i++)
132-
{
133-
if (indirect)
134-
{
135-
log_msg_set_match_indirect(msg, i, value_handle, 0, matches[i].rm_so, matches[i].rm_eo - matches[i].rm_so);
136-
}
137-
else
138-
{
139-
log_msg_set_match(msg, i, &value[matches[i].rm_so], matches[i].rm_eo - matches[i].rm_so);
140-
}
141-
}
142-
}
143-
144-
static gboolean
145-
log_matcher_posix_re_match(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len)
146-
{
147-
LogMatcherPosixRe *self = (LogMatcherPosixRe *) s;
148-
regmatch_t matches[RE_MAX_MATCHES];
149-
gboolean rc;
150-
const gchar *buf;
151-
152-
APPEND_ZERO(buf, value, value_len);
153-
rc = !regexec(&self->pattern, buf, RE_MAX_MATCHES, matches, 0);
154-
if (rc && (s->flags & LMF_STORE_MATCHES))
155-
{
156-
log_matcher_posix_re_feed_backrefs(s, msg, value_handle, matches, value);
157-
}
158-
return rc;
159-
}
160-
161-
static gchar *
162-
log_matcher_posix_re_replace(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len,
163-
LogTemplate *replacement, gssize *new_length)
164-
{
165-
LogMatcherPosixRe *self = (LogMatcherPosixRe *) s;
166-
regmatch_t matches[RE_MAX_MATCHES];
167-
gboolean rc;
168-
GString *new_value = NULL;
169-
gsize current_ofs = 0;
170-
gboolean first_round = TRUE;
171-
gchar *buf;
172-
173-
APPEND_ZERO(buf, value, value_len);
174-
175-
do
176-
{
177-
if (current_ofs == value_len)
178-
break;
179-
180-
rc = !regexec(&self->pattern, buf + current_ofs, RE_MAX_MATCHES, matches, current_ofs > 0 ? REG_NOTBOL : 0);
181-
if (rc)
182-
{
183-
/* start_ofs & end_ofs are relative to the original string */
184-
gsize start_ofs = matches[0].rm_so + current_ofs;
185-
gsize end_ofs = matches[0].rm_eo + current_ofs;
186-
187-
if (start_ofs == end_ofs && !first_round)
188-
{
189-
start_ofs++;
190-
end_ofs++;
191-
}
192-
193-
log_matcher_posix_re_feed_backrefs(s, msg, value_handle, matches, buf + current_ofs);
194-
195-
if (!new_value)
196-
new_value = g_string_sized_new(value_len);
197-
198-
g_string_append_len(new_value, buf + current_ofs, start_ofs - current_ofs);
199-
log_template_append_format(replacement, msg, NULL, LTZ_LOCAL, 0, NULL, new_value);
200-
current_ofs = end_ofs;
201-
202-
if ((self->super.flags & LMF_GLOBAL) == 0)
203-
{
204-
g_string_append_len(new_value, buf + current_ofs, value_len - current_ofs);
205-
break;
206-
}
207-
}
208-
else
209-
{
210-
if (new_value)
211-
{
212-
/* no more matches, append the end of the string */
213-
g_string_append_len(new_value, buf + current_ofs, value_len - current_ofs);
214-
}
215-
}
216-
first_round = FALSE;
217-
}
218-
while (rc && (self->super.flags & LMF_GLOBAL));
219-
220-
if (new_value)
221-
{
222-
if (new_length)
223-
*new_length = new_value->len;
224-
return g_string_free(new_value, FALSE);
225-
}
226-
return NULL;
227-
}
228-
229-
static void
230-
log_matcher_posix_re_free(LogMatcher *s)
231-
{
232-
LogMatcherPosixRe *self = (LogMatcherPosixRe *) s;
233-
234-
regfree(&self->pattern);
235-
log_matcher_free_method(s);
236-
}
237-
238-
LogMatcher *
239-
log_matcher_posix_re_new(GlobalConfig *cfg, const LogMatcherOptions *options)
240-
{
241-
LogMatcherPosixRe *self = g_new0(LogMatcherPosixRe, 1);
242-
243-
log_matcher_init(&self->super, options);
244-
self->super.compile = log_matcher_posix_re_compile;
245-
self->super.match = log_matcher_posix_re_match;
246-
self->super.replace = log_matcher_posix_re_replace;
247-
self->super.free_fn = log_matcher_posix_re_free;
248-
249-
return &self->super;
250-
}
251-
25261
typedef struct _LogMatcherString
25362
{
25463
LogMatcher super;
@@ -826,7 +635,6 @@ struct
826635
} matcher_types[] =
827636
{
828637
{ "pcre", log_matcher_pcre_re_new },
829-
{ "posix", log_matcher_posix_re_new },
830638
{ "string", log_matcher_string_new },
831639
{ "glob", log_matcher_glob_new },
832640
{ NULL, NULL },
@@ -877,6 +685,15 @@ log_matcher_options_set_type(LogMatcherOptions *options, const gchar *type)
877685
{
878686
LogMatcherConstructFunc construct;
879687

688+
if (strcmp(type, "posix") == 0)
689+
{
690+
msg_warning_once("WARNING: syslog-ng dropped support for POSIX regexp implementations in " VERSION_3_14
691+
" in favour of PCRE, which should be upward compatible. All 'posix' regexps are "
692+
"automatically switched to 'pcre'. Please ensure that your regexps work with PCRE and "
693+
"specify type('pcre') explicitly or increase @version to remove this warning");
694+
type = "pcre";
695+
}
696+
880697
construct = log_matcher_lookup_construct(type);
881698
if (!construct)
882699
return FALSE;
@@ -926,8 +743,6 @@ log_matcher_options_init(LogMatcherOptions *options, GlobalConfig *cfg)
926743

927744
if (cfg_is_config_version_older(cfg, 0x0306))
928745
{
929-
msg_warning_once("WARNING: syslog-ng changed the default regexp implementation to PCRE starting from " VERSION_3_6
930-
", please ensure your regexp works with PCRE or please specify type(\"posix\") in filters explicitly");
931746
default_matcher = "posix";
932747
}
933748
if (!log_matcher_options_set_type(options, default_matcher))

lib/logmatcher.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ log_matcher_is_replace_supported(LogMatcher *s)
107107
return s->replace != NULL;
108108
}
109109

110-
LogMatcher *log_matcher_posix_re_new(GlobalConfig *cfg, const LogMatcherOptions *options);
111110
LogMatcher *log_matcher_pcre_re_new(GlobalConfig *cfg, const LogMatcherOptions *options);
112111
LogMatcher *log_matcher_string_new(GlobalConfig *cfg, const LogMatcherOptions *options);
113112
LogMatcher *log_matcher_glob_new(GlobalConfig *cfg, const LogMatcherOptions *options);

0 commit comments

Comments
 (0)