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