From: Nikos Mavrogiannopoulos Date: Wed, 13 Nov 2013 15:42:18 +0000 (+0100) Subject: corrected bug in gnutls-cli when used on IPv6 addresses. X-Git-Tag: gnutls_3_3_0pre0~599 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=86610f93fb93f513143afc0aee833fe15d8d2fca;p=thirdparty%2Fgnutls.git corrected bug in gnutls-cli when used on IPv6 addresses. --- diff --git a/src/udp-serv.c b/src/udp-serv.c index f9cb420ffe..d67ba146ea 100644 --- a/src/udp-serv.c +++ b/src/udp-serv.c @@ -41,7 +41,7 @@ typedef struct { gnutls_session_t session; int fd; - struct sockaddr *cli_addr; + struct sockaddr_storage *cli_addr; socklen_t cli_addr_size; } priv_data_st; @@ -56,7 +56,7 @@ static ssize_t pull_func(gnutls_transport_ptr_t p, void *data, void udp_server(const char *name, int port, int mtu) { int sock, ret; - struct sockaddr_in cli_addr; + struct sockaddr_storage cli_addr; socklen_t cli_addr_size; char buffer[MAX_BUFFER]; priv_data_st priv; @@ -93,7 +93,7 @@ void udp_server(const char *name, int port, int mtu) ret = gnutls_dtls_cookie_verify(&cookie_key, &cli_addr, - sizeof(cli_addr), + cli_addr_size, buffer, ret, &prestate); if (ret < 0) { /* cookie not valid */ @@ -102,20 +102,20 @@ void udp_server(const char *name, int port, int mtu) memset(&s, 0, sizeof(s)); s.fd = sock; s.cli_addr = (void *) &cli_addr; - s.cli_addr_size = sizeof(cli_addr); + s.cli_addr_size = cli_addr_size; printf ("Sending hello verify request to %s\n", human_addr((struct sockaddr *) &cli_addr, - sizeof(cli_addr), buffer, + cli_addr_size, buffer, sizeof(buffer))); gnutls_dtls_cookie_send(&cookie_key, &cli_addr, - sizeof(cli_addr), + cli_addr_size, &prestate, (gnutls_transport_ptr_t) - & s, push_func); + &s, push_func); /* discard peeked data */ recvfrom(sock, buffer, sizeof(buffer), 0, @@ -137,8 +137,8 @@ void udp_server(const char *name, int port, int mtu) priv.session = session; priv.fd = sock; - priv.cli_addr = (struct sockaddr *) &cli_addr; - priv.cli_addr_size = sizeof(cli_addr); + priv.cli_addr = &cli_addr; + priv.cli_addr_size = cli_addr_size; gnutls_transport_set_ptr(session, &priv); gnutls_transport_set_push_function(session, push_func); @@ -269,7 +269,7 @@ static ssize_t push_func(gnutls_transport_ptr_t p, const void *data, { priv_data_st *priv = p; - return sendto(priv->fd, data, size, 0, priv->cli_addr, + return sendto(priv->fd, data, size, 0, (struct sockaddr*)priv->cli_addr, priv->cli_addr_size); }