From: Nikos Mavrogiannopoulos Date: Mon, 14 Oct 2002 17:23:31 +0000 (+0000) Subject: Some fixes in 'gnutls-cli' client program to prevent some segmentation X-Git-Tag: gnutls_0_5_11~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b9cd07d309bed7a188401d5cd6f3cf185bfa1cf0;p=thirdparty%2Fgnutls.git Some fixes in 'gnutls-cli' client program to prevent some segmentation faults at exit. --- diff --git a/NEWS b/NEWS index f194575171..a989793c45 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +Version 0.5.11 +- Some fixes in 'gnutls-cli' client program to prevent some segmentation + faults at exit. + Version 0.5.10 (13/10/2002) - Updated documentation. - Added server name extension. This allows clients to specify the diff --git a/src/cli.c b/src/cli.c index b7a60bcd9b..4c36a489c8 100644 --- a/src/cli.c +++ b/src/cli.c @@ -99,7 +99,7 @@ typedef struct { ssize_t socket_recv(socket_st socket, void *buffer, int buffer_size); ssize_t socket_send(socket_st socket, void *buffer, int buffer_size); -void socket_bye(socket_st socket); +void socket_bye(socket_st *socket); void check_rehandshake(socket_st socket, int ret); void check_alert(socket_st socket, int ret); int do_handshake(socket_st *socket); @@ -271,7 +271,7 @@ int main(int argc, char **argv) print_info(hd.session); printf("- Disconnecting\n"); - socket_bye(hd); + socket_bye(&hd); printf ("\n\n- Connecting again- trying to resume previous session\n"); @@ -333,12 +333,11 @@ int main(int argc, char **argv) if (ret < 0) { fprintf(stderr, "*** Handshake has failed\n"); gnutls_perror(ret); - socket_bye(hd); + socket_bye(&hd); user_term = 1; } continue; } else { - socket_bye(hd); user_term = 1; continue; } @@ -362,7 +361,7 @@ int main(int argc, char **argv) } if (user_term != 0) - socket_bye(hd); + socket_bye(&hd); if (srp_username != NULL) @@ -568,34 +567,33 @@ ssize_t socket_send(socket_st socket, void *buffer, int buffer_size) if (socket.secure) do { - ret = gnutls_record_send(socket.session, buffer, strlen(buffer)); + ret = gnutls_record_send(socket.session, buffer, buffer_size); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); else do { - ret = send(socket.fd, buffer, strlen(buffer), 0); + ret = send(socket.fd, buffer, buffer_size, 0); } while (ret == -1 && errno == EINTR); return ret; } -void socket_bye(socket_st socket) +void socket_bye(socket_st *socket) { int ret; - - if (socket.secure) { + if (socket->secure) { do - ret = gnutls_bye(socket.session, GNUTLS_SHUT_RDWR); + ret = gnutls_bye(socket->session, GNUTLS_SHUT_RDWR); while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN); - gnutls_deinit(socket.session); - socket.session = NULL; + gnutls_deinit(socket->session); + socket->session = NULL; } - shutdown(socket.fd, SHUT_RDWR); /* no more receptions */ - close(socket.fd); + shutdown(socket->fd, SHUT_RDWR); /* no more receptions */ + close(socket->fd); - socket.fd = -1; - socket.secure = 0; + socket->fd = -1; + socket->secure = 0; } void check_rehandshake(socket_st socket, int ret)