diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-01-12 23:14:35 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2015-01-12 23:16:47 +0100 |
commit | 99f952aea13a81df07dedff77fbcd0afbb781f9d (patch) | |
tree | fb08cc21f2d4afadc05c6043dc219f50f75d324a /src | |
parent | 8ad096b38c2a8e9d1e298d5d03c2d50dafb176f1 (diff) | |
download | gnutls-99f952aea13a81df07dedff77fbcd0afbb781f9d.tar.gz |
gnutls-cli: added --starttls-proto option
Diffstat (limited to 'src')
-rw-r--r-- | src/cli-args.def | 12 | ||||
-rw-r--r-- | src/cli.c | 6 | ||||
-rw-r--r-- | src/socket.c | 9 |
3 files changed, 26 insertions, 1 deletions
diff --git a/src/cli-args.def b/src/cli-args.def index 24906e5235..de8ca99dab 100644 --- a/src/cli-args.def +++ b/src/cli-args.def @@ -88,6 +88,18 @@ flag = { }; flag = { + name = app-proto; + aliases = starttls-proto; +}; + +flag = { + name = starttls-proto; + descrip = "The application protocol to be used to obtain the server's certificate (https, smtp, imap)"; + arg-type = string; + doc = "Specify the application layer protocol for STARTTLS. If the protocol is supported, gnutls-cli will proceed to the TLS negotiation."; +}; + +flag = { name = udp; value = u; descrip = "Use DTLS (datagram TLS) over UDP"; @@ -856,6 +856,9 @@ static int try_resume(socket_st * hd) ("\n\n- Connecting again- trying to resume previous session\n"); socket_open(hd, hostname, service, udp, CONNECT_MSG); + if (HAVE_OPT(STARTTLS_PROTO)) + socket_starttls(hd, OPT_ARG(STARTTLS_PROTO)); + hd->session = init_tls_session(hostname); gnutls_session_set_data(hd->session, session_data, session_data_size); @@ -1080,6 +1083,9 @@ int main(int argc, char **argv) socket_open(&hd, hostname, service, udp, CONNECT_MSG); hd.verbose = verbose; + if (HAVE_OPT(STARTTLS_PROTO)) + socket_starttls(&hd, OPT_ARG(STARTTLS_PROTO)); + hd.session = init_tls_session(hostname); if (starttls) goto after_handshake; diff --git a/src/socket.c b/src/socket.c index 68ddb3fb23..de81f97a49 100644 --- a/src/socket.c +++ b/src/socket.c @@ -189,18 +189,25 @@ socket_starttls(socket_st * socket, const char *app_proto) return; if (strcasecmp(app_proto, "smtp") == 0 || strcasecmp(app_proto, "submission") == 0) { + if (socket->verbose) + printf("Negotiating SMTP STARTTLS\n"); + wait_for_text(socket->fd, "220 ", 4); send_line(socket->fd, "EHLO mail.example.com\n"); wait_for_text(socket->fd, "250 ", 4); send_line(socket->fd, "STARTTLS\n"); wait_for_text(socket->fd, "220 ", 4); } else if (strcasecmp(app_proto, "imap") == 0 || strcasecmp(app_proto, "imap2") == 0) { + if (socket->verbose) + printf("Negotiating IMAP STARTTLS\n"); + send_line(socket->fd, "a CAPABILITY\r\n"); wait_for_text(socket->fd, "a OK", 4); send_line(socket->fd, "a STARTTLS\r\n"); wait_for_text(socket->fd, "a OK", 4); } else { - /*fprintf(stderr, "unknown protocol %s\n", app_proto);*/ + if (socket->verbose) + fprintf(stderr, "unknown protocol %s\n", app_proto); } return; |