mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Find room to store key-id and digest-type in DS records.
->uid is now overloaded to store key length
This commit is contained in:
16
src/cache.c
16
src/cache.c
@@ -240,7 +240,11 @@ static int is_outdated_cname_pointer(struct crec *crecp)
|
|||||||
if (!(crecp->flags & F_CNAME))
|
if (!(crecp->flags & F_CNAME))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (crecp->addr.cname.cache && crecp->addr.cname.uid == crecp->addr.cname.cache->uid)
|
/* NB. record may be reused as DS or DNSKEY, where uid is
|
||||||
|
overloaded for something completely different */
|
||||||
|
if (crecp->addr.cname.cache &&
|
||||||
|
(crecp->addr.cname.cache->flags & (F_IPV4 | F_IPV6)) &&
|
||||||
|
crecp->addr.cname.uid == crecp->addr.cname.cache->uid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1158,10 +1162,16 @@ void dump_cache(time_t now)
|
|||||||
a = cache_get_name(cache->addr.cname.cache);
|
a = cache_get_name(cache->addr.cname.cache);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_DNSSEC
|
#ifdef HAVE_DNSSEC
|
||||||
else if (cache->flags & (F_DNSKEY | F_DS))
|
else if (cache->flags & F_DNSKEY)
|
||||||
{
|
{
|
||||||
a = daemon->addrbuff;
|
a = daemon->addrbuff;
|
||||||
sprintf(a, "%u %u", cache->addr.key.algo, cache->addr.key.keylen);
|
sprintf(a, "%3u %u", cache->addr.key.algo, cache->uid);
|
||||||
|
}
|
||||||
|
else if (cache->flags & F_DS)
|
||||||
|
{
|
||||||
|
a = daemon->addrbuff;
|
||||||
|
sprintf(a, "%5u %3u %3u %u", cache->addr.key.flags_or_keyid,
|
||||||
|
cache->addr.key.algo, cache->addr.key.digest, cache->uid);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -305,8 +305,7 @@ struct keydata {
|
|||||||
|
|
||||||
struct crec {
|
struct crec {
|
||||||
struct crec *next, *prev, *hash_next;
|
struct crec *next, *prev, *hash_next;
|
||||||
time_t ttd; /* time to die */
|
/* union is 16 bytes when doing IPv6, 8 bytes on 32 bit machines without IPv6 */
|
||||||
int uid;
|
|
||||||
union {
|
union {
|
||||||
struct all_addr addr;
|
struct all_addr addr;
|
||||||
struct {
|
struct {
|
||||||
@@ -316,10 +315,13 @@ struct crec {
|
|||||||
struct {
|
struct {
|
||||||
struct keydata *keydata;
|
struct keydata *keydata;
|
||||||
unsigned char algo;
|
unsigned char algo;
|
||||||
unsigned char flags;
|
unsigned char digest; /* DS only */
|
||||||
unsigned short keylen;
|
unsigned short flags_or_keyid; /* flags for DNSKEY, keyid for DS */
|
||||||
} key;
|
} key;
|
||||||
} addr;
|
} addr;
|
||||||
|
time_t ttd; /* time to die */
|
||||||
|
/* used as keylen if F_DS or F_DNSKEY, index to source for F_HOSTS */
|
||||||
|
int uid;
|
||||||
unsigned short flags;
|
unsigned short flags;
|
||||||
union {
|
union {
|
||||||
char sname[SMALLDNAME];
|
char sname[SMALLDNAME];
|
||||||
|
|||||||
Reference in New Issue
Block a user