Skip to content

Commit

Permalink
Merge pull request #1491 from pi-hole/update/dnsmasq
Browse files Browse the repository at this point in the history
Update embedded dnsmasq to v2.88rc3
  • Loading branch information
DL6ER authored Nov 19, 2022
2 parents e5bbab0 + 128096e commit bfd2c98
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 24 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
cmake_minimum_required(VERSION 2.8.12)
project(PIHOLE_FTL C)

set(DNSMASQ_VERSION pi-hole-v2.88rc1)
set(DNSMASQ_VERSION pi-hole-v2.88rc3)

add_subdirectory(src)
4 changes: 2 additions & 2 deletions src/dnsmasq/dbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,8 @@ static DBusMessage* dbus_read_servers_ex(DBusMessage *message, int strings)
} while (dbus_message_iter_get_arg_type(&string_iter) == DBUS_TYPE_STRING);
}

if (sdetails.resolved)
freeaddrinfo(sdetails.hostinfo);
if (sdetails.orig_hostinfo)
freeaddrinfo(sdetails.orig_hostinfo);

/* jump to next element in outer array */
dbus_message_iter_next(&array_iter);
Expand Down
4 changes: 2 additions & 2 deletions src/dnsmasq/dnsmasq.h
Original file line number Diff line number Diff line change
Expand Up @@ -1300,9 +1300,9 @@ extern struct daemon {

struct server_details {
union mysockaddr *addr, *source_addr;
struct addrinfo *hostinfo;
struct addrinfo *hostinfo, *orig_hostinfo;
char *interface, *source, *scope_id, *interface_opt;
int serv_port, source_port, addr_type, scope_index, valid, resolved;
int serv_port, source_port, addr_type, scope_index, valid;
u16 *flags;
};

Expand Down
45 changes: 26 additions & 19 deletions src/dnsmasq/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -864,11 +864,13 @@ char *parse_server(char *arg, struct server_details *sdetails)
sdetails->serv_port = NAMESERVER_PORT;
char *portno;
int ecode = 0;
struct addrinfo hints = { 0 };
struct addrinfo hints;

memset(&hints, 0, sizeof(struct addrinfo));

*sdetails->interface = 0;
sdetails->addr_type = AF_UNSPEC;

if (strcmp(arg, "#") == 0)
{
if (sdetails->flags)
Expand Down Expand Up @@ -947,7 +949,7 @@ char *parse_server(char *arg, struct server_details *sdetails)
above, and returns a pointer to the start of the list in <hostinfo>.
The items in the linked list are linked by the <ai_next> field. */
sdetails->valid = 1;
sdetails->resolved = 1;
sdetails->orig_hostinfo = sdetails->hostinfo;
return NULL;
}
else
Expand All @@ -971,7 +973,7 @@ char *parse_server_addr(struct server_details *sdetails)
sdetails->addr->in.sin_port = htons(sdetails->serv_port);
sdetails->addr->sa.sa_family = sdetails->source_addr->sa.sa_family = AF_INET;
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr->in.sin_len = addr->in.sin_len = sizeof(struct sockaddr_in);
sdetails->source_addr->in.sin_len = sdetails->addr->in.sin_len = sizeof(struct sockaddr_in);
#endif
sdetails->source_addr->in.sin_addr.s_addr = INADDR_ANY;
sdetails->source_addr->in.sin_port = htons(daemon->query_port);
Expand All @@ -989,7 +991,7 @@ char *parse_server_addr(struct server_details *sdetails)
/* When resolving a server IP by hostname, we can simply skip mismatching
server / source IP pairs. Otherwise, when an IP address is given directly,
this is a fatal error. */
if (!sdetails->resolved)
if (!sdetails->orig_hostinfo)
return _("cannot use IPv4 server address with IPv6 source address");
}
else
Expand Down Expand Up @@ -1020,7 +1022,7 @@ char *parse_server_addr(struct server_details *sdetails)
sdetails->addr->sa.sa_family = sdetails->source_addr->sa.sa_family = AF_INET6;
sdetails->addr->in6.sin6_flowinfo = sdetails->source_addr->in6.sin6_flowinfo = 0;
#ifdef HAVE_SOCKADDR_SA_LEN
sdetails->addr->in6.sin6_len = sdetails->source_addr->in6.sin6_len = sizeof(addr->in6);
sdetails->addr->in6.sin6_len = sdetails->source_addr->in6.sin6_len = sizeof(sdetails->addr->in6);
#endif
if (sdetails->source)
{
Expand All @@ -1035,7 +1037,7 @@ char *parse_server_addr(struct server_details *sdetails)
/* When resolving a server IP by hostname, we can simply skip mismatching
server / source IP pairs. Otherwise, when an IP address is given directly,
this is a fatal error. */
if(!sdetails->resolved)
if(!sdetails->orig_hostinfo)
return _("cannot use IPv6 server address with IPv4 source address");
}
else
Expand Down Expand Up @@ -1102,12 +1104,14 @@ static char *domain_rev4(int from_file, char *server, struct in_addr *addr4, int
union mysockaddr serv_addr, source_addr;
char interface[IF_NAMESIZE+1];
int count = 1, rem, addrbytes, addrbits;
struct server_details sdetails = { 0 };
struct server_details sdetails;

memset(&sdetails, 0, sizeof(struct server_details));
sdetails.addr = &serv_addr;
sdetails.source_addr = &source_addr;
sdetails.interface = interface;
sdetails.flags = &flags;

if (!server)
flags = SERV_LITERAL_ADDRESS;
else if ((string = parse_server(server, &sdetails)))
Expand Down Expand Up @@ -1165,8 +1169,8 @@ static char *domain_rev4(int from_file, char *server, struct in_addr *addr4, int
return _("error");
}

if (sdetails.resolved)
freeaddrinfo(sdetails.hostinfo);
if (sdetails.orig_hostinfo)
freeaddrinfo(sdetails.orig_hostinfo);
}
}

Expand All @@ -1183,12 +1187,14 @@ static char *domain_rev6(int from_file, char *server, struct in6_addr *addr6, in
union mysockaddr serv_addr, source_addr;
char interface[IF_NAMESIZE+1];
int count = 1, rem, addrbytes, addrbits;
struct server_details sdetails = { 0 };
struct server_details sdetails;

memset(&sdetails, 0, sizeof(struct server_details));
sdetails.addr = &serv_addr;
sdetails.source_addr = &source_addr;
sdetails.interface = interface;
sdetails.flags = &flags;

if (!server)
flags = SERV_LITERAL_ADDRESS;
else if ((string = parse_server(server, &sdetails)))
Expand Down Expand Up @@ -1248,8 +1254,8 @@ static char *domain_rev6(int from_file, char *server, struct in6_addr *addr6, in
return _("error");
}

if (sdetails.resolved)
freeaddrinfo(sdetails.hostinfo);
if (sdetails.orig_hostinfo)
freeaddrinfo(sdetails.orig_hostinfo);
}
}

Expand Down Expand Up @@ -2969,13 +2975,14 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
union all_addr addr;
union mysockaddr serv_addr, source_addr;
char interface[IF_NAMESIZE+1];
struct server_details sdetails;

struct server_details sdetails = { 0 };
memset(&sdetails, 0, sizeof(struct server_details));
sdetails.addr = &serv_addr;
sdetails.source_addr = &source_addr;
sdetails.interface = interface;
sdetails.flags = &flags;

unhide_metas(arg);

/* split the domain args, if any and skip to the end of them. */
Expand Down Expand Up @@ -3055,8 +3062,8 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
break;
}

if (sdetails.resolved)
freeaddrinfo(sdetails.hostinfo);
if (sdetails.orig_hostinfo)
freeaddrinfo(sdetails.orig_hostinfo);

break;
}
Expand Down

0 comments on commit bfd2c98

Please sign in to comment.