Page MenuHomeFreeBSD

D41366.diff
No OneTemporary

D41366.diff

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

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)

Event Timeline