mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix bugs in caching CNAMEs with target to SRV records.
This commit is contained in:
@@ -802,8 +802,10 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
|
|||||||
if (attl < cttl)
|
if (attl < cttl)
|
||||||
cttl = attl;
|
cttl = attl;
|
||||||
|
|
||||||
|
namep = p1;
|
||||||
if (!extract_name(header, qlen, &p1, name, 1, 0))
|
if (!extract_name(header, qlen, &p1, name, 1, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
goto cname_loop1;
|
goto cname_loop1;
|
||||||
}
|
}
|
||||||
else if (!(flags & F_NXDOMAIN))
|
else if (!(flags & F_NXDOMAIN))
|
||||||
@@ -1882,26 +1884,16 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
if (!dryrun)
|
if (!dryrun)
|
||||||
log_query(crecp->flags, name, NULL, NULL);
|
log_query(crecp->flags, name, NULL, NULL);
|
||||||
}
|
}
|
||||||
else
|
else if (!dryrun)
|
||||||
{
|
{
|
||||||
unsigned char *p1 = ((unsigned char *)header) + nameoffset;
|
char *target = blockdata_retrieve(crecp->addr.srv.target, crecp->addr.srv.targetlen, NULL);
|
||||||
|
log_query(crecp->flags, name, NULL, 0);
|
||||||
|
|
||||||
if (!dryrun)
|
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
{
|
crec_ttl(crecp, now), NULL, T_SRV, C_IN, "sssd",
|
||||||
log_query(crecp->flags, name, NULL, 0);
|
crecp->addr.srv.priority, crecp->addr.srv.weight, crecp->addr.srv.srvport,
|
||||||
|
target))
|
||||||
blockdata_retrieve(crecp->addr.srv.target, crecp->addr.srv.targetlen, name);
|
anscount++;
|
||||||
if (add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
|
||||||
crec_ttl(crecp, now), NULL, T_SRV, C_IN, "sssd",
|
|
||||||
crecp->addr.srv.priority, crecp->addr.srv.weight, crecp->addr.srv.srvport,
|
|
||||||
name))
|
|
||||||
anscount++;
|
|
||||||
|
|
||||||
|
|
||||||
/* restore name we overwrote */
|
|
||||||
if (!extract_name(header, qlen, &p1, name, 1, 0))
|
|
||||||
return 0; /* bad packet */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} while ((crecp = cache_find_by_name(crecp, name, now, F_SRV)));
|
} while ((crecp = cache_find_by_name(crecp, name, now, F_SRV)));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user