diff options
-rw-r--r-- | usr.sbin/smtpd/bounce.c | 57 | ||||
-rw-r--r-- | usr.sbin/smtpd/filter.c | 8 | ||||
-rw-r--r-- | usr.sbin/smtpd/mda.c | 21 | ||||
-rw-r--r-- | usr.sbin/smtpd/mta_session.c | 21 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtp_session.c | 37 |
5 files changed, 67 insertions, 77 deletions
diff --git a/usr.sbin/smtpd/bounce.c b/usr.sbin/smtpd/bounce.c index 05144e03b37..92fe56283be 100644 --- a/usr.sbin/smtpd/bounce.c +++ b/usr.sbin/smtpd/bounce.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bounce.c,v 1.74 2016/11/20 08:43:36 eric Exp $ */ +/* $OpenBSD: bounce.c,v 1.75 2016/11/21 13:00:43 eric Exp $ */ /* * Copyright (c) 2009 Gilles Chehade <gilles@poolp.org> @@ -313,7 +313,7 @@ bounce_send(struct bounce_session *s, const char *fmt, ...) log_trace(TRACE_BOUNCE, "bounce: %p: >>> %s", s, p); - iobuf_xfqueue(&s->iobuf, "bounce_send", "%s\n", p); + io_xprintf(&s->io, "%s\n", p); free(p); } @@ -452,7 +452,7 @@ bounce_next(struct bounce_session *s) case BOUNCE_DATA_NOTICE: /* Construct an appropriate notice. */ - iobuf_xfqueue(&s->iobuf, "bounce_next: HEADER", + io_xprintf(&s->io, "Subject: Delivery status notification: %s\n" "From: Mailer Daemon <MAILER-DAEMON@%s>\n" "To: %s\n" @@ -470,7 +470,7 @@ bounce_next(struct bounce_session *s) s->boundary, s->smtpname); - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "--%16" PRIu64 "/%s\n" "Content-Description: Notification\n" "Content-Type: text/plain; charset=us-ascii\n" @@ -481,17 +481,14 @@ bounce_next(struct bounce_session *s) switch (s->msg->bounce.type) { case B_ERROR: - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", - notice_error); + io_xprint(&s->io, notice_error); break; case B_WARNING: - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", - notice_warning, + io_xprintf(&s->io, notice_warning, bounce_duration(s->msg->bounce.delay)); break; case B_DSN: - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", - s->msg->bounce.mta_without_dsn ? + io_xprint(&s->io, s->msg->bounce.mta_without_dsn ? notice_relay : notice_success); break; default: @@ -499,35 +496,32 @@ bounce_next(struct bounce_session *s) } TAILQ_FOREACH(evp, &s->msg->envelopes, entry) { - iobuf_xfqueue(&s->iobuf, - "bounce_next: DATA_NOTICE", - "%s", evp->report); + io_xprint(&s->io, evp->report); } - iobuf_xfqueue(&s->iobuf, "bounce_next: DATA_NOTICE", "\n"); + io_xprint(&s->io, "\n"); if (s->msg->bounce.type == B_WARNING) - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", - notice_warning2, + io_xprintf(&s->io, notice_warning2, bounce_duration(s->msg->bounce.expire)); - iobuf_xfqueue(&s->iobuf, "bounce_next: DATA_NOTICE", + io_xprintf(&s->io, " Below is a copy of the original message:\n" "\n"); - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "--%16" PRIu64 "/%s\n" "Content-Description: Delivery Report\n" "Content-Type: message/delivery-status\n" "\n", s->boundary, s->smtpname); - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "Reporting-MTA: dns; %s\n" "\n", s->smtpname); TAILQ_FOREACH(evp, &s->msg->envelopes, entry) { - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "Final-Recipient: rfc822; %s@%s\n" "Action: %s\n" "Status: %s\n" @@ -539,21 +533,21 @@ bounce_next(struct bounce_session *s) } log_trace(TRACE_BOUNCE, "bounce: %p: >>> [... %zu bytes ...]", - s, iobuf_queued(&s->iobuf)); + s, io_queued(&s->io)); s->state = BOUNCE_DATA_MESSAGE; break; case BOUNCE_DATA_MESSAGE: - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "--%16" PRIu64 "/%s\n" "Content-Description: Message headers\n" "Content-Type: text/rfc822-headers\n" "\n", s->boundary, s->smtpname); - n = iobuf_queued(&s->iobuf); - while (iobuf_queued(&s->iobuf) < BOUNCE_HIWAT) { + n = io_queued(&s->io); + while (io_queued(&s->io) < BOUNCE_HIWAT) { if ((len = getline(&line, &sz, s->msgfp)) == -1) break; if (len == 1 && line[0] == '\n' && /* end of headers */ @@ -562,7 +556,7 @@ bounce_next(struct bounce_session *s) free(line); fclose(s->msgfp); s->msgfp = NULL; - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "\n--%16" PRIu64 "/%s--\n", s->boundary, s->smtpname); bounce_send(s, "."); @@ -570,8 +564,7 @@ bounce_next(struct bounce_session *s) return (0); } line[len - 1] = '\0'; - iobuf_xfqueue(&s->iobuf, - "bounce_next: DATA_MESSAGE", "%s%s\n", + io_xprintf(&s->io, "%s%s\n", (len == 2 && line[0] == '.') ? "." : "", line); } free(line); @@ -585,11 +578,11 @@ bounce_next(struct bounce_session *s) return (-1); } - iobuf_xfqueue(&s->iobuf, "bounce_next: BODY", + io_xprintf(&s->io, "\n--%16" PRIu64 "/%s--\n", s->boundary, s->smtpname); log_trace(TRACE_BOUNCE, "bounce: %p: >>> [... %zu bytes ...]", - s, iobuf_queued(&s->iobuf) - n); + s, io_queued(&s->io) - n); if (feof(s->msgfp)) { fclose(s->msgfp); @@ -728,8 +721,8 @@ bounce_io(struct io *io, int evt, void *arg) switch (evt) { case IO_DATAIN: nextline: - line = iobuf_getline(&s->iobuf, &len); - if (line == NULL && iobuf_len(&s->iobuf) >= LINE_MAX) { + line = io_getline(&s->io, &len); + if (line == NULL && io_datalen(&s->io) >= LINE_MAX) { bounce_status(s, "Input too long"); bounce_free(s); return; @@ -776,7 +769,7 @@ bounce_io(struct io *io, int evt, void *arg) bounce_free(s); return; } - if (iobuf_queued(&s->iobuf) == 0) + if (io_queued(&s->io) == 0) io_set_read(io); break; diff --git a/usr.sbin/smtpd/filter.c b/usr.sbin/smtpd/filter.c index 516d378d8a6..f8682455e52 100644 --- a/usr.sbin/smtpd/filter.c +++ b/usr.sbin/smtpd/filter.c @@ -1,4 +1,4 @@ -/* $OpenBSD: filter.c,v 1.21 2016/11/20 08:43:36 eric Exp $ */ +/* $OpenBSD: filter.c,v 1.22 2016/11/21 13:00:43 eric Exp $ */ /* * Copyright (c) 2011 Gilles Chehade <gilles@poolp.org> @@ -691,8 +691,8 @@ filter_tx_io(struct io *io, int evt, void *arg) switch (evt) { case IO_DATAIN: - data = iobuf_data(&s->ibuf); - len = iobuf_len(&s->ibuf); + data = io_data(&s->iev); + len = io_datalen(&s->iev); log_trace(TRACE_FILTERS, "filter: filter_tx_io: datain (%zu) for req %016"PRIx64"", @@ -705,7 +705,7 @@ filter_tx_io(struct io *io, int evt, void *arg) break; } s->idatalen += n; - iobuf_drop(&s->ibuf, n); + io_drop(&s->iev, n); iobuf_normalize(&s->ibuf); return; diff --git a/usr.sbin/smtpd/mda.c b/usr.sbin/smtpd/mda.c index 946d9752d66..b7d704b3db0 100644 --- a/usr.sbin/smtpd/mda.c +++ b/usr.sbin/smtpd/mda.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mda.c,v 1.122 2016/11/20 08:43:36 eric Exp $ */ +/* $OpenBSD: mda.c,v 1.123 2016/11/21 13:00:43 eric Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org> @@ -253,11 +253,10 @@ mda_imsg(struct mproc *p, struct imsg *imsg) if (e->method == A_MDA || e->method == A_FILENAME) { time(&now); if (e->sender[0]) - n = iobuf_fqueue(&s->iobuf, - "From %s %s", e->sender, - ctime(&now)); + n = io_printf(&s->io, "From %s %s", + e->sender, ctime(&now)); else - n = iobuf_fqueue(&s->iobuf, + n = io_printf(&s->io, "From MAILER-DAEMON@%s %s", env->sc_hostname, ctime(&now)); } @@ -268,13 +267,13 @@ mda_imsg(struct mproc *p, struct imsg *imsg) * XXX: remove existing Return-Path, * if any */ - n = iobuf_fqueue(&s->iobuf, + n = io_printf(&s->io, "Return-Path: %s\n" "Delivered-To: %s\n", e->sender, e->rcpt ? e->rcpt : e->dest); else - n = iobuf_fqueue(&s->iobuf, + n = io_printf(&s->io, "Delivered-To: %s\n", e->rcpt ? e->rcpt : e->dest); } @@ -457,7 +456,7 @@ mda_imsg(struct mproc *p, struct imsg *imsg) */ error = NULL; if (strcmp(parent_error, "exited okay") == 0) { - if (s->datafp || iobuf_queued(&s->iobuf)) + if (s->datafp || io_queued(&s->io)) error = "mda exited prematurely"; } else error = out[0] ? out : parent_error; @@ -519,10 +518,10 @@ mda_io(struct io *io, int evt, void *arg) return; } - while (iobuf_queued(&s->iobuf) < MDA_HIWAT) { + while (io_queued(&s->io) < MDA_HIWAT) { if ((len = getline(&ln, &sz, s->datafp)) == -1) break; - if (iobuf_queue(&s->iobuf, ln, len) == -1) { + if (io_write(&s->io, ln, len) == -1) { m_create(p_parent, IMSG_MDA_KILL, 0, 0, -1); m_add_id(p_parent, s->id); @@ -553,7 +552,7 @@ mda_io(struct io *io, int evt, void *arg) s->id, s->evp->id); fclose(s->datafp); s->datafp = NULL; - if (iobuf_queued(&s->iobuf) == 0) + if (io_queued(&s->io) == 0) goto done; } return; diff --git a/usr.sbin/smtpd/mta_session.c b/usr.sbin/smtpd/mta_session.c index 98dbb47cfd0..0ea8a09e3c0 100644 --- a/usr.sbin/smtpd/mta_session.c +++ b/usr.sbin/smtpd/mta_session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mta_session.c,v 1.87 2016/11/20 08:43:36 eric Exp $ */ +/* $OpenBSD: mta_session.c,v 1.88 2016/11/21 13:00:43 eric Exp $ */ /* * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org> @@ -1177,9 +1177,9 @@ mta_io(struct io *io, int evt, void *arg) case IO_DATAIN: nextline: - line = iobuf_getline(&s->iobuf, &len); + line = io_getline(&s->io, &len); if (line == NULL) { - if (iobuf_len(&s->iobuf) >= LINE_MAX) { + if (io_datalen(&s->io) >= LINE_MAX) { mta_error(s, "Input too long"); mta_free(s); return; @@ -1266,7 +1266,7 @@ mta_io(struct io *io, int evt, void *arg) iobuf_normalize(&s->iobuf); - if (iobuf_len(&s->iobuf)) { + if (io_datalen(&s->io)) { log_debug("debug: mta: remaining data in input buffer"); mta_error(s, "Remote host sent too much data"); if (s->flags & MTA_WAIT) @@ -1285,7 +1285,7 @@ mta_io(struct io *io, int evt, void *arg) } } - if (iobuf_queued(&s->iobuf) == 0) + if (io_queued(&s->io) == 0) io_set_read(io); break; @@ -1366,7 +1366,7 @@ mta_send(struct mta_session *s, char *fmt, ...) log_trace(TRACE_MTA, "mta: %p: >>> %s", s, p); - iobuf_xfqueue(&s->iobuf, "mta_send", "%s\r\n", p); + io_xprintf(&s->io, "%s\r\n", p); free(p); } @@ -1381,15 +1381,14 @@ mta_queue_data(struct mta_session *s) size_t sz = 0, q; ssize_t len; - q = iobuf_queued(&s->iobuf); + q = io_queued(&s->io); - while (iobuf_queued(&s->iobuf) < MTA_HIWAT) { + while (io_queued(&s->io) < MTA_HIWAT) { if ((len = getline(&ln, &sz, s->datafp)) == -1) break; if (ln[len - 1] == '\n') ln[len - 1] = '\0'; - iobuf_xfqueue(&s->iobuf, "mta_queue_data", "%s%s\r\n", - *ln == '.' ? "." : "", ln); + io_xprintf(&s->io, "%s%s\r\n", *ln == '.' ? "." : "", ln); } free(ln); @@ -1404,7 +1403,7 @@ mta_queue_data(struct mta_session *s) s->datafp = NULL; } - return (iobuf_queued(&s->iobuf) - q); + return (io_queued(&s->io) - q); } static void diff --git a/usr.sbin/smtpd/smtp_session.c b/usr.sbin/smtpd/smtp_session.c index f1682c40742..f9cb5ee0f1e 100644 --- a/usr.sbin/smtpd/smtp_session.c +++ b/usr.sbin/smtpd/smtp_session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: smtp_session.c,v 1.293 2016/11/20 08:43:36 eric Exp $ */ +/* $OpenBSD: smtp_session.c,v 1.294 2016/11/21 13:00:43 eric Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@poolp.org> @@ -1208,14 +1208,14 @@ smtp_filter_fd(uint64_t id, int fd) io_set_callback(&s->tx->oev, smtp_data_io, s); io_set_fd(&s->tx->oev, fd); - iobuf_fqueue(&s->tx->obuf, "Received: "); + io_print(&s->tx->oev, "Received: "); if (!(s->listener->flags & F_MASK_SOURCE)) { - iobuf_fqueue(&s->tx->obuf, "from %s (%s [%s])", + io_printf(&s->tx->oev, "from %s (%s [%s])", s->helo, s->hostname, ss_to_text(&s->ss)); } - iobuf_fqueue(&s->tx->obuf, "\n\tby %s (%s) with %sSMTP%s%s id %08x", + io_printf(&s->tx->oev, "\n\tby %s (%s) with %sSMTP%s%s id %08x", s->smtpname, SMTPD_NAME, s->flags & SF_EHLO ? "E" : "", @@ -1225,8 +1225,7 @@ smtp_filter_fd(uint64_t id, int fd) if (s->flags & SF_SECURE) { x = SSL_get_peer_certificate(s->io.ssl); - iobuf_fqueue(&s->tx->obuf, - " (%s:%s:%d:%s)", + io_printf(&s->tx->oev, " (%s:%s:%d:%s)", SSL_get_version(s->io.ssl), SSL_get_cipher_name(s->io.ssl), SSL_get_cipher_bits(s->io.ssl, NULL), @@ -1235,21 +1234,21 @@ smtp_filter_fd(uint64_t id, int fd) X509_free(x); if (s->listener->flags & F_RECEIVEDAUTH) { - iobuf_fqueue(&s->tx->obuf, " auth=%s", s->username[0] ? "yes" : "no"); + io_printf(&s->tx->oev, " auth=%s", s->username[0] ? "yes" : "no"); if (s->username[0]) - iobuf_fqueue(&s->tx->obuf, " user=%s", s->username); + io_printf(&s->tx->oev, " user=%s", s->username); } } if (s->tx->rcptcount == 1) { - iobuf_fqueue(&s->tx->obuf, "\n\tfor <%s@%s>", + io_printf(&s->tx->oev, "\n\tfor <%s@%s>", s->tx->evp.rcpt.user, s->tx->evp.rcpt.domain); } - iobuf_fqueue(&s->tx->obuf, ";\n\t%s\n", time_to_text(time(NULL))); + io_printf(&s->tx->oev, ";\n\t%s\n", time_to_text(time(NULL))); - s->tx->odatalen = iobuf_queued(&s->tx->obuf); + s->tx->odatalen = io_queued(&s->tx->oev); io_set_write(&s->tx->oev); @@ -1299,8 +1298,8 @@ smtp_io(struct io *io, int evt, void *arg) case IO_DATAIN: nextline: - line = iobuf_getline(&s->iobuf, &len); - if ((line == NULL && iobuf_len(&s->iobuf) >= LINE_MAX) || + line = io_getline(&s->io, &len); + if ((line == NULL && io_datalen(&s->io) >= LINE_MAX) || (line && len >= LINE_MAX)) { s->flags |= SF_BADINPUT; smtp_reply(s, "500 %s: Line too long", @@ -1323,7 +1322,7 @@ smtp_io(struct io *io, int evt, void *arg) } /* Pipelining not supported */ - if (iobuf_len(&s->iobuf)) { + if (io_datalen(&s->io)) { s->flags |= SF_BADINPUT; smtp_reply(s, "500 %s %s: Pipelining not supported", esc_code(ESC_STATUS_PERMFAIL, ESC_INVALID_COMMAND), @@ -1343,7 +1342,7 @@ smtp_io(struct io *io, int evt, void *arg) io_set_write(io); s->tx->dataeom = 1; - if (iobuf_queued(&s->tx->obuf) == 0) + if (io_queued(&s->tx->oev) == 0) smtp_data_io_done(s); else io_reload(&s->tx->oev); @@ -1507,7 +1506,7 @@ smtp_data_io(struct io *io, int evt, void *arg) break; case IO_LOWAT: - if (s->tx->dataeom && iobuf_queued(&s->tx->obuf) == 0) { + if (s->tx->dataeom && io_queued(&s->tx->oev) == 0) { smtp_data_io_done(s); } else if (s->io.flags & IO_PAUSE_IN) { log_debug("debug: smtp: %p: filter congestion over: resuming session", s); @@ -2189,7 +2188,7 @@ smtp_message_printf(struct smtp_session *s, const char *fmt, ...) return -1; va_start(ap, fmt); - len = iobuf_vfqueue(&s->tx->obuf, fmt, ap); + len = io_vprintf(&s->tx->oev, fmt, ap); va_end(ap); if (len < 0) { @@ -2219,7 +2218,7 @@ smtp_reply(struct smtp_session *s, char *fmt, ...) log_trace(TRACE_SMTP, "smtp: %p: >>> %s", s, buf); - iobuf_xfqueue(&s->iobuf, "smtp_reply", "%s\r\n", buf); + io_xprintf(&s->io, "%s\r\n", buf); switch (buf[0]) { case '5': @@ -2663,7 +2662,7 @@ smtp_filter_dataline(struct smtp_session *s, const char *line) return; } - if (iobuf_queued(&s->tx->obuf) > DATA_HIWAT && !(s->io.flags & IO_PAUSE_IN)) { + if (io_queued(&s->tx->oev) > DATA_HIWAT && !(s->io.flags & IO_PAUSE_IN)) { log_debug("debug: smtp: %p: filter congestion over: pausing session", s); io_pause(&s->io, IO_PAUSE_IN); } |