Index | Thread | Search

From:
Martijn van Duren <openbsd+tech@list.imperialat.at>
Subject:
smtpd: better default syslog tag for filters
To:
tech@openbsd.org
Date:
Fri, 20 Mar 2026 11:43:03 +0100

Download raw body.

Thread
  • Martijn van Duren:

    smtpd: better default syslog tag for filters

EHLO,

While reasonable for my initial testing, having the tag be set to the
name of the processor, instead of the name of the command might be
a better default choice. This also shaves of a bit of code.

OK?

martijn@

diff /usr/src
path + /usr/src
commit - a9b792a8dce6145cbe526f847ad0f84cf9afd558
blob - 02313181cc00765d3a2051ab92cd81ca15114961
file + usr.sbin/smtpd/parse.y
--- usr.sbin/smtpd/parse.y
+++ usr.sbin/smtpd/parse.y
@@ -454,7 +454,7 @@ PROC STRING STRING {
 	processor->command = $3;
 } proc_params {
 	if (!processor->tag)
-		processor->tag = processor_maketag(processor->command);
+		processor->tag = processor_maketag($2);
 	dict_set(conf->sc_filter_processes_dict, $2, processor);
 	processor = NULL;
 }
@@ -1956,7 +1956,7 @@ FILTER STRING PROC_EXEC STRING {
 	dict_set(conf->sc_filters_dict, $2, filter_config);
 } proc_params {
 	if (!processor->tag)
-		processor->tag = processor_maketag(processor->command);
+		processor->tag = processor_maketag(filter_config->proc);
 	dict_set(conf->sc_filter_processes_dict, filter_config->proc, processor);
 	processor = NULL;
 	filter_config = NULL;
@@ -3685,22 +3685,16 @@ config_lo_mask_source(struct listen_opts *lo) {
 
 /* Best effort. If it's ugly: use the tag parameter */
 static const char *
-processor_maketag(const char *cmd)
+processor_maketag(const char *name)
 {
-	char path[PATH_MAX];
-	int i, j;
-	char *tag;
+	char tag[TAG_MAX + 1];
+	size_t i, j;
 
-	strlcpy(path, cmd, sizeof(path));
-	for (i = 0; path[i] != '\0' && !isspace(path[i]); i++)
-		continue;
-	path[i] = '\0';
-	tag = basename(path);
-	for (i = j = 0; tag[j] != '\0'; j++) {
-		if (isalpha(tag[j]))
-			tag[i++] = tag[j];
+	for (i = j = 0; name[i] != '\0' && j < sizeof(tag) - 1; i++) {
+		if (isalnum(name[i]))
+			tag[j++] = name[i];
 	}
-	tag[i] = '\0';
+	tag[j] = '\0';
 
-	return xstrndup(tag, TAG_MAX);
+	return xstrdup(tag);
 }
commit - a9b792a8dce6145cbe526f847ad0f84cf9afd558
blob - 1cdaf067c5585ca69bb19baf72014d29adfe6747
file + usr.sbin/smtpd/smtpd.conf.5
--- usr.sbin/smtpd/smtpd.conf.5
+++ usr.sbin/smtpd/smtpd.conf.5
@@ -915,8 +915,7 @@ with which all log messages of this processor are writ
 .Ar tag
 is limited to 32 letters.
 The default is a best effort representation of the
-.Ar command
-name.
+.Ar proc-name .
 .El
 .It Ic queue Cm compression
 Store queue files in a compressed format.
commit - a9b792a8dce6145cbe526f847ad0f84cf9afd558
blob - 3574db4c03d611801672016b1d0d4314746802cf
file + usr.sbin/smtpd/smtpd.h
--- usr.sbin/smtpd/smtpd.h
+++ usr.sbin/smtpd/smtpd.h
@@ -1712,7 +1712,6 @@ int xasprintf(char **, const char *, ...)
 void *xmalloc(size_t);
 void *xcalloc(size_t, size_t);
 char *xstrdup(const char *);
-char *xstrndup(const char *, size_t);
 void *xmemdup(const void *, size_t);
 char *strip(char *);
 int io_xprint(struct io *, const char *);
commit - a9b792a8dce6145cbe526f847ad0f84cf9afd558
blob - ee4520d863e2434f5d047ec24be1716f05cf20c9
file + usr.sbin/smtpd/util.c
--- usr.sbin/smtpd/util.c
+++ usr.sbin/smtpd/util.c
@@ -76,17 +76,6 @@ xstrdup(const char *str)
 	return (r);
 }
 
-char *
-xstrndup(const char *str, size_t maxlen)
-{
-	char	*r;
-
-	if ((r = strndup(str, maxlen)) == NULL)
-		fatal("strdup");
-
-	return (r);
-}
-
 void *
 xmemdup(const void *ptr, size_t size)
 {