-fix leak
[oweals/gnunet.git] / src / dns / gnunet-service-dns.c
index 463176fbc5232dda7199d80e80a08b7963b6602a..79beef83191d304621897166dbf755ab8a5714db 100644 (file)
@@ -462,6 +462,7 @@ open_socket (int af)
     break;
   default:
     GNUNET_break (0);
+    GNUNET_NETWORK_socket_close (ret);
     return NULL;
   }
   sa->sa_family = af;
@@ -1324,7 +1325,7 @@ process_helper_messages (void *cls GNUNET_UNUSED, void *client,
       srca4->sin_port = udp->source_port;
       dsta4->sin_port = udp->destination_port;
 #if HAVE_SOCKADDR_IN_SIN_LEN
-      srca4->sin_len = sizeof (struct sockaddr_in))
+      srca4->sin_len = sizeof (struct sockaddr_in);
       dsta4->sin_len = sizeof (struct sockaddr_in);
 #endif
     }
@@ -1393,7 +1394,7 @@ receive_dns_request (void *cls GNUNET_UNUSED, struct GNUNET_MESH_Tunnel *tunnel,
   struct sockaddr_in6 v6;
   struct sockaddr *so;
   socklen_t salen;
-
+  
   if (dlen < sizeof (struct GNUNET_TUN_DnsHeader))
   {
     GNUNET_break_op (0);
@@ -1409,7 +1410,6 @@ receive_dns_request (void *cls GNUNET_UNUSED, struct GNUNET_MESH_Tunnel *tunnel,
   memcpy (buf, dns, dlen);
   dout = (struct GNUNET_TUN_DnsHeader*) buf;
   dout->id = ts->my_id;
-  
   memset (&v4, 0, sizeof (v4));
   memset (&v6, 0, sizeof (v6));
   if (1 == inet_pton (AF_INET, dns_exit, &v4.sin_addr))
@@ -1422,8 +1422,8 @@ receive_dns_request (void *cls GNUNET_UNUSED, struct GNUNET_MESH_Tunnel *tunnel,
 #endif
     so = (struct sockaddr *) &v4;
     ts->dnsout = get_request_socket (AF_INET);
-  } 
-  if (1 == inet_pton (AF_INET6, dns_exit, &v6.sin6_addr))
+  }
+  else if (1 == inet_pton (AF_INET6, dns_exit, &v6.sin6_addr))
   {
     salen = sizeof (v6);
     v6.sin6_family = AF_INET6;
@@ -1434,6 +1434,11 @@ receive_dns_request (void *cls GNUNET_UNUSED, struct GNUNET_MESH_Tunnel *tunnel,
     so = (struct sockaddr *) &v6;
     ts->dnsout = get_request_socket (AF_INET6);
   }  
+  else
+  {
+    GNUNET_break (0);
+    return GNUNET_SYSERR;
+  }
   if (NULL == ts->dnsout)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -1541,8 +1546,12 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
                                                 &dns_exit)) ||
         ( (1 != inet_pton (AF_INET, dns_exit, &dns_exit4)) &&
           (1 != inet_pton (AF_INET6, dns_exit, &dns_exit6)) ) ) )
+  {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                _("Configured to provide DNS exit, but no valid DNS server configured!\n"));
+    GNUNET_free_non_null (dns_exit);
+    dns_exit = NULL;
+  }
 
   helper_argv[0] = GNUNET_strdup ("gnunet-dns");
   if (GNUNET_SYSERR ==