mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix NOERR/NXDOMAIN in answers configured by --domain-needed.
This commit is contained in:
@@ -255,29 +255,25 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
|
|||||||
/* new query */
|
/* new query */
|
||||||
if (!forward)
|
if (!forward)
|
||||||
{
|
{
|
||||||
/* new query */
|
if (lookup_domain(daemon->namebuff, gotname, &first, &last))
|
||||||
|
flags = is_local_answer(now, first, daemon->namebuff);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* no available server. */
|
||||||
|
ede = EDE_NOT_READY;
|
||||||
|
flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* don't forward A or AAAA queries for simple names, except the empty name */
|
/* don't forward A or AAAA queries for simple names, except the empty name */
|
||||||
if (option_bool(OPT_NODOTS_LOCAL) &&
|
if (!flags &&
|
||||||
|
option_bool(OPT_NODOTS_LOCAL) &&
|
||||||
(gotname & (F_IPV4 | F_IPV6)) &&
|
(gotname & (F_IPV4 | F_IPV6)) &&
|
||||||
!strchr(daemon->namebuff, '.') &&
|
!strchr(daemon->namebuff, '.') &&
|
||||||
strlen(daemon->namebuff) != 0)
|
strlen(daemon->namebuff) != 0)
|
||||||
{
|
flags = check_for_local_domain(daemon->namebuff, now) ? F_NOERR : F_NXDOMAIN;
|
||||||
flags = F_NOERR;
|
|
||||||
goto reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
flags = 0;
|
|
||||||
|
|
||||||
/* no available server. */
|
|
||||||
if (!lookup_domain(daemon->namebuff, gotname, &first, &last))
|
|
||||||
{
|
|
||||||
ede = EDE_NOT_READY;
|
|
||||||
goto reply;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Configured answer. */
|
/* Configured answer. */
|
||||||
if ((flags = is_local_answer(now, first, daemon->namebuff)))
|
if (flags || ede == EDE_NOT_READY)
|
||||||
goto reply;
|
goto reply;
|
||||||
|
|
||||||
master = daemon->serverarray[first];
|
master = daemon->serverarray[first];
|
||||||
@@ -2037,16 +2033,25 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
{
|
{
|
||||||
struct server *master;
|
struct server *master;
|
||||||
int start;
|
int start;
|
||||||
|
|
||||||
|
if (lookup_domain(daemon->namebuff, gotname, &first, &last))
|
||||||
|
flags = is_local_answer(now, first, daemon->namebuff);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* No configured servers */
|
||||||
|
ede = EDE_NOT_READY;
|
||||||
|
flags = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* don't forward A or AAAA queries for simple names, except the empty name */
|
/* don't forward A or AAAA queries for simple names, except the empty name */
|
||||||
if (option_bool(OPT_NODOTS_LOCAL) &&
|
if (!flags &&
|
||||||
|
option_bool(OPT_NODOTS_LOCAL) &&
|
||||||
(gotname & (F_IPV4 | F_IPV6)) &&
|
(gotname & (F_IPV4 | F_IPV6)) &&
|
||||||
!strchr(daemon->namebuff, '.') &&
|
!strchr(daemon->namebuff, '.') &&
|
||||||
strlen(daemon->namebuff) != 0)
|
strlen(daemon->namebuff) != 0)
|
||||||
flags = F_NOERR;
|
flags = check_for_local_domain(daemon->namebuff, now) ? F_NOERR : F_NXDOMAIN;
|
||||||
else if (!lookup_domain(daemon->namebuff, gotname, &first, &last))
|
|
||||||
ede = EDE_NOT_READY; /* No configured servers */
|
if (!flags && ede != EDE_NOT_READY)
|
||||||
else if (!(flags = is_local_answer(now, first, daemon->namebuff)))
|
|
||||||
{
|
{
|
||||||
master = daemon->serverarray[first];
|
master = daemon->serverarray[first];
|
||||||
|
|
||||||
@@ -2093,10 +2098,10 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
int status = tcp_key_recurse(now, STAT_OK, header, m, 0, daemon->namebuff, daemon->keyname,
|
int status = tcp_key_recurse(now, STAT_OK, header, m, 0, daemon->namebuff, daemon->keyname,
|
||||||
serv, have_mark, mark, &keycount);
|
serv, have_mark, mark, &keycount);
|
||||||
char *result, *domain = "result";
|
char *result, *domain = "result";
|
||||||
|
|
||||||
union all_addr a;
|
union all_addr a;
|
||||||
a.log.ede = ede = errflags_to_ede(status);
|
a.log.ede = ede = errflags_to_ede(status);
|
||||||
|
|
||||||
if (STAT_ISEQUAL(status, STAT_ABANDONED))
|
if (STAT_ISEQUAL(status, STAT_ABANDONED))
|
||||||
{
|
{
|
||||||
result = "ABANDONED";
|
result = "ABANDONED";
|
||||||
@@ -2137,7 +2142,7 @@ 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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user