]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
corrected bug in gnutls-cli when used on IPv6 addresses.
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 13 Nov 2013 15:42:18 +0000 (16:42 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 13 Nov 2013 15:43:26 +0000 (16:43 +0100)
src/udp-serv.c

index f9cb420ffe2eb41a60e9d83711bcbf5e6f82561c..d67ba146ea9e316de362d09c28ef443cc110a7f7 100644 (file)
@@ -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);
 }