summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2015-01-12 23:14:35 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2015-01-12 23:16:47 +0100
commit99f952aea13a81df07dedff77fbcd0afbb781f9d (patch)
treefb08cc21f2d4afadc05c6043dc219f50f75d324a /src
parent8ad096b38c2a8e9d1e298d5d03c2d50dafb176f1 (diff)
downloadgnutls-99f952aea13a81df07dedff77fbcd0afbb781f9d.tar.gz
gnutls-cli: added --starttls-proto option
Diffstat (limited to 'src')
-rw-r--r--src/cli-args.def12
-rw-r--r--src/cli.c6
-rw-r--r--src/socket.c9
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";
diff --git a/src/cli.c b/src/cli.c
index a33ae21635..50d4fbc428 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -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;