X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdns%2Fgnunet-service-dns.c;h=79beef83191d304621897166dbf755ab8a5714db;hb=2751b293778309bfb658d69b5a723aa90abc685a;hp=463176fbc5232dda7199d80e80a08b7963b6602a;hpb=ea643e446372405a6ded9b482dc4481be32d8bfd;p=oweals%2Fgnunet.git diff --git a/src/dns/gnunet-service-dns.c b/src/dns/gnunet-service-dns.c index 463176fbc..79beef831 100644 --- a/src/dns/gnunet-service-dns.c +++ b/src/dns/gnunet-service-dns.c @@ -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 ==