Page MenuHomeFreeBSD

D41373.id125726.diff
No OneTemporary

D41373.id125726.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
@@ -442,8 +442,7 @@
static int skip_message(const char *, const char *, int);
static int evaluate_prop_filter(const struct prop_filter *filter,
const char *value);
-static int prop_filter_compile(struct prop_filter *pfilter,
- char *filterstr);
+static struct prop_filter *prop_filter_compile(char *);
static void parsemsg(const char *, char *);
static void printsys(char *);
static int p_open(const char *, pid_t *);
@@ -2789,17 +2788,25 @@
/*
* Compile property-based filter.
- * Returns 0 on success, -1 otherwise.
*/
-static int
-prop_filter_compile(struct prop_filter *pfilter, char *filter)
+static struct prop_filter *
+prop_filter_compile(char *filter)
{
+ struct prop_filter *pfilter;
char *filter_endpos, *p;
char **ap, *argv[2] = {NULL, NULL};
int re_flags = REG_NOSUB;
int escaped;
- bzero(pfilter, sizeof(struct prop_filter));
+ pfilter = calloc(1, sizeof(*pfilter));
+ if (pfilter == NULL) {
+ logerror("pfilter calloc");
+ exit(1);
+ }
+ if (*filter == '*') {
+ pfilter->prop_type = FILT_PROP_NOOP;
+ return (pfilter);
+ }
/*
* Here's some filter examples mentioned in syslog.conf(5)
@@ -2820,7 +2827,8 @@
if (argv[0] == NULL || argv[1] == NULL) {
logerror("filter parse error");
- return (-1);
+ free(pfilter);
+ return (NULL);
}
/* fill in prop_type */
@@ -2834,7 +2842,8 @@
pfilter->prop_type = FILT_PROP_PROGNAME;
else {
logerror("unknown property");
- return (-1);
+ free(pfilter);
+ return (NULL);
}
/* full in cmp_flags (i.e. !contains, icase_regex, etc.) */
@@ -2861,7 +2870,8 @@
re_flags |= REG_EXTENDED;
} else {
logerror("unknown cmp function");
- return (-1);
+ free(pfilter);
+ return (NULL);
}
/*
@@ -2873,7 +2883,8 @@
filter += strspn(filter, ", \t\n");
if (*filter != '"' || strlen(filter) < 3) {
logerror("property value parse error");
- return (-1);
+ free(pfilter);
+ return (NULL);
}
filter++;
@@ -2905,30 +2916,32 @@
/* We should not have anything but whitespace left after closing '"' */
if (*p != '\0' && strspn(p, " \t\n") != strlen(p)) {
logerror("property value parse error");
- return (-1);
+ free(pfilter);
+ return (NULL);
}
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);
free(pfilter->pflt_re);
- return (-1);
+ return (NULL);
}
if (pfilter->cmp_flags & FILT_FLAG_ICASE)
re_flags |= REG_ICASE;
if (regcomp(pfilter->pflt_re, filter, re_flags) != 0) {
logerror("RE compilation error");
+ free(pfilter);
free(pfilter->pflt_re);
- return (-1);
+ return (NULL);
}
} else {
pfilter->pflt_strval = strdup(filter);
pfilter->pflt_strlen = strlen(filter);
}
- return (0);
-
+ return (pfilter);
}
/*
@@ -2990,23 +3003,15 @@
}
if (pfilter) {
- f->f_prop_filter = calloc(1, sizeof(*(f->f_prop_filter)));
- if (f->f_prop_filter == NULL) {
- logerror("pfilter calloc");
+ pfilter_dup = strdup(pfilter);
+ if (pfilter_dup == NULL) {
+ logerror("strdup");
exit(1);
}
- if (*pfilter == '*')
- f->f_prop_filter->prop_type = FILT_PROP_NOOP;
- else {
- pfilter_dup = strdup(pfilter);
- if (pfilter_dup == NULL) {
- logerror("strdup");
- exit(1);
- }
- if (prop_filter_compile(f->f_prop_filter, pfilter_dup)) {
- logerror("filter compile error");
- exit(1);
- }
+ f->f_prop_filter = prop_filter_compile(pfilter_dup);
+ if (f->f_prop_filter == NULL) {
+ logerror("filter compile error");
+ exit(1);
}
}

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 28, 8:03 AM (13 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17827489
Default Alt Text
D41373.id125726.diff (3 KB)

Event Timeline