From nobody Thu Sep 28 15:52:30 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RxHzy5qcwz4tyCr; Thu, 28 Sep 2023 15:52:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RxHzy41Y9z4KMw; Thu, 28 Sep 2023 15:52:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695916350; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=W1FeezCVLCPz87SfU5+GZ+p9WlKyiZ6VXd4h+8+sw58=; b=BjoSoRjkR+tV1Gu0i2OSRERHZYSkQImHAGQFax3EJPqc270HctU56DZ6YV9wg+M6Ea7d+D 3mGywVGmQyP9B/6Y0cL13msYzhOX0oPIiroEmrs2lvBWmCdJRqezdSGzgI9tiQ2j+IOuth SerR9MxBKmHcQp5w4AG82ZPyd7lu8s2daguBeUTq76COflthLXCftgx5XPFh/6Eo1/Gz/l w1pJh8QNWJ8pETlS2IeVqE6rAlhycr3ux2XrYCmu8npsScuefD2P8L8t+I5OjsWjkhe9Eq WKfX3k06WZMUYm1p5i42EU4mAAPV3OCnKqsLiLGOarBSPh4UhnNivtYX+hAMeg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1695916350; a=rsa-sha256; cv=none; b=K6yTFDkgeLZmZEkqUIji1TiYwaT6utBcu/hdL9NSl/9MyvoXfl8E5BYKLB8lznmsEl/h65 /Dy7t9l4KAuKwWVDuThFlk2hXxDwU/ElGiFsHDdBCaCIKrnsq6ehBqdtGyPsA2IA3DQWrV YiZtLN2dsDnbWRxgne08qBZP9sLcJu+Ip79l2DzuoqrvgXJRgryFudpowQ30NDvWI5XzDz NZq4xMNIYostDk5J4wFR8IGX3W2Bm7f+A+aT80pjBArOD3svaf5QYBoD/ZCqZ/P37ODhKR 7+n3sVfpommYnT/5me7sv04d449mFpvswjsF6DpiUR6jook5tvAaSn5IMQRlCQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1695916350; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=W1FeezCVLCPz87SfU5+GZ+p9WlKyiZ6VXd4h+8+sw58=; b=XYLORqWQKUtt2vLT9XCUeA+bzGG3b+x4S9sbajSCKp/7kI/ly+5epLHALqKMnMsRYhQ4WS f6IRr42NqFWB/mTE72zMN3B4NHebq3FqsHl1m/PtKYFj6EMkHDVSW3r5otQtWvhBIVL9+L NvmXDdXEQXtGig7SI6LdBSLGvipTcOAH8Tdk6gieosuhpqgidWNgueY3GYfJDmToq+qzh9 HfQn4pZ5B3q7svb/fCCMeNiIInLlpE+XV2NgXYTzcfgBbH5r5+/4S6cc1Gb5Rch1Kjj0+L YJSJN1JDl2ddGP+lGpHRiGIcUAKpRGfGUwqk89Ce0D/l1Q40YhQaDHB03hVXUw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RxHzy2t6HzCNc; Thu, 28 Sep 2023 15:52:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38SFqUSg021857; Thu, 28 Sep 2023 15:52:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38SFqUvn021854; Thu, 28 Sep 2023 15:52:30 GMT (envelope-from git) Date: Thu, 28 Sep 2023 15:52:30 GMT Message-Id: <202309281552.38SFqUvn021854@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: fcc1e1777d42 - main - syslogd: Simplify property filters List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: fcc1e1777d42d99d5505aa7273d73cb98c9c4ca4 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=fcc1e1777d42d99d5505aa7273d73cb98c9c4ca4 commit fcc1e1777d42d99d5505aa7273d73cb98c9c4ca4 Author: Jake Freeland AuthorDate: 2023-09-01 02:49:58 +0000 Commit: Mark Johnston CommitDate: 2023-09-28 15:51:53 +0000 syslogd: Simplify property filters * Use enums for property filter properties and comparisons. * Rename property and comparison values. Reviewed by: markj MFC after: 3 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41366 --- usr.sbin/syslogd/syslogd.c | 101 +++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 02c125f36f91..d1027773494f 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -222,34 +222,35 @@ struct logtime { #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 @@ static int 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 @@ evaluate_prop_filter(const struct prop_filter *filter, const char *value) 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 @@ logmsg(int pri, const struct logtime *timestamp, const char *hostname, /* 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 @@ init(bool reload) 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 @@ prop_filter_compile(struct prop_filter *pfilter, char *filter) /* 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 @@ prop_filter_compile(struct prop_filter *pfilter, char *filter) /* 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 @@ prop_filter_compile(struct prop_filter *pfilter, char *filter) 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 @@ cfline(const char *line, const char *prog, const char *host, 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) {