Argh, you should have talked to me first ...

Both require ssl and require auth are implemented already ... I did
not commit yet because we stabilized a release and decided to not
add new features to it unless they are critical.

This feature should be committed in a few days

Gilles


On Tue, Oct 09, 2012 at 03:24:32PM +0200, Alexander Hall wrote:
> Hi,
> 
> I suddenly got a flood of incoming spam, and when I could not find
> any trace of them in the spamdb output, I suspected it was coming in
> on port 587, which I had configured with tls and "enable auth"
> 
> I did not realize that that would allow anyone to send locally
> addressed mail to me that way, thus bypassing spamd.
> 
> So, I hesitated, but quite easily came up with this diff, which
> I'm testing out now.
> 
> This allows replacing "enable auth" with "require auth" like this:
> 
>   listen on bge0 port 587 tls certificate mycert require auth
>   listen on bge0 smtps certificate mycert require auth
> 
> Note the "require auth", as opposed to "enable auth"
> 
> Thoughts? OK?
> 
> /Alexander
> 
> 
> Index: parse.y
> ===================================================================
> RCS file: /data/openbsd/cvs/src/usr.sbin/smtpd/parse.y,v
> retrieving revision 1.104
> diff -u -p -r1.104 parse.y
> --- parse.y   30 Sep 2012 17:25:09 -0000      1.104
> +++ parse.y   9 Oct 2012 13:07:54 -0000
> @@ -124,7 +124,7 @@ typedef struct {
>  %token       DB LDAP PLAIN DOMAIN SOURCE
>  %token  RELAY BACKUP VIA DELIVER TO MAILDIR MBOX HOSTNAME
>  %token       ACCEPT REJECT INCLUDE ERROR MDA FROM FOR
> -%token       ARROW ENABLE AUTH TLS LOCAL VIRTUAL TAG ALIAS FILTER KEY DIGEST
> +%token       ARROW ENABLE REQUIRE AUTH TLS LOCAL VIRTUAL TAG ALIAS FILTER 
> KEY DIGEST
>  %token       <v.string>      STRING
>  %token  <v.number>   NUMBER
>  %type        <v.map>         map
> @@ -263,7 +263,9 @@ ssl               : SMTPS                         { $$ = 
> F_SMTPS; }
>               | /* empty */                   { $$ = 0; }
>               ;
>  
> -auth         : ENABLE AUTH                   { $$ = 1; }
> +auth         : ENABLE AUTH                   { $$ = F_AUTH; }
> +             | REQUIRE AUTH                  { $$ = F_AUTH |
> +                                                   F_AUTH_REQUIRED; }
>               | /* empty */                   { $$ = 0; }
>               ;
>  
> @@ -364,10 +366,7 @@ main             : QUEUE INTERVAL interval       {
>                       }
>  
>                       cert = ($6 != NULL) ? $6 : $3;
> -                     flags = $5;
> -
> -                     if ($7)
> -                             flags |= F_AUTH;
> +                     flags = $5 | $7;
>  
>                       if ($5 && ssl_load_certfile(cert, F_SCERT) < 0) {
>                               yyerror("cannot load certificate: %s", cert);
> @@ -967,6 +966,7 @@ lookup(char *s)
>               { "queue",              QUEUE },
>               { "reject",             REJECT },
>               { "relay",              RELAY },
> +             { "require",            REQUIRE },
>               { "single",             SINGLE },
>               { "size",               SIZE },
>               { "smtps",              SMTPS },
> Index: smtp_session.c
> ===================================================================
> RCS file: /data/openbsd/cvs/src/usr.sbin/smtpd/smtp_session.c,v
> retrieving revision 1.169
> diff -u -p -r1.169 smtp_session.c
> --- smtp_session.c    14 Sep 2012 19:22:04 -0000      1.169
> +++ smtp_session.c    9 Oct 2012 13:21:15 -0000
> @@ -400,6 +400,12 @@ session_rfc5321_mail_handler(struct sess
>               return 1;
>       }
>  
> +     if (s->s_l->flags & F_AUTH_REQUIRED &&
> +         !(s->s_flags & F_AUTHENTICATED)) {
> +             session_respond(s, "530 5.7.0 Authentication required");
> +             return 1;
> +     }
> +
>       if (s->s_state != S_HELO) {
>               session_respond(s, "503 5.5.1 Sender already specified");
>               return 1;
> Index: smtpd.h
> ===================================================================
> RCS file: /data/openbsd/cvs/src/usr.sbin/smtpd/smtpd.h,v
> retrieving revision 1.378
> diff -u -p -r1.378 smtpd.h
> --- smtpd.h   3 Oct 2012 19:42:16 -0000       1.378
> +++ smtpd.h   9 Oct 2012 13:07:54 -0000
> @@ -78,6 +78,7 @@
>  #define F_STARTTLS            0x01
>  #define F_SMTPS                       0x02
>  #define F_AUTH                        0x04
> +#define F_AUTH_REQUIRED               0x08
>  #define F_SSL                        (F_SMTPS|F_STARTTLS)
>  
>  #define      F_BACKUP                0x10    /* XXX */
> 

-- 
Gilles Chehade

https://www.poolp.org                                          @poolpOrg

Reply via email to