mirror of
http://thekelleys.org.uk/git/dnsmasq.git
synced 2026-11-12 16:50:54 +00:00
Compare commits
5
Commits
v2.69test6
...
v2.69test7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da4f372271 | ||
|
|
610e782a29 | ||
|
|
854cf26907 | ||
|
|
bb201c211a | ||
|
|
12fae49fff |
No files matched your search
Vendored
+2
@@ -126,12 +126,14 @@ binary-arch: checkroot
|
|||||||
-d debian/base/usr/share/doc/$(package) \
|
-d debian/base/usr/share/doc/$(package) \
|
||||||
-d debian/base/usr/share/doc/$(package)/examples \
|
-d debian/base/usr/share/doc/$(package)/examples \
|
||||||
-d debian/base/var/run \
|
-d debian/base/var/run \
|
||||||
|
-d debian/base/usr/share/$(package) \
|
||||||
-d debian/base/var/lib/misc
|
-d debian/base/var/lib/misc
|
||||||
make $(TARGET) PREFIX=/usr DESTDIR=`pwd`/debian/base CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" COPTS="$(DEB_COPTS)" CC=gcc
|
make $(TARGET) PREFIX=/usr DESTDIR=`pwd`/debian/base CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" COPTS="$(DEB_COPTS)" CC=gcc
|
||||||
ifeq (,$(findstring nodocs,$(DEB_BUILD_OPTIONS)))
|
ifeq (,$(findstring nodocs,$(DEB_BUILD_OPTIONS)))
|
||||||
install -m 644 doc.html debian/base/usr/share/doc/$(package)/.
|
install -m 644 doc.html debian/base/usr/share/doc/$(package)/.
|
||||||
install -m 644 setup.html debian/base/usr/share/doc/$(package)/.
|
install -m 644 setup.html debian/base/usr/share/doc/$(package)/.
|
||||||
install -m 644 dnsmasq.conf.example debian/base/usr/share/doc/$(package)/examples/.
|
install -m 644 dnsmasq.conf.example debian/base/usr/share/doc/$(package)/examples/.
|
||||||
|
install -m 644 trust-anchors.conf debian/base/usr/share/$(package)/.
|
||||||
install -m 644 FAQ debian/base/usr/share/doc/$(package)/.
|
install -m 644 FAQ debian/base/usr/share/doc/$(package)/.
|
||||||
gzip -9 debian/base/usr/share/doc/$(package)/FAQ
|
gzip -9 debian/base/usr/share/doc/$(package)/FAQ
|
||||||
install -m 644 CHANGELOG debian/base/usr/share/doc/$(package)/changelog
|
install -m 644 CHANGELOG debian/base/usr/share/doc/$(package)/changelog
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
# Never forward addresses in the non-routed address spaces.
|
# Never forward addresses in the non-routed address spaces.
|
||||||
#bogus-priv
|
#bogus-priv
|
||||||
|
|
||||||
|
# Uncomment these to enable DNSSEC validation and caching:
|
||||||
|
# (Requires dnsmasq to be built with DNSSEC option.)
|
||||||
|
#conf-file=%%PREFIX%%/share/dnsmasq/trust-anchors.conf
|
||||||
|
#dnssec
|
||||||
|
|
||||||
# Uncomment this to filter useless windows-originated DNS requests
|
# Uncomment this to filter useless windows-originated DNS requests
|
||||||
# which can trigger dial-on-demand links needlessly.
|
# which can trigger dial-on-demand links needlessly.
|
||||||
|
|||||||
+43
-9
@@ -55,7 +55,9 @@ static const struct {
|
|||||||
{ 41, "OPT" },
|
{ 41, "OPT" },
|
||||||
{ 43, "DS" },
|
{ 43, "DS" },
|
||||||
{ 46, "RRSIG" },
|
{ 46, "RRSIG" },
|
||||||
|
{ 47, "NSEC" },
|
||||||
{ 48, "DNSKEY" },
|
{ 48, "DNSKEY" },
|
||||||
|
{ 50, "NSEC3" },
|
||||||
{ 249, "TKEY" },
|
{ 249, "TKEY" },
|
||||||
{ 250, "TSIG" },
|
{ 250, "TSIG" },
|
||||||
{ 251, "IXFR" },
|
{ 251, "IXFR" },
|
||||||
@@ -592,9 +594,12 @@ void cache_end_insert(void)
|
|||||||
new_chain = NULL;
|
new_chain = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsigned short prot)
|
struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsigned int prot)
|
||||||
{
|
{
|
||||||
struct crec *ans;
|
struct crec *ans;
|
||||||
|
int no_rr = prot & F_NO_RR;
|
||||||
|
|
||||||
|
prot &= ~F_NO_RR;
|
||||||
|
|
||||||
if (crecp) /* iterating */
|
if (crecp) /* iterating */
|
||||||
ans = crecp->next;
|
ans = crecp->next;
|
||||||
@@ -643,7 +648,7 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!insert)
|
if (!insert && !no_rr)
|
||||||
{
|
{
|
||||||
insert = up;
|
insert = up;
|
||||||
ins_flags = crecp->flags & (F_REVERSE | F_IMMORTAL);
|
ins_flags = crecp->flags & (F_REVERSE | F_IMMORTAL);
|
||||||
@@ -683,7 +688,7 @@ struct crec *cache_find_by_name(struct crec *crecp, char *name, time_t now, unsi
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
|
struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr,
|
||||||
time_t now, unsigned short prot)
|
time_t now, unsigned int prot)
|
||||||
{
|
{
|
||||||
struct crec *ans;
|
struct crec *ans;
|
||||||
#ifdef HAVE_IPV6
|
#ifdef HAVE_IPV6
|
||||||
@@ -1298,12 +1303,10 @@ void dump_cache(time_t now)
|
|||||||
{
|
{
|
||||||
if (cache->flags & F_DNSKEY)
|
if (cache->flags & F_DNSKEY)
|
||||||
{
|
{
|
||||||
char tp[20];
|
|
||||||
/* RRSIG */
|
/* RRSIG */
|
||||||
querystr("", tp, cache->addr.sig.type_covered);
|
|
||||||
a = daemon->addrbuff;
|
a = daemon->addrbuff;
|
||||||
sprintf(a, "%5u %3u %s", cache->addr.sig.keytag,
|
sprintf(a, "%5u %3u %s", cache->addr.sig.keytag,
|
||||||
cache->addr.sig.algo, tp);
|
cache->addr.sig.algo, querystr("", cache->addr.sig.type_covered));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1379,14 +1382,45 @@ char *record_source(int index)
|
|||||||
return "<unknown>";
|
return "<unknown>";
|
||||||
}
|
}
|
||||||
|
|
||||||
void querystr(char *desc, char *str, unsigned short type)
|
char *querystr(char *desc, unsigned short type)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
int len = 10; /* strlen("type=xxxxx") */
|
||||||
|
const char *types = NULL;
|
||||||
|
static char *buff = NULL;
|
||||||
|
static int bufflen = 0;
|
||||||
|
|
||||||
sprintf(str, "%s[type=%d]", desc, type);
|
|
||||||
for (i = 0; i < (sizeof(typestr)/sizeof(typestr[0])); i++)
|
for (i = 0; i < (sizeof(typestr)/sizeof(typestr[0])); i++)
|
||||||
if (typestr[i].type == type)
|
if (typestr[i].type == type)
|
||||||
sprintf(str,"%s[%s]", desc, typestr[i].name);
|
{
|
||||||
|
types = typestr[i].name;
|
||||||
|
len = strlen(types);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
len += 3; /* braces, terminator */
|
||||||
|
len += strlen(desc);
|
||||||
|
|
||||||
|
if (!buff || bufflen < len)
|
||||||
|
{
|
||||||
|
if (buff)
|
||||||
|
free(buff);
|
||||||
|
else if (len < 20)
|
||||||
|
len = 20;
|
||||||
|
|
||||||
|
buff = whine_malloc(len);
|
||||||
|
bufflen = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buff)
|
||||||
|
{
|
||||||
|
if (types)
|
||||||
|
sprintf(buff, "%s[%s]", desc, types);
|
||||||
|
else
|
||||||
|
sprintf(buff, "%s[type=%d]", desc, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buff ? buff : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
|
void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
|
||||||
|
|||||||
+4
-3
@@ -423,6 +423,7 @@ struct crec {
|
|||||||
#define F_DNSSEC (1u<<22)
|
#define F_DNSSEC (1u<<22)
|
||||||
#define F_KEYTAG (1u<<23)
|
#define F_KEYTAG (1u<<23)
|
||||||
#define F_SECSTAT (1u<<24)
|
#define F_SECSTAT (1u<<24)
|
||||||
|
#define F_NO_RR (1u<<25)
|
||||||
|
|
||||||
|
|
||||||
/* struct sockaddr is not large enough to hold any address,
|
/* struct sockaddr is not large enough to hold any address,
|
||||||
@@ -990,12 +991,12 @@ extern struct daemon {
|
|||||||
void cache_init(void);
|
void cache_init(void);
|
||||||
void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg);
|
void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg);
|
||||||
char *record_source(int index);
|
char *record_source(int index);
|
||||||
void querystr(char *desc, char *str, unsigned short type);
|
char *querystr(char *desc, unsigned short type);
|
||||||
struct crec *cache_find_by_addr(struct crec *crecp,
|
struct crec *cache_find_by_addr(struct crec *crecp,
|
||||||
struct all_addr *addr, time_t now,
|
struct all_addr *addr, time_t now,
|
||||||
unsigned short prot);
|
unsigned int prot);
|
||||||
struct crec *cache_find_by_name(struct crec *crecp,
|
struct crec *cache_find_by_name(struct crec *crecp,
|
||||||
char *name, time_t now, unsigned short prot);
|
char *name, time_t now, unsigned int prot);
|
||||||
void cache_end_insert(void);
|
void cache_end_insert(void);
|
||||||
void cache_start_insert(void);
|
void cache_start_insert(void);
|
||||||
struct crec *cache_insert(char *name, struct all_addr *addr,
|
struct crec *cache_insert(char *name, struct all_addr *addr,
|
||||||
|
|||||||
+6
-3
@@ -531,6 +531,11 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
|
|||||||
{
|
{
|
||||||
unsigned char **new;
|
unsigned char **new;
|
||||||
|
|
||||||
|
/* Protect against insane/maliciuos queries which bloat the workspace
|
||||||
|
and eat CPU in the sort */
|
||||||
|
if (rrsetidx >= 100)
|
||||||
|
return STAT_INSECURE;
|
||||||
|
|
||||||
/* expand */
|
/* expand */
|
||||||
if (!(new = whine_malloc((rrset_sz + 5) * sizeof(unsigned char **))))
|
if (!(new = whine_malloc((rrset_sz + 5) * sizeof(unsigned char **))))
|
||||||
return STAT_INSECURE;
|
return STAT_INSECURE;
|
||||||
@@ -1382,9 +1387,7 @@ int dnskey_keytag(int alg, int flags, unsigned char *key, int keylen)
|
|||||||
size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr)
|
size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr)
|
||||||
{
|
{
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
char types[20];
|
char *types = querystr("dnssec-query", type);
|
||||||
|
|
||||||
querystr("dnssec-query", types, type);
|
|
||||||
|
|
||||||
if (addr->sa.sa_family == AF_INET)
|
if (addr->sa.sa_family == AF_INET)
|
||||||
log_query(F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
|
log_query(F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
|
||||||
|
|||||||
+2
-5
@@ -1117,12 +1117,10 @@ void receive_query(struct listener *listen, time_t now)
|
|||||||
|
|
||||||
if (extract_request(header, (size_t)n, daemon->namebuff, &type))
|
if (extract_request(header, (size_t)n, daemon->namebuff, &type))
|
||||||
{
|
{
|
||||||
char types[20];
|
|
||||||
#ifdef HAVE_AUTH
|
#ifdef HAVE_AUTH
|
||||||
struct auth_zone *zone;
|
struct auth_zone *zone;
|
||||||
#endif
|
#endif
|
||||||
|
char *types = querystr(auth_dns ? "auth" : "query", type);
|
||||||
querystr(auth_dns ? "auth" : "query", types, type);
|
|
||||||
|
|
||||||
if (listen->family == AF_INET)
|
if (listen->family == AF_INET)
|
||||||
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
||||||
@@ -1290,11 +1288,10 @@ unsigned char *tcp_request(int confd, time_t now,
|
|||||||
|
|
||||||
if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
|
if ((gotname = extract_request(header, (unsigned int)size, daemon->namebuff, &qtype)))
|
||||||
{
|
{
|
||||||
char types[20];
|
|
||||||
#ifdef HAVE_AUTH
|
#ifdef HAVE_AUTH
|
||||||
struct auth_zone *zone;
|
struct auth_zone *zone;
|
||||||
#endif
|
#endif
|
||||||
querystr(auth_dns ? "auth" : "query", types, qtype);
|
char *types = querystr(auth_dns ? "auth" : "query", qtype);
|
||||||
|
|
||||||
if (peer_addr.sa.sa_family == AF_INET)
|
if (peer_addr.sa.sa_family == AF_INET)
|
||||||
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
log_query(F_QUERY | F_IPV4 | F_FORWARD, daemon->namebuff,
|
||||||
|
|||||||
+22
-25
@@ -1242,7 +1242,7 @@ int check_for_local_domain(char *name, time_t now)
|
|||||||
struct ptr_record *ptr;
|
struct ptr_record *ptr;
|
||||||
struct naptr *naptr;
|
struct naptr *naptr;
|
||||||
|
|
||||||
if ((crecp = cache_find_by_name(NULL, name, now, F_IPV4 | F_IPV6 | F_CNAME)) &&
|
if ((crecp = cache_find_by_name(NULL, name, now, F_IPV4 | F_IPV6 | F_CNAME | F_NO_RR)) &&
|
||||||
(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
|
(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -1628,11 +1628,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
(keydata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL)))
|
(keydata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL)))
|
||||||
{
|
{
|
||||||
if (qtype == T_RRSIG)
|
if (qtype == T_RRSIG)
|
||||||
{
|
log_query(F_RRNAME, name, NULL, querystr("rrsig", crecp->addr.sig.type_covered));
|
||||||
char types[20];
|
|
||||||
querystr("rrsig", types, crecp->addr.sig.type_covered);
|
|
||||||
log_query(F_RRNAME, name, NULL, types);
|
|
||||||
}
|
|
||||||
if ((keydata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL)) &&
|
if ((keydata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL)) &&
|
||||||
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
crec_ttl(crecp, now), &nameoffset,
|
crec_ttl(crecp, now), &nameoffset,
|
||||||
@@ -1742,24 +1738,25 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
else if (crecp->flags & F_DNSSECOK)
|
else if (crecp->flags & F_DNSSECOK)
|
||||||
{
|
{
|
||||||
int gotsig = 0;
|
int gotsig = 0;
|
||||||
|
struct crec *rr_crec = NULL;
|
||||||
|
|
||||||
crecp = NULL;
|
while ((rr_crec = cache_find_by_name(rr_crec, name, now, F_DS | F_DNSKEY)))
|
||||||
while ((crecp = cache_find_by_name(crecp, name, now, F_DS | F_DNSKEY)))
|
|
||||||
{
|
{
|
||||||
if (crecp->addr.sig.type_covered == T_PTR && crecp->uid == C_IN)
|
if (rr_crec->addr.sig.type_covered == T_PTR && rr_crec->uid == C_IN)
|
||||||
{
|
{
|
||||||
char *sigdata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL);
|
char *sigdata = blockdata_retrieve(rr_crec->addr.sig.keydata, rr_crec->addr.sig.keylen, NULL);
|
||||||
gotsig = 1;
|
gotsig = 1;
|
||||||
|
|
||||||
if (!dryrun &&
|
if (!dryrun &&
|
||||||
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
crecp->ttd - now, &nameoffset,
|
rr_crec->ttd - now, &nameoffset,
|
||||||
T_RRSIG, C_IN, "t", crecp->addr.sig.keylen, sigdata))
|
T_RRSIG, C_IN, "t", crecp->addr.sig.keylen, sigdata))
|
||||||
anscount++;
|
anscount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Need to re-run original cache search */
|
|
||||||
crecp = gotsig ? cache_find_by_addr(NULL, &addr, now, is_arpa) : NULL;
|
if (!gotsig)
|
||||||
|
crecp = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1923,7 +1920,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
cname_restart:
|
cname_restart:
|
||||||
if ((crecp = cache_find_by_name(NULL, name, now, flag | F_CNAME)))
|
if ((crecp = cache_find_by_name(NULL, name, now, flag | F_CNAME | (dryrun ? F_NO_RR : 0))))
|
||||||
{
|
{
|
||||||
int localise = 0;
|
int localise = 0;
|
||||||
|
|
||||||
@@ -1954,7 +1951,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
else if (crecp->flags & F_DNSSECOK)
|
else if (crecp->flags & F_DNSSECOK)
|
||||||
{
|
{
|
||||||
/* We're returning validated data, need to return the RRSIG too. */
|
/* We're returning validated data, need to return the RRSIG too. */
|
||||||
|
struct crec *rr_crec = NULL;
|
||||||
int sigtype = type;
|
int sigtype = type;
|
||||||
/* The signature may have expired even though the data is still in cache,
|
/* The signature may have expired even though the data is still in cache,
|
||||||
forward instead of answering from cache if so. */
|
forward instead of answering from cache if so. */
|
||||||
@@ -1963,23 +1960,23 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
if (crecp->flags & F_CNAME)
|
if (crecp->flags & F_CNAME)
|
||||||
sigtype = T_CNAME;
|
sigtype = T_CNAME;
|
||||||
|
|
||||||
crecp = NULL;
|
while ((rr_crec = cache_find_by_name(rr_crec, name, now, F_DS | F_DNSKEY)))
|
||||||
while ((crecp = cache_find_by_name(crecp, name, now, F_DS | F_DNSKEY)))
|
|
||||||
{
|
{
|
||||||
if (crecp->addr.sig.type_covered == sigtype && crecp->uid == C_IN)
|
if (rr_crec->addr.sig.type_covered == sigtype && rr_crec->uid == C_IN)
|
||||||
{
|
{
|
||||||
char *sigdata = blockdata_retrieve(crecp->addr.sig.keydata, crecp->addr.sig.keylen, NULL);
|
char *sigdata = blockdata_retrieve(rr_crec->addr.sig.keydata, rr_crec->addr.sig.keylen, NULL);
|
||||||
gotsig = 1;
|
gotsig = 1;
|
||||||
|
|
||||||
if (!dryrun &&
|
if (!dryrun &&
|
||||||
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
add_resource_record(header, limit, &trunc, nameoffset, &ansp,
|
||||||
crecp->ttd - now, &nameoffset,
|
rr_crec->ttd - now, &nameoffset,
|
||||||
T_RRSIG, C_IN, "t", crecp->addr.sig.keylen, sigdata))
|
T_RRSIG, C_IN, "t", rr_crec->addr.sig.keylen, sigdata))
|
||||||
anscount++;
|
anscount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Need to re-run original cache search */
|
|
||||||
crecp = gotsig ? cache_find_by_name(NULL, name, now, flag | F_CNAME) : NULL;
|
if (!gotsig)
|
||||||
|
crecp = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -2072,7 +2069,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
if (qtype == T_CNAME || qtype == T_ANY)
|
if (qtype == T_CNAME || qtype == T_ANY)
|
||||||
{
|
{
|
||||||
if ((crecp = cache_find_by_name(NULL, name, now, F_CNAME)) &&
|
if ((crecp = cache_find_by_name(NULL, name, now, F_CNAME)) &&
|
||||||
(qtype == T_CNAME || (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG))))
|
(qtype == T_CNAME || (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG | (dryrun ? F_NO_RR : 0)))))
|
||||||
{
|
{
|
||||||
if (!(crecp->flags & F_DNSSECOK))
|
if (!(crecp->flags & F_DNSSECOK))
|
||||||
sec_data = 0;
|
sec_data = 0;
|
||||||
@@ -2111,7 +2108,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!found && (option_bool(OPT_SELFMX) || option_bool(OPT_LOCALMX)) &&
|
if (!found && (option_bool(OPT_SELFMX) || option_bool(OPT_LOCALMX)) &&
|
||||||
cache_find_by_name(NULL, name, now, F_HOSTS | F_DHCP))
|
cache_find_by_name(NULL, name, now, F_HOSTS | F_DHCP | F_NO_RR))
|
||||||
{
|
{
|
||||||
ans = 1;
|
ans = 1;
|
||||||
if (!dryrun)
|
if (!dryrun)
|
||||||
|
|||||||
Reference in new issue
Block a user