aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgilles <gilles@poolp.org>2016-06-05 14:10:50 +0200
committergilles <gilles@poolp.org>2016-06-05 14:10:50 +0200
commitdcae1c52ec931f852c890c72b4fb126ab9a67e5d (patch)
tree5824796cc10e1154b09e86723ce0f9538f35fb20
parentsync with OpenBSD: (diff)
downloadOpenSMTPD-dcae1c52ec931f852c890c72b4fb126ab9a67e5d.tar.xz
OpenSMTPD-dcae1c52ec931f852c890c72b4fb126ab9a67e5d.zip
sync with OpenBSD:
- add support for multi-line banners in delivery_lmtp
-rw-r--r--smtpd/CVS/Entries150
-rw-r--r--smtpd/delivery_lmtp.c45
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;