Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115677348
D41366.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D41366.diff
View Options
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -222,34 +222,35 @@
#define RFC3164_DATELEN 15
#define RFC3164_DATEFMT "%b %e %H:%M:%S"
+enum filt_proptype {
+ FILT_PROP_NOOP,
+ FILT_PROP_MSG,
+ FILT_PROP_HOSTNAME,
+ FILT_PROP_PROGNAME,
+};
+
+enum filt_cmptype {
+ FILT_CMP_CONTAINS,
+ FILT_CMP_EQUAL,
+ FILT_CMP_STARTS,
+ FILT_CMP_REGEX,
+};
+
/*
* This structure holds a property-based filter
*/
-
struct prop_filter {
- uint8_t prop_type;
-#define PROP_TYPE_NOOP 0
-#define PROP_TYPE_MSG 1
-#define PROP_TYPE_HOSTNAME 2
-#define PROP_TYPE_PROGNAME 3
-
- uint8_t cmp_type;
-#define PROP_CMP_CONTAINS 1
-#define PROP_CMP_EQUAL 2
-#define PROP_CMP_STARTS 3
-#define PROP_CMP_REGEX 4
-
- uint16_t cmp_flags;
-#define PROP_FLAG_EXCLUDE (1 << 0)
-#define PROP_FLAG_ICASE (1 << 1)
-
+ enum filt_proptype prop_type;
+ enum filt_cmptype cmp_type;
+ uint8_t cmp_flags;
+#define FILT_FLAG_EXCLUDE (1 << 0)
+#define FILT_FLAG_ICASE (1 << 1)
union {
char *p_strval;
regex_t *p_re;
} pflt_uniptr;
#define pflt_strval pflt_uniptr.p_strval
#define pflt_re pflt_uniptr.p_re
-
size_t pflt_strlen;
};
@@ -1519,13 +1520,13 @@
evaluate_prop_filter(const struct prop_filter *filter, const char *value)
{
const char *s = NULL;
- const int exclude = ((filter->cmp_flags & PROP_FLAG_EXCLUDE) > 0);
+ const int exclude = ((filter->cmp_flags & FILT_FLAG_EXCLUDE) > 0);
size_t valuelen;
if (value == NULL)
return (-1);
- if (filter->cmp_type == PROP_CMP_REGEX) {
+ if (filter->cmp_type == FILT_CMP_REGEX) {
if (regexec(filter->pflt_re, value, 0, NULL, 0) == 0)
return (exclude);
else
@@ -1535,31 +1536,31 @@
valuelen = strlen(value);
/* a shortcut for equal with different length is always false */
- if (filter->cmp_type == PROP_CMP_EQUAL &&
+ if (filter->cmp_type == FILT_CMP_EQUAL &&
valuelen != filter->pflt_strlen)
return (!exclude);
- if (filter->cmp_flags & PROP_FLAG_ICASE)
+ if (filter->cmp_flags & FILT_FLAG_ICASE)
s = strcasestr(value, filter->pflt_strval);
else
s = strstr(value, filter->pflt_strval);
/*
- * PROP_CMP_CONTAINS true if s
- * PROP_CMP_STARTS true if s && s == value
- * PROP_CMP_EQUAL true if s && s == value &&
+ * FILT_CMP_CONTAINS true if s
+ * FILT_CMP_STARTS true if s && s == value
+ * FILT_CMP_EQUAL true if s && s == value &&
* valuelen == filter->pflt_strlen
* (and length match is checked
* already)
*/
switch (filter->cmp_type) {
- case PROP_CMP_STARTS:
- case PROP_CMP_EQUAL:
+ case FILT_CMP_STARTS:
+ case FILT_CMP_EQUAL:
if (s != value)
return (!exclude);
/* FALLTHROUGH */
- case PROP_CMP_CONTAINS:
+ case FILT_CMP_CONTAINS:
if (s)
return (exclude);
else
@@ -1685,19 +1686,19 @@
/* skip messages if a property does not match filter */
if (f->f_prop_filter != NULL &&
- f->f_prop_filter->prop_type != PROP_TYPE_NOOP) {
+ f->f_prop_filter->prop_type != FILT_PROP_NOOP) {
switch (f->f_prop_filter->prop_type) {
- case PROP_TYPE_MSG:
+ case FILT_PROP_MSG:
if (evaluate_prop_filter(f->f_prop_filter,
msg))
continue;
break;
- case PROP_TYPE_HOSTNAME:
+ case FILT_PROP_HOSTNAME:
if (evaluate_prop_filter(f->f_prop_filter,
hostname))
continue;
break;
- case PROP_TYPE_PROGNAME:
+ case FILT_PROP_PROGNAME:
if (evaluate_prop_filter(f->f_prop_filter,
app_name == NULL ? "" : app_name))
continue;
@@ -2610,13 +2611,13 @@
free(f->f_host);
if (f->f_prop_filter) {
switch (f->f_prop_filter->cmp_type) {
- case PROP_CMP_REGEX:
+ case FILT_CMP_REGEX:
regfree(f->f_prop_filter->pflt_re);
free(f->f_prop_filter->pflt_re);
break;
- case PROP_CMP_CONTAINS:
- case PROP_CMP_EQUAL:
- case PROP_CMP_STARTS:
+ case FILT_CMP_CONTAINS:
+ case FILT_CMP_EQUAL:
+ case FILT_CMP_STARTS:
free(f->f_prop_filter->pflt_strval);
break;
}
@@ -2752,13 +2753,13 @@
/* fill in prop_type */
if (strcasecmp(argv[0], "msg") == 0)
- pfilter->prop_type = PROP_TYPE_MSG;
+ pfilter->prop_type = FILT_PROP_MSG;
else if(strcasecmp(argv[0], "hostname") == 0)
- pfilter->prop_type = PROP_TYPE_HOSTNAME;
+ pfilter->prop_type = FILT_PROP_HOSTNAME;
else if(strcasecmp(argv[0], "source") == 0)
- pfilter->prop_type = PROP_TYPE_HOSTNAME;
+ pfilter->prop_type = FILT_PROP_HOSTNAME;
else if(strcasecmp(argv[0], "programname") == 0)
- pfilter->prop_type = PROP_TYPE_PROGNAME;
+ pfilter->prop_type = FILT_PROP_PROGNAME;
else {
logerror("unknown property");
return (-1);
@@ -2766,25 +2767,25 @@
/* full in cmp_flags (i.e. !contains, icase_regex, etc.) */
if (*argv[1] == '!') {
- pfilter->cmp_flags |= PROP_FLAG_EXCLUDE;
+ pfilter->cmp_flags |= FILT_FLAG_EXCLUDE;
argv[1]++;
}
if (strncasecmp(argv[1], "icase_", (sizeof("icase_") - 1)) == 0) {
- pfilter->cmp_flags |= PROP_FLAG_ICASE;
+ pfilter->cmp_flags |= FILT_FLAG_ICASE;
argv[1] += sizeof("icase_") - 1;
}
/* fill in cmp_type */
if (strcasecmp(argv[1], "contains") == 0)
- pfilter->cmp_type = PROP_CMP_CONTAINS;
+ pfilter->cmp_type = FILT_CMP_CONTAINS;
else if (strcasecmp(argv[1], "isequal") == 0)
- pfilter->cmp_type = PROP_CMP_EQUAL;
+ pfilter->cmp_type = FILT_CMP_EQUAL;
else if (strcasecmp(argv[1], "startswith") == 0)
- pfilter->cmp_type = PROP_CMP_STARTS;
+ pfilter->cmp_type = FILT_CMP_STARTS;
else if (strcasecmp(argv[1], "regex") == 0)
- pfilter->cmp_type = PROP_CMP_REGEX;
+ pfilter->cmp_type = FILT_CMP_REGEX;
else if (strcasecmp(argv[1], "ereregex") == 0) {
- pfilter->cmp_type = PROP_CMP_REGEX;
+ pfilter->cmp_type = FILT_CMP_REGEX;
re_flags |= REG_EXTENDED;
} else {
logerror("unknown cmp function");
@@ -2835,14 +2836,14 @@
return (-1);
}
- if (pfilter->cmp_type == PROP_CMP_REGEX) {
+ if (pfilter->cmp_type == FILT_CMP_REGEX) {
pfilter->pflt_re = calloc(1, sizeof(*pfilter->pflt_re));
if (pfilter->pflt_re == NULL) {
logerror("RE calloc() error");
free(pfilter->pflt_re);
return (-1);
}
- if (pfilter->cmp_flags & PROP_FLAG_ICASE)
+ if (pfilter->cmp_flags & FILT_FLAG_ICASE)
re_flags |= REG_ICASE;
if (regcomp(pfilter->pflt_re, filter, re_flags) != 0) {
logerror("RE compilation error");
@@ -2922,7 +2923,7 @@
exit(1);
}
if (*pfilter == '*')
- f->f_prop_filter->prop_type = PROP_TYPE_NOOP;
+ f->f_prop_filter->prop_type = FILT_PROP_NOOP;
else {
pfilter_dup = strdup(pfilter);
if (pfilter_dup == NULL) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 28, 12:07 AM (8 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17823385
Default Alt Text
D41366.diff (6 KB)
Attached To
Mode
D41366: syslogd: Simplify property filters
Attached
Detach File
Event Timeline
Log In to Comment