Nice to see such feature (no need dovecot).
For now, It's still possible with dovecot, lmtp delivery and sieve filter [1].

[1] https://wiki.dovecot.org/Pigeonhole/Sieve/Extensions/SpamtestVirustest

24 novembre 2018 18:02 "Edgar Pettijohn III" <ed...@pettijohn-web.com> a écrit:

> make the junk header customizable like so:
> 
> action "local" maildir junk "X-Spam-Flag: YES"
> 
> Index: mail.maildir.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/mail.maildir.8,v
> retrieving revision 1.5
> diff -u -p -u -r1.5 mail.maildir.8
> --- mail.maildir.8    30 May 2018 12:37:57 -0000    1.5
> +++ mail.maildir.8    24 Nov 2018 16:58:03 -0000
> @@ -22,7 +22,7 @@
> .Nd store mail in a maildir
> .Sh SYNOPSIS
> .Nm mail.maildir
> -.Op Fl j
> +.Op Fl j header
> .Op Ar pathname
> .Sh DESCRIPTION
> .Nm
> @@ -36,7 +36,9 @@ located in the user's home directory.
> The options are as follows:
> .Bl -tag -width Ds
> .It Fl j
> -Scan message for X-Spam and move to Junk folder if result is positive.
> +Scan message for
> +.Ar header
> +and move to Junk folder if result is positive.
> .El
> .Sh EXIT STATUS
> .Ex -std mail.maildir
> Index: mail.maildir.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/mail.maildir.c,v
> retrieving revision 1.7
> diff -u -p -u -r1.7 mail.maildir.c
> --- mail.maildir.c    24 Oct 2018 19:26:23 -0000    1.7
> +++ mail.maildir.c    24 Nov 2018 16:58:03 -0000
> @@ -37,23 +37,25 @@
> 
> static int    maildir_subdir(const char *, char *, size_t);
> static void    maildir_mkdirs(const char *);
> -static void    maildir_engine(const char *, int);
> +static void    maildir_engine(const char *, int, const char *);
> static int    mkdirs_component(const char *, mode_t);
> static int    mkdirs(const char *, mode_t);
> 
> int
> main(int argc, char *argv[])
> {
> -    int    ch;
> -    int    junk = 0;
> +    int     ch;
> +    int     junk = 0;
> +    char    *header = NULL;
> 
> if (! geteuid())
> errx(1, "mail.maildir: may not be executed as root");
> 
> -    while ((ch = getopt(argc, argv, "j")) != -1) {
> +    while ((ch = getopt(argc, argv, "j:")) != -1) {
> switch (ch) {
> case 'j':
> junk = 1;
> +            header = optarg;
> break;
> default:
> break;
> @@ -65,7 +67,7 @@ main(int argc, char *argv[])
> if (argc > 1)
> errx(1, "mail.maildir: only one maildir is allowed");
> 
> -    maildir_engine(argv[0], junk);
> +    maildir_engine(argv[0], junk, header);
> 
> return (0);
> }
> @@ -107,7 +109,7 @@ maildir_mkdirs(const char *dirname)
> }
> 
> static void
> -maildir_engine(const char *dirname, int junk)
> +maildir_engine(const char *dirname, int junk, const char *header)
> {
> char    rootpath[PATH_MAX];
> char    junkpath[PATH_MAX];
> @@ -182,7 +184,7 @@ maildir_engine(const char *dirname, int
> line[strcspn(line, "\n")] = '\0';
> if (line[0] == '\0')
> in_hdr = 0;
> -        if (junk && in_hdr && strcmp(line, "X-Spam: yes") == 0)
> +        if (junk && in_hdr && strcmp(line, header) == 0)
> is_junk = 1;
> fprintf(fp, "%s\n", line);
> }
> Index: smtpd.conf.5
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/smtpd.conf.5,v
> retrieving revision 1.206
> diff -u -p -u -r1.206 smtpd.conf.5
> --- smtpd.conf.5    8 Oct 2018 06:10:17 -0000    1.206
> +++ smtpd.conf.5    24 Nov 2018 16:58:03 -0000
> @@ -128,7 +128,7 @@ Optionally,
> might be specified to use the
> recipient email address (after expansion) instead of the
> local user in the LMTP session as RCPT TO.
> -.It Cm maildir Op Ar pathname Op Cm junk
> +.It Cm maildir Op Ar pathname Op Cm junk header
> Deliver the message to the maildir in
> .Ar pathname
> if specified, or by default to
> @@ -142,7 +142,8 @@ may contain format specifiers that are e
> If the
> .Cm junk
> argument is provided, the message will be moved to the Junk
> -folder if it contains a positive X-Spam header.
> +folder if it contains a positive match for the provided
> +.Ar header .
> .It Cm mbox
> Deliver the message to the user's mbox with
> .Xr mail.local 8 .
> Index: parse.y
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/parse.y,v
> retrieving revision 1.230
> diff -u -p -u -r1.230 parse.y
> --- parse.y    8 Nov 2018 13:24:22 -0000    1.230
> +++ parse.y    24 Nov 2018 16:58:04 -0000
> @@ -662,8 +662,8 @@ MBOX {
> | MAILDIR {
> asprintf(&dispatcher->u.local.command, "/usr/libexec/mail.maildir");
> } dispatcher_local_options
> -| MAILDIR JUNK {
> -    asprintf(&dispatcher->u.local.command, "/usr/libexec/mail.maildir -j");
> +| MAILDIR JUNK STRING {
> +    asprintf(&dispatcher->u.local.command, "/usr/libexec/mail.maildir -j 
> \"%s\"", $3);
> } dispatcher_local_options
> | MAILDIR STRING {
> if (strncmp($2, "~/", 2) == 0)
> @@ -673,13 +673,13 @@ MBOX {
> asprintf(&dispatcher->u.local.command,
> "/usr/libexec/mail.maildir \"%s\"", $2);
> } dispatcher_local_options
> -| MAILDIR STRING JUNK {
> +| MAILDIR STRING JUNK STRING{
> if (strncmp($2, "~/", 2) == 0)
> asprintf(&dispatcher->u.local.command,
> -            "/usr/libexec/mail.maildir -j \"%%{user.directory}/%s\"", $2+2);
> +            "/usr/libexec/mail.maildir -j \"%s\" \"%%{user.directory}/%s\"", 
> $4, $2+2);
> else
> asprintf(&dispatcher->u.local.command,
> -            "/usr/libexec/mail.maildir -j \"%s\"", $2);
> +            "/usr/libexec/mail.maildir -j \"%s\" \"%s\"", $4, $2);
> } dispatcher_local_options
> | LMTP STRING {
> asprintf(&dispatcher->u.local.command,
> 
> -- You received this mail because you are subscribed to m...@opensmtpd.org
> To unsubscribe, send a mail to: misc+unsubscr...@opensmtpd.org

Reply via email to