mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Use correct packet-size limit in make_local_answer()
This commit is contained in:
@@ -1749,7 +1749,7 @@ int lookup_domain(char *qdomain, int flags, int *lowout, int *highout);
|
|||||||
int filter_servers(int seed, int flags, int *lowout, int *highout);
|
int filter_servers(int seed, int flags, int *lowout, int *highout);
|
||||||
int is_local_answer(time_t now, int first, char *name);
|
int is_local_answer(time_t now, int first, char *name);
|
||||||
size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header *header,
|
size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header *header,
|
||||||
char *name, int first, int last);
|
char *name, char *limit, int first, int last);
|
||||||
int server_samegroup(struct server *a, struct server *b);
|
int server_samegroup(struct server *a, struct server *b);
|
||||||
#ifdef HAVE_DNSSEC
|
#ifdef HAVE_DNSSEC
|
||||||
int dnssec_server(struct server *server, char *keyname, int *firstp, int *lastp);
|
int dnssec_server(struct server *server, char *keyname, int *firstp, int *lastp);
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ int is_local_answer(time_t now, int first, char *name)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header *header, char *name, int first, int last)
|
size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header *header, char *name, char *limit, int first, int last)
|
||||||
{
|
{
|
||||||
int trunc = 0;
|
int trunc = 0;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
@@ -361,7 +361,7 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header
|
|||||||
addr.addr4 = srv->addr;
|
addr.addr4 = srv->addr;
|
||||||
|
|
||||||
header->ancount = htons(ntohs(header->ancount) + 1);
|
header->ancount = htons(ntohs(header->ancount) + 1);
|
||||||
add_resource_record(header, ((char *)header) + 65536, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr);
|
add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr);
|
||||||
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, name, (union all_addr *)&addr, NULL);
|
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, name, (union all_addr *)&addr, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header
|
|||||||
addr.addr6 = srv->addr;
|
addr.addr6 = srv->addr;
|
||||||
|
|
||||||
header->ancount = htons(ntohs(header->ancount) + 1);
|
header->ancount = htons(ntohs(header->ancount) + 1);
|
||||||
add_resource_record(header, ((char *)header) + 65536, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr);
|
add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr);
|
||||||
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, name, (union all_addr *)&addr, NULL);
|
log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, name, (union all_addr *)&addr, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -525,7 +525,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
reply:
|
reply:
|
||||||
if (udpfd != -1)
|
if (udpfd != -1)
|
||||||
{
|
{
|
||||||
if (!(plen = make_local_answer(flags, gotname, plen, header, daemon->namebuff, first, last)))
|
if (!(plen = make_local_answer(flags, gotname, plen, header, daemon->namebuff, limit, first, last)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (oph)
|
if (oph)
|
||||||
@@ -2080,7 +2080,8 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
/* In case of local answer or no connections made. */
|
/* In case of local answer or no connections made. */
|
||||||
if (m == 0)
|
if (m == 0)
|
||||||
{
|
{
|
||||||
if (!(m = make_local_answer(flags, gotname, size, header, daemon->namebuff, first, last)))
|
if (!(m = make_local_answer(flags, gotname, size, header, daemon->namebuff,
|
||||||
|
((char *) header) + 65536, first, last)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (have_pseudoheader)
|
if (have_pseudoheader)
|
||||||
|
|||||||
Reference in New Issue
Block a user