diff options
author | gilles <gilles@poolp.org> | 2016-06-05 14:10:50 +0200 |
---|---|---|
committer | gilles <gilles@poolp.org> | 2016-06-05 14:10:50 +0200 |
commit | dcae1c52ec931f852c890c72b4fb126ab9a67e5d (patch) | |
tree | 5824796cc10e1154b09e86723ce0f9538f35fb20 | |
parent | sync with OpenBSD: (diff) | |
download | OpenSMTPD-dcae1c52ec931f852c890c72b4fb126ab9a67e5d.tar.xz OpenSMTPD-dcae1c52ec931f852c890c72b4fb126ab9a67e5d.zip |
sync with OpenBSD:
- add support for multi-line banners in delivery_lmtp
-rw-r--r-- | smtpd/CVS/Entries | 150 | ||||
-rw-r--r-- | smtpd/delivery_lmtp.c | 45 |
2 files changed, 114 insertions, 81 deletions
diff --git a/smtpd/CVS/Entries b/smtpd/CVS/Entries index b9656132..94345210 100644 --- a/smtpd/CVS/Entries +++ b/smtpd/CVS/Entries @@ -13,78 +13,78 @@ D/smtpd//// /smtpd-api.h/1.29/Mon Mar 7 16:27:28 2016// /smtpd.8/1.30/Wed May 18 07:36:31 2016// /table.5/1.5/Mon Mar 7 16:27:28 2016// -/aliases.c/1.70/Tue May 31 13:00:36 2016// -/bounce.c/1.72/Tue May 31 13:00:36 2016// -/ca.c/1.22/Tue May 31 13:00:36 2016// -/compress_backend.c/1.9/Tue May 31 13:00:36 2016// -/compress_gzip.c/1.10/Tue May 31 13:00:36 2016// -/config.c/1.35/Tue May 31 13:00:36 2016// -/control.c/1.113/Tue May 31 13:00:36 2016// -/crypto.c/1.5/Tue May 31 13:00:36 2016// -/delivery.c/1.6/Tue May 31 13:00:36 2016// -/delivery_filename.c/1.14/Tue May 31 13:00:36 2016// -/delivery_lmtp.c/1.16/Sun Jun 5 12:05:31 2016// -/delivery_maildir.c/1.17/Tue May 31 13:00:36 2016// -/delivery_mbox.c/1.12/Tue May 31 13:00:36 2016// -/delivery_mda.c/1.9/Tue May 31 13:00:36 2016// -/dict.c/1.5/Tue May 31 13:00:36 2016// -/dns.c/1.83/Tue May 31 13:00:36 2016// -/enqueue.c/1.112/Tue May 31 13:00:36 2016// -/envelope.c/1.36/Tue May 31 13:00:36 2016// -/esc.c/1.4/Tue May 31 13:00:36 2016// -/expand.c/1.29/Tue May 31 13:00:36 2016// -/filter.c/1.18/Tue May 31 13:00:36 2016// -/forward.c/1.39/Tue May 31 13:00:36 2016// -/iobuf.c/1.9/Tue May 31 13:00:36 2016// -/ioev.c/1.26/Tue May 31 13:00:36 2016// -/limit.c/1.4/Tue May 31 13:00:36 2016// -/lka.c/1.193/Tue May 31 13:00:36 2016// -/lka_session.c/1.79/Tue May 31 13:00:36 2016// -/log.c/1.17/Tue May 31 13:00:36 2016// -/log.h/1.5/Tue May 31 13:00:36 2016// -/mailaddr.c/1.2/Tue May 31 13:00:36 2016// -/makemap.c/1.65/Tue May 31 13:00:36 2016// -/mda.c/1.119/Tue May 31 13:00:36 2016// -/mproc.c/1.19/Tue May 31 13:00:36 2016// -/mta.c/1.201/Tue May 31 13:00:36 2016// -/mta_session.c/1.83/Tue May 31 13:00:36 2016// -/parse.y/1.184/Tue May 31 13:00:36 2016// -/parser.c/1.40/Tue May 31 13:00:36 2016// -/pony.c/1.13/Tue May 31 13:00:36 2016// -/queue.c/1.178/Tue May 31 13:00:36 2016// -/queue_backend.c/1.62/Tue May 31 13:00:36 2016// -/queue_fs.c/1.14/Tue May 31 13:00:36 2016// -/queue_null.c/1.6/Tue May 31 13:00:36 2016// -/queue_proc.c/1.6/Tue May 31 13:00:36 2016// -/queue_ram.c/1.7/Tue May 31 13:00:36 2016// -/rfc2822.c/1.7/Tue May 31 13:00:36 2016// -/ruleset.c/1.32/Tue May 31 13:00:36 2016// -/runq.c/1.2/Tue May 31 13:00:36 2016// -/scheduler.c/1.52/Tue May 31 13:00:36 2016// -/scheduler_backend.c/1.15/Tue May 31 13:00:36 2016// -/scheduler_null.c/1.9/Tue May 31 13:00:36 2016// -/scheduler_proc.c/1.8/Tue May 31 13:00:36 2016// -/scheduler_ramqueue.c/1.42/Tue May 31 13:00:36 2016// -/smtp.c/1.155/Tue May 31 13:00:36 2016// -/smtp_session.c/1.272/Tue May 31 13:00:36 2016// -/smtpctl.8/1.56/Sun Jun 5 12:05:31 2016// -/smtpctl.c/1.149/Tue May 31 13:00:36 2016// -/smtpd-defines.h/1.6/Tue May 31 13:00:36 2016// -/smtpd.c/1.277/Tue May 31 13:00:36 2016// -/smtpd.conf.5/1.161/Tue May 31 13:00:36 2016// -/smtpd.h/1.515/Tue May 31 13:00:36 2016// -/ssl.c/1.86/Tue May 31 13:00:36 2016// -/ssl.h/1.20/Tue May 31 13:00:36 2016// -/ssl_smtpd.c/1.13/Tue May 31 13:00:36 2016// -/stat_backend.c/1.10/Tue May 31 13:00:36 2016// -/stat_ramstat.c/1.10/Tue May 31 13:00:36 2016// -/table.c/1.23/Tue May 31 13:00:36 2016// -/table_api.c/1.8/Tue May 31 13:00:36 2016// -/table_db.c/1.9/Tue May 31 13:00:36 2016// -/table_getpwnam.c/1.4/Tue May 31 13:00:36 2016// -/table_proc.c/1.6/Tue May 31 13:00:36 2016// -/table_static.c/1.15/Tue May 31 13:00:36 2016// -/to.c/1.28/Sun Jun 5 12:05:31 2016// -/tree.c/1.5/Tue May 31 13:00:37 2016// -/util.c/1.127/Tue May 31 13:00:37 2016// -/waitq.c/1.5/Tue May 31 13:00:37 2016// +/aliases.c/1.70/Sun Jun 5 12:10:36 2016// +/bounce.c/1.72/Sun Jun 5 12:10:36 2016// +/ca.c/1.22/Sun Jun 5 12:10:36 2016// +/compress_backend.c/1.9/Sun Jun 5 12:10:36 2016// +/compress_gzip.c/1.10/Sun Jun 5 12:10:36 2016// +/config.c/1.35/Sun Jun 5 12:10:36 2016// +/control.c/1.113/Sun Jun 5 12:10:36 2016// +/crypto.c/1.5/Sun Jun 5 12:10:36 2016// +/delivery.c/1.6/Sun Jun 5 12:10:36 2016// +/delivery_filename.c/1.14/Sun Jun 5 12:10:36 2016// +/delivery_lmtp.c/1.17/Sun Jun 5 12:10:47 2016// +/delivery_maildir.c/1.17/Sun Jun 5 12:10:36 2016// +/delivery_mbox.c/1.12/Sun Jun 5 12:10:36 2016// +/delivery_mda.c/1.9/Sun Jun 5 12:10:36 2016// +/dict.c/1.5/Sun Jun 5 12:10:36 2016// +/dns.c/1.83/Sun Jun 5 12:10:36 2016// +/enqueue.c/1.112/Sun Jun 5 12:10:36 2016// +/envelope.c/1.36/Sun Jun 5 12:10:36 2016// +/esc.c/1.4/Sun Jun 5 12:10:36 2016// +/expand.c/1.29/Sun Jun 5 12:10:36 2016// +/filter.c/1.18/Sun Jun 5 12:10:36 2016// +/forward.c/1.39/Sun Jun 5 12:10:36 2016// +/iobuf.c/1.9/Sun Jun 5 12:10:36 2016// +/ioev.c/1.26/Sun Jun 5 12:10:36 2016// +/limit.c/1.4/Sun Jun 5 12:10:36 2016// +/lka.c/1.193/Sun Jun 5 12:10:36 2016// +/lka_session.c/1.79/Sun Jun 5 12:10:36 2016// +/log.c/1.17/Sun Jun 5 12:10:36 2016// +/log.h/1.5/Sun Jun 5 12:10:36 2016// +/mailaddr.c/1.2/Sun Jun 5 12:10:36 2016// +/makemap.c/1.65/Sun Jun 5 12:10:36 2016// +/mda.c/1.119/Sun Jun 5 12:10:36 2016// +/mproc.c/1.19/Sun Jun 5 12:10:36 2016// +/mta.c/1.201/Sun Jun 5 12:10:36 2016// +/mta_session.c/1.83/Sun Jun 5 12:10:36 2016// +/parse.y/1.184/Sun Jun 5 12:10:36 2016// +/parser.c/1.40/Sun Jun 5 12:10:36 2016// +/pony.c/1.13/Sun Jun 5 12:10:36 2016// +/queue.c/1.178/Sun Jun 5 12:10:36 2016// +/queue_backend.c/1.62/Sun Jun 5 12:10:36 2016// +/queue_fs.c/1.14/Sun Jun 5 12:10:36 2016// +/queue_null.c/1.6/Sun Jun 5 12:10:36 2016// +/queue_proc.c/1.6/Sun Jun 5 12:10:36 2016// +/queue_ram.c/1.7/Sun Jun 5 12:10:36 2016// +/rfc2822.c/1.7/Sun Jun 5 12:10:36 2016// +/ruleset.c/1.32/Sun Jun 5 12:10:36 2016// +/runq.c/1.2/Sun Jun 5 12:10:36 2016// +/scheduler.c/1.52/Sun Jun 5 12:10:36 2016// +/scheduler_backend.c/1.15/Sun Jun 5 12:10:36 2016// +/scheduler_null.c/1.9/Sun Jun 5 12:10:36 2016// +/scheduler_proc.c/1.8/Sun Jun 5 12:10:36 2016// +/scheduler_ramqueue.c/1.42/Sun Jun 5 12:10:36 2016// +/smtp.c/1.155/Sun Jun 5 12:10:36 2016// +/smtp_session.c/1.272/Sun Jun 5 12:10:36 2016// +/smtpctl.8/1.56/Sun Jun 5 12:06:51 2016// +/smtpctl.c/1.149/Sun Jun 5 12:10:36 2016// +/smtpd-defines.h/1.6/Sun Jun 5 12:10:36 2016// +/smtpd.c/1.277/Sun Jun 5 12:10:36 2016// +/smtpd.conf.5/1.161/Sun Jun 5 12:10:36 2016// +/smtpd.h/1.515/Sun Jun 5 12:10:36 2016// +/ssl.c/1.86/Sun Jun 5 12:10:36 2016// +/ssl.h/1.20/Sun Jun 5 12:10:36 2016// +/ssl_smtpd.c/1.13/Sun Jun 5 12:10:36 2016// +/stat_backend.c/1.10/Sun Jun 5 12:10:36 2016// +/stat_ramstat.c/1.10/Sun Jun 5 12:10:36 2016// +/table.c/1.23/Sun Jun 5 12:10:36 2016// +/table_api.c/1.8/Sun Jun 5 12:10:36 2016// +/table_db.c/1.9/Sun Jun 5 12:10:36 2016// +/table_getpwnam.c/1.4/Sun Jun 5 12:10:36 2016// +/table_proc.c/1.6/Sun Jun 5 12:10:36 2016// +/table_static.c/1.15/Sun Jun 5 12:10:36 2016// +/to.c/1.28/Sun Jun 5 12:10:36 2016// +/tree.c/1.5/Sun Jun 5 12:10:36 2016// +/util.c/1.127/Sun Jun 5 12:10:36 2016// +/waitq.c/1.5/Sun Jun 5 12:10:36 2016// diff --git a/smtpd/delivery_lmtp.c b/smtpd/delivery_lmtp.c index 8df04f5d..f6e7952f 100644 --- a/smtpd/delivery_lmtp.c +++ b/smtpd/delivery_lmtp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: delivery_lmtp.c,v 1.16 2016/06/05 11:48:56 gilles Exp $ */ +/* $OpenBSD: delivery_lmtp.c,v 1.17 2016/06/05 12:10:28 gilles Exp $ */ /* * Copyright (c) 2013 Ashish SHUKLA <ashish.is@lostca.se> @@ -40,6 +40,7 @@ #define MAX_CONTINUATIONS 100 static int inet_socket(char *); +static int lmtp_banner(char **buf, size_t *, int, FILE *); static int lmtp_cmd(char **buf, size_t *, int, FILE *, const char *, ...) __attribute__((__format__ (printf, 5, 6))) __attribute__((__nonnull__ (5))); @@ -133,11 +134,8 @@ lmtp_open(struct deliver *deliver) if ((fp = fdopen(s, "r+")) == NULL) err(1, "fdopen"); - if (getline(&buf, &sz, fp) == -1) - err(1, "getline"); - - if (buf[0] != '2') - errx(1, "Invalid LMTP greeting: %s", buf); + if (lmtp_banner(&buf, &sz, '2', fp) != 0) + errx(1, "Invalid LHLO reply: %s", buf); if (gethostname(hn, sizeof hn) == -1) err(1, "gethostname"); @@ -173,6 +171,41 @@ lmtp_open(struct deliver *deliver) } static int +lmtp_banner(char **buf, size_t *sz, int code, FILE *fp) +{ + char *bufp; + ssize_t len; + size_t counter; + + counter = 0; + do { + if ((len = getline(buf, sz, fp)) == -1) + err(1, "getline"); + if (len < 4) + err(1, "line too short"); + + bufp = *buf; + if (len >= 2 && bufp[len - 2] == '\r') + bufp[len - 2] = '\0'; + else if (bufp[len - 1] == '\n') + bufp[len - 1] = '\0'; + + if (bufp[3] == '\0' || bufp[3] == ' ') + break; + else if (bufp[3] == '-') { + if (counter == MAX_CONTINUATIONS) + errx(1, "LMTP server is sending too many continuations"); + counter++; + continue; + } + else + errx(1, "invalid line"); + } while (1); + + return bufp[0] != code; +} + +static int lmtp_cmd(char **buf, size_t *sz, int code, FILE *fp, const char *fmt, ...) { va_list ap; |