mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Reduce few repetitions in forward code
This commit is contained in:
committed by
Simon Kelley
parent
4b03170920
commit
6c0bf79078
@@ -245,6 +245,24 @@ static unsigned int search_servers(time_t now, union all_addr **addrpp, unsigned
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_CONNTRACK
|
||||||
|
static void set_outgoing_mark(struct frec *forward, int fd)
|
||||||
|
{
|
||||||
|
/* Copy connection mark of incoming query to outgoing connection. */
|
||||||
|
unsigned int mark;
|
||||||
|
if (get_incoming_mark(&forward->frec_src.source, &forward->frec_src.dest, 0, &mark))
|
||||||
|
setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void log_query_mysockaddr(unsigned int flags, char *name, union mysockaddr *addr, char *arg)
|
||||||
|
{
|
||||||
|
if (addr->sa.sa_family == AF_INET)
|
||||||
|
log_query(flags | F_IPV4, name, (union all_addr *)&addr->in.sin_addr, arg);
|
||||||
|
else
|
||||||
|
log_query(flags | F_IPV6, name, (union all_addr *)&addr->in6.sin6_addr, arg);
|
||||||
|
}
|
||||||
|
|
||||||
static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
||||||
union all_addr *dst_addr, unsigned int dst_iface,
|
union all_addr *dst_addr, unsigned int dst_iface,
|
||||||
struct dns_header *header, size_t plen, time_t now,
|
struct dns_header *header, size_t plen, time_t now,
|
||||||
@@ -346,10 +364,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
|
|
||||||
if ((fd = allocate_rfd(&forward->rfds, forward->sentto)) != -1)
|
if ((fd = allocate_rfd(&forward->rfds, forward->sentto)) != -1)
|
||||||
{
|
{
|
||||||
if (forward->sentto->addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_NOEXTRA | F_DNSSEC, "retry",
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (union all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
|
&forward->sentto->addr, "dnssec");
|
||||||
else
|
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (union all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
|
|
||||||
|
|
||||||
while (retry_send(sendto(fd, (char *)header, plen, 0,
|
while (retry_send(sendto(fd, (char *)header, plen, 0,
|
||||||
&forward->sentto->addr.sa,
|
&forward->sentto->addr.sa,
|
||||||
@@ -515,11 +531,7 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
#ifdef HAVE_CONNTRACK
|
#ifdef HAVE_CONNTRACK
|
||||||
/* Copy connection mark of incoming query to outgoing connection. */
|
/* Copy connection mark of incoming query to outgoing connection. */
|
||||||
if (option_bool(OPT_CONNTRACK))
|
if (option_bool(OPT_CONNTRACK))
|
||||||
{
|
set_outgoing_mark(forward, fd);
|
||||||
unsigned int mark;
|
|
||||||
if (get_incoming_mark(&forward->frec_src.source, &forward->frec_src.dest, 0, &mark))
|
|
||||||
setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DNSSEC
|
#ifdef HAVE_DNSSEC
|
||||||
@@ -556,12 +568,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
|
|
||||||
if (!gotname)
|
if (!gotname)
|
||||||
strcpy(daemon->namebuff, "query");
|
strcpy(daemon->namebuff, "query");
|
||||||
if (start->addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_SERVER | F_FORWARD, daemon->namebuff,
|
||||||
log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
|
&start->addr, NULL);
|
||||||
(union all_addr *)&start->addr.in.sin_addr, NULL);
|
|
||||||
else
|
|
||||||
log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
|
|
||||||
(union all_addr *)&start->addr.in6.sin6_addr, NULL);
|
|
||||||
start->queries++;
|
start->queries++;
|
||||||
forwarded = 1;
|
forwarded = 1;
|
||||||
forward->sentto = start;
|
forward->sentto = start;
|
||||||
@@ -889,10 +897,7 @@ void reply_query(int fd, time_t now)
|
|||||||
&start->addr.sa,
|
&start->addr.sa,
|
||||||
sa_len(&start->addr))));
|
sa_len(&start->addr))));
|
||||||
|
|
||||||
if (start->addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_NOEXTRA | F_DNSSEC, "retry", &start->addr, "dnssec");
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (union all_addr *)&start->addr.in.sin_addr, "dnssec");
|
|
||||||
else
|
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (union all_addr *)&start->addr.in6.sin6_addr, "dnssec");
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1109,11 +1114,7 @@ void reply_query(int fd, time_t now)
|
|||||||
nn = dnssec_generate_query(header,((unsigned char *) header) + server->edns_pktsz,
|
nn = dnssec_generate_query(header,((unsigned char *) header) + server->edns_pktsz,
|
||||||
daemon->keyname, forward->class, querytype, server->edns_pktsz);
|
daemon->keyname, forward->class, querytype, server->edns_pktsz);
|
||||||
|
|
||||||
if (server->addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_NOEXTRA | F_DNSSEC, daemon->keyname, &server->addr,
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, daemon->keyname, (union all_addr *)&(server->addr.in.sin_addr),
|
|
||||||
querystr("dnssec-query", querytype));
|
|
||||||
else
|
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, daemon->keyname, (union all_addr *)&(server->addr.in6.sin6_addr),
|
|
||||||
querystr("dnssec-query", querytype));
|
querystr("dnssec-query", querytype));
|
||||||
|
|
||||||
memcpy(new->hash, hash_questions(header, nn, daemon->namebuff), HASH_SIZE);
|
memcpy(new->hash, hash_questions(header, nn, daemon->namebuff), HASH_SIZE);
|
||||||
@@ -1129,13 +1130,8 @@ void reply_query(int fd, time_t now)
|
|||||||
if ((fd = allocate_rfd(&new->rfds, server)) != -1)
|
if ((fd = allocate_rfd(&new->rfds, server)) != -1)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CONNTRACK
|
#ifdef HAVE_CONNTRACK
|
||||||
/* Copy connection mark of incoming query to outgoing connection. */
|
|
||||||
if (option_bool(OPT_CONNTRACK))
|
if (option_bool(OPT_CONNTRACK))
|
||||||
{
|
set_outgoing_mark(orig, fd);
|
||||||
unsigned int mark;
|
|
||||||
if (get_incoming_mark(&orig->frec_src.source, &orig->frec_src.dest, 0, &mark))
|
|
||||||
setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DUMPFILE
|
#ifdef HAVE_DUMPFILE
|
||||||
@@ -1504,12 +1500,8 @@ void receive_query(struct listener *listen, time_t now)
|
|||||||
#endif
|
#endif
|
||||||
char *types = querystr(auth_dns ? "auth" : "query", type);
|
char *types = querystr(auth_dns ? "auth" : "query", type);
|
||||||
|
|
||||||
if (family == AF_INET)
|
log_query_mysockaddr(F_QUERY | F_FORWARD, daemon->namebuff,
|
||||||
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
&source_addr, types);
|
||||||
(union all_addr *)&source_addr.in.sin_addr, types);
|
|
||||||
else
|
|
||||||
log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
|
|
||||||
(union all_addr *)&source_addr.in6.sin6_addr, types);
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH
|
#ifdef HAVE_AUTH
|
||||||
/* find queries for zones we're authoritative for, and answer them directly */
|
/* find queries for zones we're authoritative for, and answer them directly */
|
||||||
@@ -1730,12 +1722,7 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_query_mysockaddr(F_NOEXTRA | F_DNSSEC, keyname, &server->addr,
|
||||||
if (server->addr.sa.sa_family == AF_INET)
|
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, keyname, (union all_addr *)&(server->addr.in.sin_addr),
|
|
||||||
querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
|
|
||||||
else
|
|
||||||
log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, keyname, (union all_addr *)&(server->addr.in6.sin6_addr),
|
|
||||||
querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
|
querystr("dnssec-query", new_status == STAT_NEED_KEY ? T_DNSKEY : T_DS));
|
||||||
|
|
||||||
server->flags |= SERV_GOT_TCP;
|
server->flags |= SERV_GOT_TCP;
|
||||||
@@ -1875,12 +1862,8 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
#endif
|
#endif
|
||||||
char *types = querystr(auth_dns ? "auth" : "query", qtype);
|
char *types = querystr(auth_dns ? "auth" : "query", qtype);
|
||||||
|
|
||||||
if (peer_addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_QUERY | F_FORWARD, daemon->namebuff,
|
||||||
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
&peer_addr, types);
|
||||||
(union all_addr *)&peer_addr.in.sin_addr, types);
|
|
||||||
else
|
|
||||||
log_query(F_QUERY | F_IPV6 | F_FORWARD, daemon->namebuff,
|
|
||||||
(union all_addr *)&peer_addr.in6.sin6_addr, types);
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH
|
#ifdef HAVE_AUTH
|
||||||
/* find queries for zones we're authoritative for, and answer them directly */
|
/* find queries for zones we're authoritative for, and answer them directly */
|
||||||
@@ -2063,12 +2046,8 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
|
|
||||||
m = (c1 << 8) | c2;
|
m = (c1 << 8) | c2;
|
||||||
|
|
||||||
if (last_server->addr.sa.sa_family == AF_INET)
|
log_query_mysockaddr(F_SERVER | F_FORWARD, daemon->namebuff,
|
||||||
log_query(F_SERVER | F_IPV4 | F_FORWARD, daemon->namebuff,
|
&last_server->addr, NULL);
|
||||||
(union all_addr *)&last_server->addr.in.sin_addr, NULL);
|
|
||||||
else
|
|
||||||
log_query(F_SERVER | F_IPV6 | F_FORWARD, daemon->namebuff,
|
|
||||||
(union all_addr *)&last_server->addr.in6.sin6_addr, NULL);
|
|
||||||
|
|
||||||
#ifdef HAVE_DNSSEC
|
#ifdef HAVE_DNSSEC
|
||||||
if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC))
|
if (option_bool(OPT_DNSSEC_VALID) && !checking_disabled && (last_server->flags & SERV_DO_DNSSEC))
|
||||||
|
|||||||
Reference in New Issue
Block a user