On Thu, 30 Jan 2025 19:02:45 +0100,
Martijn van Duren <opensm...@list.imperialat.at> wrote:
> 
> Hello misc@,
> 
> The diff below adds support for 4 different loglevels to smtpd filters:
> warn, info, debug, trace. These for levels are in line with the
> loglevels of smtpd itself and are emitted on said levels.
> 
> To keep backwards compatibility and to keep things simpler for coders
> who don't care about loglevels, loglines without prefix will be logged
> at the warn (brief) level.
>

I generally like it.

But I feel that one pice is missed.

If I make a filter with debug and trace logging, it can be quite noisy. I
not sure that it worth to send all debug and trace level logs to smtpd which
is ignored due to wrong log level.

I suggest to extend handshake protocol and to add a configured log-level,
which allows to adjust log level in filter and skip too noisy logs.

We also can make it dynamic, but here the catch:
 1. we may restart filters after changing a log level,
 2. or to send an update for handshake.

I think that (1) is safer solution, but I may be wrong.

> martijn@
> 
> diff bfd8327fa29c9064ad80b6cdb8235722bbf18877 
> acdf9909bf270b4d19c207f705c0e1bef68c8cc1
> commit - bfd8327fa29c9064ad80b6cdb8235722bbf18877
> commit + acdf9909bf270b4d19c207f705c0e1bef68c8cc1
> blob - b9c5d55c15f9052bc726f1a09484f0e32f75e2f3
> blob + cbd8657110f1cac373d7964c20b9fca57fc17ec1
> --- usr.sbin/smtpd/lka_filter.c
> +++ usr.sbin/smtpd/lka_filter.c
> @@ -317,8 +317,26 @@ processor_errfd(struct io *io, int evt, void *arg)
>  
>       switch (evt) {
>       case IO_DATAIN:
> -             while ((line = io_getline(io, &len)) != NULL)
> -                     log_warnx("%s: %s", name, line);
> +             while ((line = io_getline(io, &len)) != NULL) {
> +                     if (strncasecmp(line, "WARN|",
> +                         sizeof("WARN|") - 1) == 0)
> +                             log_warnx("%s: %s", name,
> +                                 line + sizeof("WARN|") - 1);
> +                     else if (strncasecmp(line, "INFO|",
> +                         sizeof("INFO|") - 1) == 0)
> +                             log_info("%s: %s", name,
> +                                 line + sizeof("INFO|") - 1);
> +                     else if (strncasecmp(line, "DEBUG|",
> +                         sizeof("DEBUG|") - 1) == 0)
> +                             log_debug("%s: %s", name,
> +                                 line + sizeof("DEBUG|") - 1);
> +                     else if (strncasecmp(line, "TRACE|",
> +                         sizeof("TRACE|") - 1) == 0)
> +                             log_trace(TRACE_FILTERS, "%s: %s", name,
> +                                 line + sizeof("TRACE|") - 1);
> +                     else
> +                             log_warnx("%s: %s", name, line);
> +             }
>       }
>  }
>  
> blob - 5a1bcbb39e2380f90adc754d4849b1ac7385c1fe
> blob + d5636b55abfd4bc86cd865851f4b9aa0cb9f2759
> --- usr.sbin/smtpd/smtpd-filters.7
> +++ usr.sbin/smtpd/smtpd-filters.7
> @@ -74,6 +74,12 @@ and may be written in any language.
>  must not use blocking I/O,
>  they must support answering asynchronously to
>  .Xr smtpd 8 .
> +.Pp
> +Loglines to
> +.Xr stderr 4
> +can be prefixed with WARN|, INFO|, DEBUG|, or TRACE| to specify the level at
> +which they need to be logged.
> +Lines without a prefix will be logged as warning.
>  .Sh REPORT AND FILTER
>  The API relies on two streams,
>  report and filter.
> 
> 

-- 
wbr, Kirill

Reply via email to