syslog-ng source
logmatcher.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2010 Balabit
3  * Copyright (c) 1998-2010 Balázs Scheidler
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 
25 #ifndef LOGMATCHER_H_INCLUDED
26 #define LOGMATCHER_H_INCLUDED
27 
28 #include "logmsg/logmsg.h"
29 #include "template/templates.h"
30 
31 #define LOG_MATCHER_ERROR log_template_error_quark()
32 
33 GQuark log_matcher_error_quark(void);
34 
35 enum
36 {
37  /* use global search/replace */
38  LMF_GLOBAL = 0x0001,
39  LMF_ICASE = 0x0002,
40  LMF_MATCH_ONLY = 0x0004,
41 
42  /* POSIX + PCRE common flags */
43  LMF_NEWLINE = 0x0008,
44  LMF_UTF8 = 0x0010,
46  LMF_DISABLE_JIT = 0x0040,
47 
48  /* string flags */
49  LMF_SUBSTRING = 0x0080,
50  LMF_PREFIX = 0x0100,
51 
52  /* advanced LIBPCRE flags */
53  LMF_DUPNAMES = 0x00080000,
54 };
55 
56 typedef struct _LogMatcherOptions
57 {
58  gint flags;
59  gchar *type;
61 
62 typedef struct _LogMatcher LogMatcher;
63 
65 {
66  gint ref_cnt;
67  gint flags;
68  gchar *pattern;
69  gboolean (*compile)(LogMatcher *s, const gchar *re, GError **error);
70  /* value_len can be -1 to indicate unknown length */
71  gboolean (*match)(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len);
72  /* value_len can be -1 to indicate unknown length, new_length can be returned as -1 to indicate unknown length */
73  gchar *(*replace)(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len,
74  LogTemplate *replacement, gssize *new_length);
75  void (*free_fn)(LogMatcher *s);
76 };
77 
78 static inline gboolean
79 log_matcher_compile(LogMatcher *s, const gchar *re, GError **error)
80 {
81  return s->compile(s, re, error);
82 }
83 
84 static inline gboolean
85 log_matcher_match(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len)
86 {
87  return s->match(s, msg, value_handle, value, value_len);
88 }
89 
90 gboolean log_matcher_match_value(LogMatcher *s, LogMessage *msg, gint value_handle);
91 gboolean log_matcher_match_buffer(LogMatcher *s, LogMessage *msg, const gchar *value, gssize value_len);
92 gboolean log_matcher_match_template(LogMatcher *s, LogMessage *msg,
93  LogTemplate *template, LogTemplateEvalOptions *options);
94 
95 static inline gchar *
96 log_matcher_replace(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len,
97  LogTemplate *replacement, gssize *new_length)
98 {
99  if (s->replace)
100  return s->replace(s, msg, value_handle, value, value_len, replacement, new_length);
101  return NULL;
102 }
103 
104 static inline void
105 log_matcher_set_flags(LogMatcher *s, gint flags)
106 {
107  s->flags = flags;
108 }
109 
110 static inline gboolean
111 log_matcher_is_replace_supported(LogMatcher *s)
112 {
113  return s->replace != NULL;
114 }
115 
116 LogMatcher *log_matcher_pcre_re_new(const LogMatcherOptions *options);
117 LogMatcher *log_matcher_string_new(const LogMatcherOptions *options);
118 LogMatcher *log_matcher_glob_new(const LogMatcherOptions *options);
119 
120 LogMatcher *log_matcher_new(const LogMatcherOptions *options);
121 LogMatcher *log_matcher_ref(LogMatcher *s);
122 void log_matcher_unref(LogMatcher *s);
123 
124 
125 gboolean log_matcher_options_set_type(LogMatcherOptions *options, const gchar *type);
126 gboolean log_matcher_options_process_flag(LogMatcherOptions *self, const gchar *flag);
130 
131 void log_matcher_pcre_set_nv_prefix(LogMatcher *s, const gchar *prefix);
132 
133 #endif
void log_matcher_options_defaults(LogMatcherOptions *options)
Definition: logmatcher.c:887
void log_matcher_options_init(LogMatcherOptions *options)
Definition: logmatcher.c:894
void log_matcher_pcre_set_nv_prefix(LogMatcher *s, const gchar *prefix)
Definition: logmatcher.c:715
LogMatcher * log_matcher_pcre_re_new(const LogMatcherOptions *options)
Definition: logmatcher.c:699
LogMatcher * log_matcher_ref(LogMatcher *s)
Definition: logmatcher.c:820
LogMatcher * log_matcher_glob_new(const LogMatcherOptions *options)
Definition: logmatcher.c:266
GQuark log_matcher_error_quark(void)
Definition: logmatcher.c:913
LogMatcher * log_matcher_string_new(const LogMatcherOptions *options)
Definition: logmatcher.c:197
void log_matcher_options_destroy(LogMatcherOptions *options)
Definition: logmatcher.c:906
gboolean log_matcher_options_process_flag(LogMatcherOptions *self, const gchar *flag)
Definition: logmatcher.c:881
gboolean log_matcher_options_set_type(LogMatcherOptions *options, const gchar *type)
Definition: logmatcher.c:838
gboolean log_matcher_match_buffer(LogMatcher *s, LogMessage *msg, const gchar *value, gssize value_len)
Definition: logmatcher.c:749
LogMatcher * log_matcher_new(const LogMatcherOptions *options)
Definition: logmatcher.c:811
gboolean log_matcher_match_template(LogMatcher *s, LogMessage *msg, LogTemplate *template, LogTemplateEvalOptions *options)
Definition: logmatcher.c:755
gboolean log_matcher_match_value(LogMatcher *s, LogMessage *msg, gint value_handle)
Definition: logmatcher.c:735
void log_matcher_unref(LogMatcher *s)
Definition: logmatcher.c:827
@ LMF_GLOBAL
Definition: logmatcher.h:38
@ LMF_UTF8
Definition: logmatcher.h:44
@ LMF_STORE_MATCHES
Definition: logmatcher.h:45
@ LMF_SUBSTRING
Definition: logmatcher.h:49
@ LMF_DUPNAMES
Definition: logmatcher.h:53
@ LMF_MATCH_ONLY
Definition: logmatcher.h:40
@ LMF_PREFIX
Definition: logmatcher.h:50
@ LMF_DISABLE_JIT
Definition: logmatcher.h:46
@ LMF_ICASE
Definition: logmatcher.h:39
@ LMF_NEWLINE
Definition: logmatcher.h:43
Definition: logmatcher.h:57
gint flags
Definition: logmatcher.h:58
gchar * type
Definition: logmatcher.h:59
Definition: eval.h:34
Definition: logmatcher.h:65
gchar * pattern
Definition: logmatcher.h:68
gint flags
Definition: logmatcher.h:67
gint ref_cnt
Definition: logmatcher.h:66
gboolean(* match)(LogMatcher *s, LogMessage *msg, gint value_handle, const gchar *value, gssize value_len)
Definition: logmatcher.h:71
void(* free_fn)(LogMatcher *s)
Definition: logmatcher.h:75
gboolean(* compile)(LogMatcher *s, const gchar *re, GError **error)
Definition: logmatcher.h:69
GString * value
Definition: test_decode.c:28
LogMessage * msg
Definition: test_rename.c:35