On Thu, Dec 06, 2018 at 04:10:15AM +0000, sunil+sm...@nimmagadda.net wrote:
> adding misc@opensmtpd.org... 
> 

diff ok with me !


> Date: Thu, 06 Dec 2018 04:05:49 +0000
> From: su...@nimmagadda.net
> To: Gilles Chehade <gil...@poolp.org>
> Cc: Cristiano Costa <cristiano.de.paula.co...@gmail.com>, misc@opensmtpd.org
> Subject: Re: Bounces sent from opensmtpd not parsed in Mailman
> 
> Gilles Chehade <gil...@poolp.org> wrote:
> > On Wed, Dec 05, 2018 at 04:53:20AM +0000, sunil+sm...@nimmagadda.net wrote:
> > > Gilles Chehade <gil...@poolp.org> wrote:
> > > [...]
> > > > >  ascii_load_bounce_type(enum bounce_type *dest, char *buf)
> > > > >  {
> > > > >       if (strcasecmp(buf, "error") == 0)
> > > > > -             *dest = B_ERROR;
> > > > > +             *dest = B_FAILED;
> > > > >       else if (strcasecmp(buf, "warn") == 0)
> > > > > -             *dest = B_WARNING;
> > > > > +             *dest = B_DELAYED;
> > > > >       else if (strcasecmp(buf, "dsn") == 0)
> > > > > -             *dest = B_DSN;
> > > > > +             *dest = B_DELIVERED;
> > > > 
> > > > 
> > > > the strcasecmp are not correct here
> > > > 
> > > > 
> > > > >       else
> > > > >               return 0;
> > > > >       return 1;
> > > > > @@ -574,13 +574,13 @@ ascii_dump_bounce_type(enum bounce_type 
> > > > >       char *p = NULL;
> > > > >  
> > > > >       switch (type) {
> > > > > -     case B_ERROR:
> > > > > +     case B_FAILED:
> > > > >               p = "error";
> > > > >               break;
> > > > > -     case B_WARNING:
> > > > > +     case B_DELAYED:
> > > > >               p = "warn";
> > > > >               break;
> > > > > -     case B_DSN:
> > > > > +     case B_DELIVERED:
> > > > >               p = "dsn";
> > > > >               break;
> > > > 
> > > > the dumped strings are not correct here
> > > 
> > > Wouldn't that require a bump to SMTPD_ENVELOPE_VERSION?
> > 
> > not necessarily
> > 
> > what you can do is have the load function recognize both strings but have
> > the dump function only emit new strings. this way you have a transitional
> > phase that we can retain until 6.6, and SMTPD_ENVELOPE_VERSION won't need
> > a bump because we can safely assume that no one will have bounce envelope
> > temp failing for over six months.
> 
> Sure, updated diff...
> 
> Index: bounce.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/bounce.c,v
> retrieving revision 1.79
> diff -u -p -r1.79 bounce.c
> --- bounce.c  31 May 2018 21:06:12 -0000      1.79
> +++ bounce.c  4 Dec 2018 13:05:14 -0000
> @@ -150,13 +150,13 @@ bounce_add(uint64_t evpid)
>  
>       switch (evp.esc_class) {
>       case ESC_STATUS_OK:
> -             key.bounce.type = B_DSN;
> +             key.bounce.type = B_DELIVERED;
>               break;
>       case ESC_STATUS_TEMPFAIL:
> -             key.bounce.type = B_WARNING;
> +             key.bounce.type = B_DELAYED;
>               break;
>       default:
> -             key.bounce.type = B_ERROR;
> +             key.bounce.type = B_FAILED;
>       }
>  
>       key.bounce.dsn_ret = evp.dsn_ret;
> @@ -478,14 +478,14 @@ bounce_next(struct bounce_session *s)
>                   s->boundary, s->smtpname);
>  
>               switch (s->msg->bounce.type) {
> -             case B_ERROR:
> +             case B_FAILED:
>                       io_xprint(s->io, notice_error);
>                       break;
> -             case B_WARNING:
> +             case B_DELAYED:
>                       io_xprintf(s->io, notice_warning,
>                           bounce_duration(s->msg->bounce.delay));
>                       break;
> -             case B_DSN:
> +             case B_DELIVERED:
>                       io_xprint(s->io, s->msg->bounce.mta_without_dsn ?
>                           notice_relay : notice_success);
>                       break;
> @@ -498,7 +498,7 @@ bounce_next(struct bounce_session *s)
>               }
>               io_xprint(s->io, "\n");
>  
> -             if (s->msg->bounce.type == B_WARNING)
> +             if (s->msg->bounce.type == B_DELAYED)
>                       io_xprintf(s->io, notice_warning2,
>                           bounce_duration(s->msg->bounce.ttl));
>  
> @@ -549,7 +549,7 @@ bounce_next(struct bounce_session *s)
>                       if ((len = getline(&line, &sz, s->msgfp)) == -1)
>                               break;
>                       if (len == 1 && line[0] == '\n' && /* end of headers */
> -                         s->msg->bounce.type == B_DSN &&
> +                         s->msg->bounce.type == B_DELIVERED &&
>                           s->msg->bounce.dsn_ret ==  DSN_RETHDRS) {
>                               free(line);
>                               fclose(s->msgfp);
> @@ -795,15 +795,15 @@ static const char *
>  action_str(const struct delivery_bounce *b)
>  {
>       switch (b->type) {
> -     case B_ERROR:
> -             return ("error");
> -     case B_WARNING:
> +     case B_FAILED:
> +             return ("failed");
> +     case B_DELAYED:
>               return ("delayed");
> -     case B_DSN:
> +     case B_DELIVERED:
>               if (b->mta_without_dsn)
>                       return ("relayed");
>  
> -             return ("success");
> +             return ("delivered");
>       default:
>               log_warn("warn: bounce: unknown bounce_type");
>               return ("");
> Index: envelope.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/envelope.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 envelope.c
> --- envelope.c        29 May 2018 19:48:19 -0000      1.39
> +++ envelope.c        6 Dec 2018 03:58:58 -0000
> @@ -344,12 +344,14 @@ ascii_load_flags(enum envelope_flags *de
>  static int
>  ascii_load_bounce_type(enum bounce_type *dest, char *buf)
>  {
> -     if (strcasecmp(buf, "error") == 0)
> -             *dest = B_ERROR;
> -     else if (strcasecmp(buf, "warn") == 0)
> -             *dest = B_WARNING;
> -     else if (strcasecmp(buf, "dsn") == 0)
> -             *dest = B_DSN;
> +     if (strcasecmp(buf, "error") == 0 || strcasecmp(buf, "failed") == 0)
> +             *dest = B_FAILED;
> +     else if (strcasecmp(buf, "warn") == 0 ||
> +         strcasecmp(buf, "delayed") == 0)
> +             *dest = B_DELAYED;
> +     else if (strcasecmp(buf, "dsn") == 0 ||
> +         strcasecmp(buf, "delivered") == 0)
> +             *dest = B_DELIVERED;
>       else
>               return 0;
>       return 1;
> @@ -574,14 +576,14 @@ ascii_dump_bounce_type(enum bounce_type 
>       char *p = NULL;
>  
>       switch (type) {
> -     case B_ERROR:
> -             p = "error";
> +     case B_FAILED:
> +             p = "failed";
>               break;
> -     case B_WARNING:
> -             p = "warn";
> +     case B_DELAYED:
> +             p = "delayed";
>               break;
> -     case B_DSN:
> -             p = "dsn";
> +     case B_DELIVERED:
> +             p = "delivered";
>               break;
>       default:
>               return 0;
> @@ -612,13 +614,13 @@ ascii_dump_field(const char *field, cons
>               return ascii_dump_string(ep->dispatcher, buf, len);
>  
>       if (strcasecmp(field, "bounce-delay") == 0) {
> -             if (ep->agent.bounce.type != B_WARNING)
> +             if (ep->agent.bounce.type != B_DELAYED)
>                       return (1);
>               return ascii_dump_time(ep->agent.bounce.delay, buf, len);
>       }
>  
>       if (strcasecmp(field, "bounce-ttl") == 0) {
> -             if (ep->agent.bounce.type != B_WARNING)
> +             if (ep->agent.bounce.type != B_DELAYED)
>                       return (1);
>               return ascii_dump_time(ep->agent.bounce.ttl, buf, len);
>       }
> Index: queue.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/queue.c,v
> retrieving revision 1.187
> diff -u -p -r1.187 queue.c
> --- queue.c   31 May 2018 21:06:12 -0000      1.187
> +++ queue.c   4 Dec 2018 13:05:14 -0000
> @@ -210,7 +210,7 @@ queue_imsg(struct mproc *p, struct imsg 
>               if (queue_envelope_load(evpid, &evp) == 0)
>                       return;
>  
> -             bounce.type = B_ERROR;
> +             bounce.type = B_FAILED;
>               envelope_set_errormsg(&evp, "Envelope expired");
>               envelope_set_esc_class(&evp, ESC_STATUS_TEMPFAIL);
>               envelope_set_esc_code(&evp, ESC_DELIVERY_TIME_EXPIRED);
> @@ -342,7 +342,7 @@ queue_imsg(struct mproc *p, struct imsg 
>                       return;
>               }
>               if (evp.dsn_notify & DSN_SUCCESS) {
> -                     bounce.type = B_DSN;
> +                     bounce.type = B_DELIVERED;
>                       bounce.dsn_ret = evp.dsn_ret;
>                       envelope_set_esc_class(&evp, ESC_STATUS_OK);
>                       if (imsg->hdr.type == IMSG_MDA_DELIVERY_OK)
> @@ -400,7 +400,7 @@ queue_imsg(struct mproc *p, struct imsg 
>                       m_close(p_scheduler);
>                       return;
>               }
> -             bounce.type = B_ERROR;
> +             bounce.type = B_FAILED;
>               envelope_set_errormsg(&evp, "%s", reason);
>               envelope_set_esc_class(&evp, ESC_STATUS_PERMFAIL);
>               envelope_set_esc_code(&evp, code);
> @@ -427,7 +427,7 @@ queue_imsg(struct mproc *p, struct imsg 
>               envelope_set_errormsg(&evp, "%s", "Loop detected");
>               envelope_set_esc_class(&evp, ESC_STATUS_TEMPFAIL);
>               envelope_set_esc_code(&evp, ESC_ROUTING_LOOP_DETECTED);
> -             bounce.type = B_ERROR;
> +             bounce.type = B_FAILED;
>               queue_bounce(&evp, &bounce);
>               queue_envelope_delete(evp.id);
>               m_create(p_scheduler, IMSG_QUEUE_DELIVERY_LOOP, 0, 0, -1);
> Index: scheduler.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/scheduler.c,v
> retrieving revision 1.58
> diff -u -p -r1.58 scheduler.c
> --- scheduler.c       31 May 2018 21:06:12 -0000      1.58
> +++ scheduler.c       4 Dec 2018 13:04:53 -0000
> @@ -214,7 +214,7 @@ scheduler_imsg(struct mproc *p, struct i
>                           si.lastbounce < timestamp) {
>                               req.evpid = evp.id;
>                               req.timestamp = timestamp;
> -                             req.bounce.type = B_WARNING;
> +                             req.bounce.type = B_DELAYED;
>                               req.bounce.delay = env->sc_bounce_warn[i];
>                               req.bounce.ttl = si.ttl;
>                               m_compose(p, IMSG_SCHED_ENVELOPE_BOUNCE, 0, 0, 
> -1,
> Index: smtpd.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/smtpd/smtpd.h,v
> retrieving revision 1.575
> diff -u -p -r1.575 smtpd.h
> --- smtpd.h   30 Nov 2018 15:33:40 -0000      1.575
> +++ smtpd.h   4 Dec 2018 13:05:14 -0000
> @@ -374,9 +374,9 @@ struct table_backend {
>  
>  
>  enum bounce_type {
> -     B_ERROR,
> -     B_WARNING,
> -     B_DSN
> +     B_FAILED,
> +     B_DELAYED,
> +     B_DELIVERED
>  };
>  
>  enum dsn_ret {


-- 
Gilles Chehade                                                 @poolpOrg

https://www.poolp.org                 tip me: https://paypal.me/poolpOrg

-- 
You received this mail because you are subscribed to misc@opensmtpd.org
To unsubscribe, send a mail to: misc+unsubscr...@opensmtpd.org

Reply via email to