summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-08-26 11:28:51 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-08-26 11:28:51 +0200
commit2dda25d95dd45c83402088d53dbb5b0f7c893f9d (patch)
tree2e377effe73bf040ac82b8c08e3426a1efc9aea7
parent867f95f07b89c077b69d77a6c0f1dc2cbe6ef5da (diff)
downloadgnutls-2dda25d95dd45c83402088d53dbb5b0f7c893f9d.tar.gz
tools: allow socket_bye() to be used for non-polite terminations
-rw-r--r--src/cli-debug.c2
-rw-r--r--src/cli.c6
-rw-r--r--src/danetool.c2
-rw-r--r--src/ocsptool-common.c2
-rw-r--r--src/socket.c18
-rw-r--r--src/socket.h2
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);