summaryrefslogtreecommitdiffstats
path: root/apps/s_client.c
diff options
context:
space:
mode:
authorRobert Scheck <robert@fedoraproject.org>2016-11-17 17:16:50 +0100
committerRich Salz <rsalz@openssl.org>2016-11-18 07:37:41 -0500
commit9576545a51c76d944318283461d55ac28a0bfbfc (patch)
tree546e1fb1dae4082f9681f83ba9e8986a60084884 /apps/s_client.c
parent5defbe6f3892577af5811e12809233e7f8a69830 (diff)
Add LMTP support (RFC 2033) to s_client ("-starttls lmtp")
Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/1945)
Diffstat (limited to 'apps/s_client.c')
-rw-r--r--apps/s_client.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/apps/s_client.c b/apps/s_client.c
index cfd7cbd79d..01e285abd3 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -619,7 +619,8 @@ const OPTIONS s_client_options[] = {
{"keymatexportlen", OPT_KEYMATEXPORTLEN, 'p',
"Export len bytes of keying material (default 20)"},
{"fallback_scsv", OPT_FALLBACKSCSV, '-', "Send the fallback SCSV"},
- {"name", OPT_SMTPHOST, 's', "Hostname to use for \"-starttls smtp\""},
+ {"name", OPT_SMTPHOST, 's',
+ "Hostname to use for \"-starttls lmtp\" or \"-starttls smtp\""},
{"CRL", OPT_CRL, '<', "CRL file to use"},
{"crl_download", OPT_CRL_DOWNLOAD, '-', "Download CRL from distribution points"},
{"CRLform", OPT_CRLFORM, 'F', "CRL format (PEM or DER) PEM is default"},
@@ -743,7 +744,8 @@ typedef enum PROTOCOL_choice {
PROTO_XMPP_SERVER,
PROTO_CONNECT,
PROTO_IRC,
- PROTO_POSTGRES
+ PROTO_POSTGRES,
+ PROTO_LMTP
} PROTOCOL_CHOICE;
static const OPT_PAIR services[] = {
@@ -756,6 +758,7 @@ static const OPT_PAIR services[] = {
{"telnet", PROTO_TELNET},
{"irc", PROTO_IRC},
{"postgres", PROTO_POSTGRES},
+ {"lmtp", PROTO_LMTP},
{NULL, 0}
};
@@ -1854,6 +1857,7 @@ int s_client_main(int argc, char **argv)
switch ((PROTOCOL_CHOICE) starttls_proto) {
case PROTO_OFF:
break;
+ case PROTO_LMTP:
case PROTO_SMTP:
{
/*
@@ -1867,14 +1871,24 @@ int s_client_main(int argc, char **argv)
int foundit = 0;
BIO *fbio = BIO_new(BIO_f_buffer());
BIO_push(fbio, sbio);
- /* wait for multi-line response to end from SMTP */
+ /* Wait for multi-line response to end from LMTP or SMTP */
do {
mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
}
while (mbuf_len > 3 && mbuf[3] == '-');
- BIO_printf(fbio, "EHLO %s\r\n", ehlo);
+ switch ((PROTOCOL_CHOICE) starttls_proto) {
+ case PROTO_LMTP:
+ BIO_printf(fbio, "LHLO %s\r\n", ehlo);
+ break;
+ case PROTO_SMTP:
+ BIO_printf(fbio, "EHLO %s\r\n", ehlo);
+ break;
+ }
(void)BIO_flush(fbio);
- /* wait for multi-line response to end EHLO SMTP response */
+ /*
+ * Wait for multi-line response to end LHLO LMTP or EHLO SMTP
+ * response.
+ */
do {
mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ);
if (strstr(mbuf, "STARTTLS"))