From 2dda25d95dd45c83402088d53dbb5b0f7c893f9d Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Fri, 26 Aug 2016 11:28:51 +0200 Subject: tools: allow socket_bye() to be used for non-polite terminations --- src/cli-debug.c | 2 +- src/cli.c | 6 +++--- src/danetool.c | 2 +- src/ocsptool-common.c | 2 +- src/socket.c | 18 ++++++++++-------- src/socket.h | 2 +- 6 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/cli-debug.c b/src/cli-debug.c index 3323b4804e..359bb32f25 100644 --- a/src/cli-debug.c +++ b/src/cli-debug.c @@ -320,7 +320,7 @@ int main(int argc, char **argv) while (ret == TEST_IGNORE && tls_tests[i].test_name != NULL); - socket_bye(&hd); + socket_bye(&hd, 1); i++; } diff --git a/src/cli.c b/src/cli.c index ad4e265f63..066a16b327 100644 --- a/src/cli.c +++ b/src/cli.c @@ -908,7 +908,7 @@ static int try_resume(socket_st * hd) } printf("- Disconnecting\n"); - socket_bye(hd); + socket_bye(hd, 1); canonicalize_host(hostname, service, sizeof(service)); @@ -1408,9 +1408,9 @@ int main(int argc, char **argv) } if (user_term != 0) - socket_bye(&hd); + socket_bye(&hd, 1); else - gnutls_deinit(hd.session); + socket_bye(&hd, 0); #ifdef ENABLE_SRP if (srp_cred) diff --git a/src/danetool.c b/src/danetool.c index 4c35964178..d5883569a3 100644 --- a/src/danetool.c +++ b/src/danetool.c @@ -715,7 +715,7 @@ static const char *obtain_cert(const char *hostname, const char *proto, const ch if (priv->found == 0) ret = -1; - socket_bye(&hd); + socket_bye(&hd, 1); gnutls_certificate_free_credentials(xcred); if (ret == -1) diff --git a/src/ocsptool-common.c b/src/ocsptool-common.c index a411a8e97e..8d04c7e663 100644 --- a/src/ocsptool-common.c +++ b/src/ocsptool-common.c @@ -222,7 +222,7 @@ int send_ocsp_request(const char *server, return -1; } - socket_bye(&hd); + socket_bye(&hd, 1); p = memmem(ud.data, ud.size, "\r\n\r\n", 4); if (p == NULL) { diff --git a/src/socket.c b/src/socket.c index 423cd90b7d..16c9ec6b59 100644 --- a/src/socket.c +++ b/src/socket.c @@ -319,17 +319,19 @@ const char *starttls_proto_to_service(const char *app_proto) return "443"; } -void socket_bye(socket_st * socket) +void socket_bye(socket_st * socket, unsigned polite) { int ret; if (socket->secure) { - do - ret = gnutls_bye(socket->session, GNUTLS_SHUT_WR); - while (ret == GNUTLS_E_INTERRUPTED - || ret == GNUTLS_E_AGAIN); - if (socket->verbose && ret < 0) - fprintf(stderr, "*** gnutls_bye() error: %s\n", - gnutls_strerror(ret)); + if (polite) { + do + ret = gnutls_bye(socket->session, GNUTLS_SHUT_WR); + while (ret == GNUTLS_E_INTERRUPTED + || ret == GNUTLS_E_AGAIN); + if (socket->verbose && ret < 0) + fprintf(stderr, "*** gnutls_bye() error: %s\n", + gnutls_strerror(ret)); + } gnutls_deinit(socket->session); socket->session = NULL; } diff --git a/src/socket.h b/src/socket.h index fb7d2b12bc..9be1ee4e16 100644 --- a/src/socket.h +++ b/src/socket.h @@ -44,7 +44,7 @@ void socket_open(socket_st * hd, const char *hostname, const char *service, const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata); -void socket_bye(socket_st * socket); +void socket_bye(socket_st * socket, unsigned polite); int service_to_port(const char *service, const char *proto); const char *port_to_service(const char *sport, const char *proto); -- cgit v1.2.1