mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-09 08:22:04 -04:00
2801. [func] Detect and report records that are different according
to DNSSEC but are sematically equal according to plain
DNS. Apply plain DNS comparisons rather than DNSSEC
comparisons when processing UPDATE requests.
dnssec-signzone now removes such semantically duplicate
records prior to signing the RRset.
named-checkzone -r {ignore|warn|fail} (default warn)
named-compilezone -r {ignore|warn|fail} (default warn)
named.conf: check-dup-records {ignore|warn|fail};
This commit is contained in:
parent
e438e29354
commit
3d17a3ba61
73 changed files with 956 additions and 88 deletions
12
CHANGES
12
CHANGES
|
|
@ -1,3 +1,15 @@
|
|||
2801. [func] Detect and report records that are different according
|
||||
to DNSSEC but are sematically equal according to plain
|
||||
DNS. Apply plain DNS comparisons rather than DNSSEC
|
||||
comparisons when processing UPDATE requests.
|
||||
dnssec-signzone now removes such semantically duplicate
|
||||
records prior to signing the RRset.
|
||||
|
||||
named-checkzone -r {ignore|warn|fail} (default warn)
|
||||
named-compilezone -r {ignore|warn|fail} (default warn)
|
||||
|
||||
named.conf: check-dup-records {ignore|warn|fail};
|
||||
|
||||
2800. [func] Reject zones which have NS records which refer to
|
||||
CNAMEs, DNAMEs or don't have address record (class IN
|
||||
only). Reject UPDATEs which would cause the zone
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: named-checkconf.c,v 1.50 2009/09/29 15:06:05 fdupont Exp $ */
|
||||
/* $Id: named-checkconf.c,v 1.51 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -205,6 +205,24 @@ configure_zone(const char *vclass, const char *view,
|
|||
return (ISC_R_FAILURE);
|
||||
zfile = cfg_obj_asstring(fileobj);
|
||||
|
||||
obj = NULL;
|
||||
if (get_maps(maps, "check-dup-records", &obj)) {
|
||||
if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "fail") == 0) {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else
|
||||
INSIST(0);
|
||||
} else {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
}
|
||||
|
||||
obj = NULL;
|
||||
if (get_maps(maps, "check-mx", &obj)) {
|
||||
if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: named-checkzone.c,v 1.57 2009/11/10 21:30:42 each Exp $ */
|
||||
/* $Id: named-checkzone.c,v 1.58 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -80,6 +80,7 @@ usage(void) {
|
|||
"[-f inputformat] [-F outputformat] "
|
||||
"[-t directory] [-w directory] [-k (ignore|warn|fail)] "
|
||||
"[-n (ignore|warn|fail)] [-m (ignore|warn|fail)] "
|
||||
"[-r (ignore|warn|fail)] "
|
||||
"[-i (full|full-sibling|local|local-sibling|none)] "
|
||||
"[-M (ignore|warn|fail)] [-S (ignore|warn|fail)] "
|
||||
"[-W (ignore|warn)] "
|
||||
|
|
@ -143,17 +144,19 @@ main(int argc, char **argv) {
|
|||
if (progmode == progmode_compile) {
|
||||
zone_options |= (DNS_ZONEOPT_CHECKNS |
|
||||
DNS_ZONEOPT_FATALNS |
|
||||
DNS_ZONEOPT_CHECKDUPRR |
|
||||
DNS_ZONEOPT_CHECKNAMES |
|
||||
DNS_ZONEOPT_CHECKNAMESFAIL |
|
||||
DNS_ZONEOPT_CHECKWILDCARD);
|
||||
}
|
||||
} else
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
|
||||
#define ARGCMP(X) (strcmp(isc_commandline_argument, X) == 0)
|
||||
|
||||
isc_commandline_errprint = ISC_FALSE;
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv,
|
||||
"c:df:hi:jk:m:n:qs:t:o:vw:DF:M:S:W:"))
|
||||
"c:df:hi:jk:m:n:qr:s:t:o:vw:DF:M:S:W:"))
|
||||
!= EOF) {
|
||||
switch (c) {
|
||||
case 'c':
|
||||
|
|
@ -265,16 +268,27 @@ main(int argc, char **argv) {
|
|||
}
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
output_filename = isc_commandline_argument;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quiet++;
|
||||
break;
|
||||
|
||||
case 't':
|
||||
result = isc_dir_chroot(isc_commandline_argument);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "isc_dir_chroot: %s: %s\n",
|
||||
isc_commandline_argument,
|
||||
isc_result_totext(result));
|
||||
case 'r':
|
||||
if (ARGCMP("warn")) {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR;
|
||||
zone_options &= ~DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else if (ARGCMP("fail")) {
|
||||
zone_options |= DNS_ZONEOPT_CHECKDUPRR |
|
||||
DNS_ZONEOPT_CHECKDUPRRFAIL;
|
||||
} else if (ARGCMP("ignore")) {
|
||||
zone_options &= ~(DNS_ZONEOPT_CHECKDUPRR |
|
||||
DNS_ZONEOPT_CHECKDUPRRFAIL);
|
||||
} else {
|
||||
fprintf(stderr, "invalid argument to -r: %s\n",
|
||||
isc_commandline_argument);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
|
|
@ -292,8 +306,14 @@ main(int argc, char **argv) {
|
|||
}
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
output_filename = isc_commandline_argument;
|
||||
case 't':
|
||||
result = isc_dir_chroot(isc_commandline_argument);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
fprintf(stderr, "isc_dir_chroot: %s: %s\n",
|
||||
isc_commandline_argument,
|
||||
isc_result_totext(result));
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- $Id: named-checkzone.docbook,v 1.37 2009/11/10 20:02:01 each Exp $ -->
|
||||
<!-- $Id: named-checkzone.docbook,v 1.38 2009/12/04 21:09:32 marka Exp $ -->
|
||||
<refentry id="man.named-checkzone">
|
||||
<refentryinfo>
|
||||
<date>June 13, 2000</date>
|
||||
|
|
@ -69,6 +69,7 @@
|
|||
<arg><option>-m <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-M <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-n <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-r <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-s <replaceable class="parameter">style</replaceable></option></arg>
|
||||
<arg><option>-S <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-t <replaceable class="parameter">directory</replaceable></option></arg>
|
||||
|
|
@ -93,6 +94,7 @@
|
|||
<arg><option>-m <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-n <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-o <replaceable class="parameter">filename</replaceable></option></arg>
|
||||
<arg><option>-r <replaceable class="parameter">mode</replaceable></option></arg>
|
||||
<arg><option>-s <replaceable class="parameter">style</replaceable></option></arg>
|
||||
<arg><option>-t <replaceable class="parameter">directory</replaceable></option></arg>
|
||||
<arg><option>-w <replaceable class="parameter">directory</replaceable></option></arg>
|
||||
|
|
@ -319,6 +321,19 @@
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-r <replaceable class="parameter">mode</replaceable></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check for records that are treated as different by DNSSEC but
|
||||
are semantically equal in plain DNS.
|
||||
Possible modes are <command>"fail"</command>,
|
||||
<command>"warn"</command> (default) and
|
||||
<command>"ignore"</command>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>-s <replaceable class="parameter">style</replaceable></term>
|
||||
<listitem>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnssec-signzone.c,v 1.256 2009/11/25 03:17:11 each Exp $ */
|
||||
/* $Id: dnssec-signzone.c,v 1.257 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -2348,6 +2348,97 @@ nsec3clean(dns_name_t *name, dns_dbnode_t *node,
|
|||
check_result(result, "dns_db_deleterdataset(RRSIG(NSEC3))");
|
||||
}
|
||||
|
||||
static void
|
||||
rrset_remove_duplicates(dns_name_t *name, dns_rdataset_t *rdataset,
|
||||
dns_diff_t *diff)
|
||||
{
|
||||
dns_difftuple_t *tuple = NULL;
|
||||
isc_result_t result;
|
||||
unsigned int count1 = 0;
|
||||
dns_rdataset_t tmprdataset;
|
||||
|
||||
dns_rdataset_init(&tmprdataset);
|
||||
for (result = dns_rdataset_first(rdataset);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdataset_next(rdataset)) {
|
||||
dns_rdata_t rdata1 = DNS_RDATA_INIT;
|
||||
unsigned int count2 = 0;
|
||||
|
||||
count1++;
|
||||
dns_rdataset_current(rdataset, &rdata1);
|
||||
dns_rdataset_clone(rdataset, &tmprdataset);
|
||||
for (result = dns_rdataset_first(&tmprdataset);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdataset_next(&tmprdataset)) {
|
||||
dns_rdata_t rdata2 = DNS_RDATA_INIT;
|
||||
count2++;
|
||||
if (count1 >= count2)
|
||||
continue;
|
||||
dns_rdataset_current(&tmprdataset, &rdata2);
|
||||
if (dns_rdata_casecompare(&rdata1, &rdata2) == 0) {
|
||||
result = dns_difftuple_create(mctx,
|
||||
DNS_DIFFOP_DEL,
|
||||
name,
|
||||
rdataset->ttl,
|
||||
&rdata2, &tuple);
|
||||
check_result(result, "dns_difftuple_create");
|
||||
dns_diff_append(diff, &tuple);
|
||||
}
|
||||
}
|
||||
dns_rdataset_disassociate(&tmprdataset);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
remove_duplicates(void) {
|
||||
isc_result_t result;
|
||||
dns_dbiterator_t *dbiter = NULL;
|
||||
dns_rdatasetiter_t *rdsiter = NULL;
|
||||
dns_diff_t diff;
|
||||
dns_dbnode_t *node = NULL;
|
||||
dns_rdataset_t rdataset;
|
||||
dns_fixedname_t fname;
|
||||
dns_name_t *name;
|
||||
|
||||
dns_diff_init(mctx, &diff);
|
||||
dns_fixedname_init(&fname);
|
||||
name = dns_fixedname_name(&fname);
|
||||
dns_rdataset_init(&rdataset);
|
||||
|
||||
result = dns_db_createiterator(gdb, 0, &dbiter);
|
||||
check_result(result, "dns_db_createiterator()");
|
||||
|
||||
for (result = dns_dbiterator_first(dbiter);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_dbiterator_next(dbiter)) {
|
||||
|
||||
result = dns_dbiterator_current(dbiter, &node, name);
|
||||
check_dns_dbiterator_current(result);
|
||||
result = dns_db_allrdatasets(gdb, node, gversion, 0, &rdsiter);
|
||||
check_result(result, "dns_db_allrdatasets()");
|
||||
for (result = dns_rdatasetiter_first(rdsiter);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdatasetiter_next(rdsiter)) {
|
||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||
rrset_remove_duplicates(name, &rdataset, &diff);
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
}
|
||||
if (result != ISC_R_NOMORE)
|
||||
fatal("rdatasets iteration failed.");
|
||||
dns_rdatasetiter_destroy(&rdsiter);
|
||||
dns_db_detachnode(gdb, &node);
|
||||
}
|
||||
if (result != ISC_R_NOMORE)
|
||||
fatal("zone iteration failed.");
|
||||
|
||||
if (!ISC_LIST_EMPTY(diff.tuples)) {
|
||||
result = dns_diff_applysilently(&diff, gdb, gversion);
|
||||
check_result(result, "dns_diff_applysilently");
|
||||
}
|
||||
dns_diff_clear(&diff);
|
||||
dns_dbiterator_destroy(&dbiter);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate NSEC3 records for the zone.
|
||||
*/
|
||||
|
|
@ -3709,6 +3800,8 @@ main(int argc, char *argv[]) {
|
|||
break;
|
||||
}
|
||||
|
||||
remove_duplicates();
|
||||
|
||||
if (IS_NSEC3)
|
||||
nsec3ify(dns_hash_sha1, nsec3iter, salt, salt_length,
|
||||
&hashlist);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: config.c,v 1.105 2009/12/03 23:18:16 each Exp $ */
|
||||
/* $Id: config.c,v 1.106 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -146,6 +146,7 @@ options {\n\
|
|||
check-names master fail;\n\
|
||||
check-names slave warn;\n\
|
||||
check-names response ignore;\n\
|
||||
check-dup-records warn;\n\
|
||||
check-mx warn;\n\
|
||||
acache-enable no;\n\
|
||||
acache-cleaning-interval 60;\n\
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: update.c,v 1.175 2009/12/04 20:32:07 each Exp $ */
|
||||
/* $Id: update.c,v 1.176 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
|
|
@ -931,7 +931,7 @@ temp_check_rrset(dns_difftuple_t *a, dns_difftuple_t *b) {
|
|||
b->op == DNS_DIFFOP_EXISTS);
|
||||
INSIST(a->rdata.type == b->rdata.type);
|
||||
INSIST(dns_name_equal(&a->name, &b->name));
|
||||
if (dns_rdata_compare(&a->rdata, &b->rdata) != 0)
|
||||
if (dns_rdata_casecompare(&a->rdata, &b->rdata) != 0)
|
||||
return (DNS_R_NXRRSET);
|
||||
a = ISC_LIST_NEXT(a, link);
|
||||
b = ISC_LIST_NEXT(b, link);
|
||||
|
|
@ -959,7 +959,7 @@ temp_order(const void *av, const void *bv) {
|
|||
r = (b->rdata.type - a->rdata.type);
|
||||
if (r != 0)
|
||||
return (r);
|
||||
r = dns_rdata_compare(&a->rdata, &b->rdata);
|
||||
r = dns_rdata_casecompare(&a->rdata, &b->rdata);
|
||||
return (r);
|
||||
}
|
||||
|
||||
|
|
@ -1188,7 +1188,7 @@ rr_equal_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
|
|||
* dns_rdata_equal() (that used dns_name_equal()), since it
|
||||
* would be faster. Not a priority.
|
||||
*/
|
||||
return (dns_rdata_compare(update_rr, db_rr) == 0 ?
|
||||
return (dns_rdata_casecompare(update_rr, db_rr) == 0 ?
|
||||
ISC_TRUE : ISC_FALSE);
|
||||
}
|
||||
|
||||
|
|
@ -1335,7 +1335,7 @@ add_rr_prepare_action(void *data, rr_t *rr) {
|
|||
* If the update RR is a "duplicate" of the update RR,
|
||||
* the update should be silently ignored.
|
||||
*/
|
||||
equal = ISC_TF(dns_rdata_compare(&rr->rdata, ctx->update_rr) == 0);
|
||||
equal = ISC_TF(dns_rdata_casecompare(&rr->rdata, ctx->update_rr) == 0);
|
||||
if (equal && rr->ttl == ctx->update_rr_ttl) {
|
||||
ctx->ignore_add = ISC_TRUE;
|
||||
return (ISC_R_SUCCESS);
|
||||
|
|
@ -2928,7 +2928,7 @@ rr_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
|
|||
result = dns_rdataset_next(&rdataset)) {
|
||||
dns_rdata_t myrdata = DNS_RDATA_INIT;
|
||||
dns_rdataset_current(&rdataset, &myrdata);
|
||||
if (!dns_rdata_compare(&myrdata, rdata))
|
||||
if (!dns_rdata_casecompare(&myrdata, rdata))
|
||||
break;
|
||||
}
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zoneconf.c,v 1.160 2009/12/03 23:18:17 each Exp $ */
|
||||
/* $Id: zoneconf.c,v 1.161 2009/12/04 21:09:32 marka Exp $ */
|
||||
|
||||
/*% */
|
||||
|
||||
|
|
@ -881,6 +881,21 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
|
|||
check = ISC_FALSE;
|
||||
dns_zone_setoption(zone, DNS_ZONEOPT_CHECKWILDCARD, check);
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "check-dup-records", &obj);
|
||||
INSIST(obj != NULL);
|
||||
if (strcasecmp(cfg_obj_asstring(obj), "warn") == 0) {
|
||||
fail = ISC_FALSE;
|
||||
check = ISC_TRUE;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "fail") == 0) {
|
||||
fail = check = ISC_TRUE;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "ignore") == 0) {
|
||||
fail = check = ISC_FALSE;
|
||||
} else
|
||||
INSIST(0);
|
||||
dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRR, check);
|
||||
dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
|
||||
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "check-mx", &obj);
|
||||
INSIST(obj != NULL);
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
- PERFORMANCE OF THIS SOFTWARE.
|
||||
-->
|
||||
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.448 2009/12/03 23:18:17 each Exp $ -->
|
||||
<!-- File: $Id: Bv9ARM-book.xml,v 1.449 2009/12/04 21:09:32 marka Exp $ -->
|
||||
<book xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<title>BIND 9 Administrator Reference Manual</title>
|
||||
|
||||
|
|
@ -4906,6 +4906,7 @@ badresp:1,adberr:0,findfail:0,valfail:0]
|
|||
... }; </optional>
|
||||
<optional> check-names ( <replaceable>master</replaceable> | <replaceable>slave</replaceable> | <replaceable>response</replaceable> )
|
||||
( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
|
||||
<optional> check-dup-records ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
|
||||
<optional> check-mx ( <replaceable>warn</replaceable> | <replaceable>fail</replaceable> | <replaceable>ignore</replaceable> ); </optional>
|
||||
<optional> check-wildcard <replaceable>yes_or_no</replaceable>; </optional>
|
||||
<optional> check-integrity <replaceable>yes_or_no</replaceable>; </optional>
|
||||
|
|
@ -6424,6 +6425,30 @@ options {
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><command>check-dup-records</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check master zones for records that are treated as different
|
||||
by DNSSEC but are semantically equal in plain DNS. The
|
||||
default is to <command>warn</command>. Other possible
|
||||
values are <command>fail</command> and
|
||||
<command>ignore</command>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><command>check-mx</command></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Check whether the MX record appears to refer to a IP address.
|
||||
The default is to <command>warn</command>. Other possible
|
||||
values are <command>fail</command> and
|
||||
<command>ignore</command>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><command>check-mx</command></term>
|
||||
<listitem>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: check.c,v 1.113 2009/12/03 23:18:17 each Exp $ */
|
||||
/* $Id: check.c,v 1.114 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -1121,6 +1121,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
|
|||
{ "key-directory", MASTERZONE },
|
||||
{ "check-wildcard", MASTERZONE },
|
||||
{ "check-mx", MASTERZONE },
|
||||
{ "check-dup-records", MASTERZONE },
|
||||
{ "integrity-check", MASTERZONE },
|
||||
{ "check-mx-cname", MASTERZONE },
|
||||
{ "check-srv-cname", MASTERZONE },
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: gen.c,v 1.83 2008/09/25 04:02:38 tbox Exp $ */
|
||||
/* $Id: gen.c,v 1.84 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -631,6 +631,8 @@ main(int argc, char **argv) {
|
|||
TOWIRETYPE, TOWIRECLASS, TOWIREDEF);
|
||||
doswitch("COMPARESWITCH", "compare", COMPAREARGS,
|
||||
COMPARETYPE, COMPARECLASS, COMPAREDEF);
|
||||
doswitch("CASECOMPARESWITCH", "casecompare", COMPAREARGS,
|
||||
COMPARETYPE, COMPARECLASS, COMPAREDEF);
|
||||
doswitch("FROMSTRUCTSWITCH", "fromstruct", FROMSTRUCTARGS,
|
||||
FROMSTRUCTTYPE, FROMSTRUCTCLASS, FROMSTRUCTDEF);
|
||||
doswitch("TOSTRUCTSWITCH", "tostruct", TOSTRUCTARGS,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdata.h,v 1.76 2009/10/08 23:48:10 tbox Exp $ */
|
||||
/* $Id: rdata.h,v 1.77 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
#ifndef DNS_RDATA_H
|
||||
#define DNS_RDATA_H 1
|
||||
|
|
@ -220,6 +220,25 @@ dns_rdata_compare(const dns_rdata_t *rdata1, const dns_rdata_t *rdata2);
|
|||
*\li > 0 'rdata1' is greater than 'rdata2'
|
||||
*/
|
||||
|
||||
int
|
||||
dns_rdata_casecompare(const dns_rdata_t *rdata1, const dns_rdata_t *rdata2);
|
||||
/*%<
|
||||
* dns_rdata_casecompare() is similar to dns_rdata_compare() but also
|
||||
* compares domain names case insensitively in known rdata types that
|
||||
* are treated as opaque data by dns_rdata_compare().
|
||||
*
|
||||
* Requires:
|
||||
*
|
||||
*\li 'rdata1' is a valid, non-empty rdata
|
||||
*
|
||||
*\li 'rdata2' is a valid, non-empty rdata
|
||||
*
|
||||
* Returns:
|
||||
*\li < 0 'rdata1' is less than 'rdata2'
|
||||
*\li 0 'rdata1' is equal to 'rdata2'
|
||||
*\li > 0 'rdata1' is greater than 'rdata2'
|
||||
*/
|
||||
|
||||
/***
|
||||
*** Conversions
|
||||
***/
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zone.h,v 1.172 2009/12/04 03:33:15 marka Exp $ */
|
||||
/* $Id: zone.h,v 1.173 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
#ifndef DNS_ZONE_H
|
||||
#define DNS_ZONE_H 1
|
||||
|
|
@ -73,6 +73,8 @@ typedef enum {
|
|||
#define DNS_ZONEOPT_NSEC3TESTZONE 0x04000000U /*%< nsec3-test-zone */
|
||||
#define DNS_ZONEOPT_SECURETOINSECURE 0x08000000U /*%< dnssec-secure-to-insecure */
|
||||
#define DNS_ZONEOPT_DNSKEYKSKONLY 0x10000000U /*%< dnssec-dnskey-kskonly */
|
||||
#define DNS_ZONEOPT_CHECKDUPRR 0x20000000U /*%< check-dup-records */
|
||||
#define DNS_ZONEOPT_CHECKDUPRRFAIL 0x40000000U /*%< fatal check-dup-records failures */
|
||||
|
||||
#ifndef NOMINUM_PUBLIC
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdata.c,v 1.203 2009/10/08 23:13:07 marka Exp $ */
|
||||
/* $Id: rdata.c,v 1.204 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -349,6 +349,37 @@ dns_rdata_compare(const dns_rdata_t *rdata1, const dns_rdata_t *rdata2) {
|
|||
return (result);
|
||||
}
|
||||
|
||||
int
|
||||
dns_rdata_casecompare(const dns_rdata_t *rdata1, const dns_rdata_t *rdata2) {
|
||||
int result = 0;
|
||||
isc_boolean_t use_default = ISC_FALSE;
|
||||
|
||||
REQUIRE(rdata1 != NULL);
|
||||
REQUIRE(rdata2 != NULL);
|
||||
REQUIRE(rdata1->data != NULL);
|
||||
REQUIRE(rdata2->data != NULL);
|
||||
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata1));
|
||||
REQUIRE(DNS_RDATA_VALIDFLAGS(rdata2));
|
||||
|
||||
if (rdata1->rdclass != rdata2->rdclass)
|
||||
return (rdata1->rdclass < rdata2->rdclass ? -1 : 1);
|
||||
|
||||
if (rdata1->type != rdata2->type)
|
||||
return (rdata1->type < rdata2->type ? -1 : 1);
|
||||
|
||||
CASECOMPARESWITCH
|
||||
|
||||
if (use_default) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
result = isc_region_compare(&r1, &r2);
|
||||
}
|
||||
return (result);
|
||||
}
|
||||
|
||||
/***
|
||||
*** Conversions
|
||||
***/
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tsig_250.c,v 1.63 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: tsig_250.c,v 1.64 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 13:39:43 PST 2000 by gson */
|
||||
|
||||
|
|
@ -594,4 +594,9 @@ checknames_any_tsig(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_any_tsig(ARGS_COMPARE) {
|
||||
return (compare_any_tsig(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_ANY_255_TSIG_250_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a_1.c,v 1.6 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: a_1.c,v 1.7 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* by Bjorn.Victor@it.uu.se, 2005-05-07 */
|
||||
/* Based on generic/soa_6.c and generic/mx_15.c */
|
||||
|
|
@ -313,4 +313,8 @@ checknames_ch_a(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_ch_a(ARGS_COMPARE) {
|
||||
return (compare_ch_a(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_CH_3_A_1_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: afsdb_18.c,v 1.47 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: afsdb_18.c,v 1.48 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 14:59:00 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -306,4 +306,8 @@ checknames_afsdb(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_afsdb(ARGS_COMPARE) {
|
||||
return (compare_afsdb(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_AFSDB_18_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cert_37.c,v 1.50 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: cert_37.c,v 1.51 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 21:14:32 EST 2000 by tale */
|
||||
|
||||
|
|
@ -276,5 +276,9 @@ checknames_cert(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_CERT_37_C */
|
||||
|
||||
static inline int
|
||||
casecompare_cert(ARGS_COMPARE) {
|
||||
return (compare_cert(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_CERT_37_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: cname_5.c,v 1.47 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: cname_5.c,v 1.48 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 16:48:45 PST 2000 by brister */
|
||||
|
||||
|
|
@ -229,4 +229,9 @@ checknames_cname(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_cname(ARGS_COMPARE) {
|
||||
return (compare_cname(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_CNAME_5_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dlv_32769.c,v 1.6 2007/06/18 23:47:43 tbox Exp $ */
|
||||
/* $Id: dlv_32769.c,v 1.7 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnsext-delegation-signer-05.txt */
|
||||
|
||||
|
|
@ -318,4 +318,9 @@ checknames_dlv(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_dlv(ARGS_COMPARE) {
|
||||
return (compare_dlv(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_DLV_32769_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dname_39.c,v 1.38 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: dname_39.c,v 1.39 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 16:52:38 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -230,4 +230,8 @@ checknames_dname(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_dname(ARGS_COMPARE) {
|
||||
return (compare_dname(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_DNAME_39_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dnskey_48.c,v 1.8 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: dnskey_48.c,v 1.9 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
|
||||
|
|
@ -76,6 +76,7 @@ totext_dnskey(ARGS_TOTEXT) {
|
|||
char buf[sizeof("64000")];
|
||||
unsigned int flags;
|
||||
unsigned char algorithm;
|
||||
char namebuf[DNS_NAME_FORMATSIZE];
|
||||
|
||||
REQUIRE(rdata->type == 48);
|
||||
REQUIRE(rdata->length != 0);
|
||||
|
|
@ -105,6 +106,15 @@ totext_dnskey(ARGS_TOTEXT) {
|
|||
if ((flags & 0xc000) == 0xc000)
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0 &&
|
||||
algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
dns_name_t name;
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
dns_name_format(&name, namebuf, sizeof(namebuf));
|
||||
} else
|
||||
namebuf[0] = 0;
|
||||
|
||||
/* key */
|
||||
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
|
||||
RETERR(str_totext(" (", target));
|
||||
|
|
@ -127,12 +137,18 @@ totext_dnskey(ARGS_TOTEXT) {
|
|||
dns_rdata_toregion(rdata, &tmpr);
|
||||
sprintf(buf, "%u", dst_region_computeid(&tmpr, algorithm));
|
||||
RETERR(str_totext(buf, target));
|
||||
if (algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
RETERR(str_totext(tctx->linebreak, target));
|
||||
RETERR(str_totext("; alg = ", target));
|
||||
RETERR(str_totext(namebuf, target));
|
||||
}
|
||||
}
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
fromwire_dnskey(ARGS_FROMWIRE) {
|
||||
unsigned char algorithm;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 48);
|
||||
|
|
@ -146,6 +162,18 @@ fromwire_dnskey(ARGS_FROMWIRE) {
|
|||
if (sr.length < 4)
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
|
||||
algorithm = sr.base[3];
|
||||
RETERR(mem_tobuffer(target, sr.base, 4));
|
||||
isc_region_consume(&sr, 4);
|
||||
isc_buffer_forward(source, 4);
|
||||
|
||||
if (algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
dns_name_t name;
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, options, target));
|
||||
}
|
||||
isc_buffer_activeregion(source, &sr);
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
|
@ -309,4 +337,13 @@ checknames_dnskey(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_dnskey(ARGS_COMPARE) {
|
||||
|
||||
/*
|
||||
* Treat ALG 253 (private DNS) subtype name case sensistively.
|
||||
*/
|
||||
return (compare_dnskey(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_DNSKEY_48_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ds_43.c,v 1.12 2007/06/18 23:47:43 tbox Exp $ */
|
||||
/* $Id: ds_43.c,v 1.13 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* draft-ietf-dnsext-delegation-signer-05.txt */
|
||||
|
||||
|
|
@ -318,4 +318,9 @@ checknames_ds(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_ds(ARGS_COMPARE) {
|
||||
return (compare_ds(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_DS_43_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: gpos_27.c,v 1.41 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: gpos_27.c,v 1.42 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 16:48:45 PST 2000 by brister */
|
||||
|
||||
|
|
@ -249,4 +249,9 @@ checknames_gpos(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_gpos(ARGS_COMPARE) {
|
||||
return (compare_gpos(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_GPOS_27_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: hinfo_13.c,v 1.44 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: hinfo_13.c,v 1.45 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
|
||||
|
|
@ -221,4 +221,8 @@ checknames_hinfo(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_hinfo(ARGS_COMPARE) {
|
||||
return (compare_hinfo(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_HINFO_13_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: hip_55.c,v 1.4 2009/09/02 23:43:54 each Exp $ */
|
||||
/* $Id: hip_55.c,v 1.5 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* reviewed: TBC */
|
||||
|
||||
|
|
@ -449,4 +449,62 @@ dns_rdata_hip_current(dns_rdata_hip_t *hip, dns_name_t *name) {
|
|||
INSIST(name->length + hip->offset <= hip->servers_len);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_hip(ARGS_COMPARE) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int order;
|
||||
isc_uint8_t hit_len;
|
||||
isc_uint16_t key_len;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->rdclass == rdata2->rdclass);
|
||||
REQUIRE(rdata1->type == 55);
|
||||
REQUIRE(rdata1->length != 0);
|
||||
REQUIRE(rdata2->length != 0);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
|
||||
INSIST(r1.length > 4);
|
||||
INSIST(r2.length > 4);
|
||||
r1.length = 4;
|
||||
r2.length = 4;
|
||||
order = isc_region_compare(&r1, &r2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
hit_len = uint8_fromregion(&r1);
|
||||
isc_region_consume(&r1, 2); /* hit length + algorithm */
|
||||
key_len = uint16_fromregion(&r1);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
isc_region_consume(&r1, 4);
|
||||
isc_region_consume(&r2, 4);
|
||||
INSIST(r1.length >= (unsigned) (hit_len + key_len));
|
||||
INSIST(r2.length >= (unsigned) (hit_len + key_len));
|
||||
order = isc_region_compare(&r1, &r2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
isc_region_consume(&r1, hit_len + key_len);
|
||||
isc_region_consume(&r2, hit_len + key_len);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
while (r1.length != 0 && r2.length != 0) {
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
order = dns_name_rdatacompare(&name1, &name2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
isc_region_consume(&r1, name_length(&name1));
|
||||
isc_region_consume(&r2, name_length(&name2));
|
||||
}
|
||||
return (isc_region_compare(&r1, &r2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_HIP_5_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ipseckey_45.c,v 1.7 2009/09/18 21:55:21 jinmei Exp $ */
|
||||
/* $Id: ipseckey_45.c,v 1.8 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_IPSECKEY_45_C
|
||||
#define RDATA_GENERIC_IPSECKEY_45_C
|
||||
|
|
@ -460,4 +460,43 @@ checknames_ipseckey(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_ipseckey(ARGS_COMPARE) {
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int order;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->rdclass == rdata2->rdclass);
|
||||
REQUIRE(rdata1->type == 45);
|
||||
REQUIRE(rdata1->length >= 3);
|
||||
REQUIRE(rdata2->length >= 3);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
if (memcmp(region1.base, region2.base, 3) != 0 || region1.base[1] != 3)
|
||||
return (isc_region_compare(®ion1, ®ion2));
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
isc_region_consume(®ion1, 3);
|
||||
isc_region_consume(®ion2, 3);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
order = dns_name_rdatacompare(&name1, &name2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
return (isc_region_compare(®ion1, ®ion2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_IPSECKEY_45_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: isdn_20.c,v 1.38 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: isdn_20.c,v 1.39 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 16:53:11 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -231,4 +231,9 @@ checknames_isdn(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_isdn(ARGS_COMPARE) {
|
||||
return (compare_isdn(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_ISDN_20_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: key_25.c,v 1.51 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: key_25.c,v 1.52 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
|
||||
|
|
@ -76,6 +76,7 @@ totext_key(ARGS_TOTEXT) {
|
|||
char buf[sizeof("64000")];
|
||||
unsigned int flags;
|
||||
unsigned char algorithm;
|
||||
char namebuf[DNS_NAME_FORMATSIZE];
|
||||
|
||||
REQUIRE(rdata->type == 25);
|
||||
REQUIRE(rdata->length != 0);
|
||||
|
|
@ -105,6 +106,15 @@ totext_key(ARGS_TOTEXT) {
|
|||
if ((flags & 0xc000) == 0xc000)
|
||||
return (ISC_R_SUCCESS);
|
||||
|
||||
if ((tctx->flags & DNS_STYLEFLAG_COMMENT) != 0 &&
|
||||
algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
dns_name_t name;
|
||||
dns_name_init(&name, NULL);
|
||||
dns_name_fromregion(&name, &sr);
|
||||
dns_name_format(&name, namebuf, sizeof(namebuf));
|
||||
} else
|
||||
namebuf[0] = 0;
|
||||
|
||||
/* key */
|
||||
if ((tctx->flags & DNS_STYLEFLAG_MULTILINE) != 0)
|
||||
RETERR(str_totext(" (", target));
|
||||
|
|
@ -127,12 +137,18 @@ totext_key(ARGS_TOTEXT) {
|
|||
dns_rdata_toregion(rdata, &tmpr);
|
||||
sprintf(buf, "%u", dst_region_computeid(&tmpr, algorithm));
|
||||
RETERR(str_totext(buf, target));
|
||||
if (algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
RETERR(str_totext(tctx->linebreak, target));
|
||||
RETERR(str_totext("; alg = ", target));
|
||||
RETERR(str_totext(namebuf, target));
|
||||
}
|
||||
}
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
fromwire_key(ARGS_FROMWIRE) {
|
||||
unsigned char algorithm;
|
||||
isc_region_t sr;
|
||||
|
||||
REQUIRE(type == 25);
|
||||
|
|
@ -146,6 +162,18 @@ fromwire_key(ARGS_FROMWIRE) {
|
|||
if (sr.length < 4)
|
||||
return (ISC_R_UNEXPECTEDEND);
|
||||
|
||||
algorithm = sr.base[3];
|
||||
RETERR(mem_tobuffer(target, sr.base, 4));
|
||||
isc_region_consume(&sr, 4);
|
||||
isc_buffer_forward(source, 4);
|
||||
|
||||
if (algorithm == DNS_KEYALG_PRIVATEDNS) {
|
||||
dns_name_t name;
|
||||
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
|
||||
dns_name_init(&name, NULL);
|
||||
RETERR(dns_name_fromwire(&name, source, dctx, options, target));
|
||||
}
|
||||
isc_buffer_activeregion(source, &sr);
|
||||
isc_buffer_forward(source, sr.length);
|
||||
return (mem_tobuffer(target, sr.base, sr.length));
|
||||
}
|
||||
|
|
@ -309,4 +337,9 @@ checknames_key(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_key(ARGS_COMPARE) {
|
||||
return (compare_key(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_KEY_25_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: keydata_65533.c,v 1.2 2009/06/30 02:52:32 each Exp $ */
|
||||
/* $Id: keydata_65533.c,v 1.3 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
#ifndef GENERIC_KEYDATA_65533_C
|
||||
#define GENERIC_KEYDATA_65533_C 1
|
||||
|
|
@ -369,4 +369,9 @@ checknames_keydata(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_keydata(ARGS_COMPARE) {
|
||||
return (compare_keydata(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* GENERIC_KEYDATA_65533_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: loc_29.c,v 1.49 2009/02/17 05:53:13 marka Exp $ */
|
||||
/* $Id: loc_29.c,v 1.50 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 18:13:09 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -796,4 +796,9 @@ checknames_loc(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_loc(ARGS_COMPARE) {
|
||||
return (compare_loc(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_LOC_29_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mb_7.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: mb_7.c,v 1.46 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 17:31:26 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -231,4 +231,9 @@ checknames_mb(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_mb(ARGS_COMPARE) {
|
||||
return (compare_mb(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MB_7_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: md_3.c,v 1.47 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: md_3.c,v 1.48 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 17:48:20 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -233,4 +233,9 @@ checknames_md(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_md(ARGS_COMPARE) {
|
||||
return (compare_md(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MD_3_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mf_4.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: mf_4.c,v 1.46 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 17:47:33 PST 2000 by brister */
|
||||
|
||||
|
|
@ -232,4 +232,9 @@ checknames_mf(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_mf(ARGS_COMPARE) {
|
||||
return (compare_mf(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MF_4_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mg_8.c,v 1.43 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: mg_8.c,v 1.44 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 17:49:21 PST 2000 by brister */
|
||||
|
||||
|
|
@ -227,4 +227,9 @@ checknames_mg(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_mg(ARGS_COMPARE) {
|
||||
return (compare_mg(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MG_8_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: minfo_14.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: minfo_14.c,v 1.46 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 17:45:32 PST 2000 by brister */
|
||||
|
||||
|
|
@ -321,4 +321,9 @@ checknames_minfo(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_minfo(ARGS_COMPARE) {
|
||||
return (compare_minfo(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MINFO_14_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mr_9.c,v 1.42 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: mr_9.c,v 1.43 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 21:30:35 EST 2000 by tale */
|
||||
|
||||
|
|
@ -228,4 +228,9 @@ checknames_mr(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_mr(ARGS_COMPARE) {
|
||||
return (compare_mr(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MR_9_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: mx_15.c,v 1.56 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: mx_15.c,v 1.57 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 18:05:46 PST 2000 by brister */
|
||||
|
||||
|
|
@ -316,4 +316,9 @@ checknames_mx(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_mx(ARGS_COMPARE) {
|
||||
return (compare_mx(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_MX_15_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ns_2.c,v 1.46 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: ns_2.c,v 1.47 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Wed Mar 15 18:15:00 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -248,4 +248,9 @@ checknames_ns(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_ns(ARGS_COMPARE) {
|
||||
return (compare_ns(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_NS_2_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsec3_50.c,v 1.6 2009/01/17 23:47:43 tbox Exp $ */
|
||||
/* $Id: nsec3_50.c,v 1.7 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2004 Nominet, Ltd.
|
||||
|
|
@ -478,4 +478,9 @@ checknames_nsec3(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_nsec3(ARGS_COMPARE) {
|
||||
return (compare_nsec3(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_NSEC3_50_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsec3param_51.c,v 1.6 2009/01/17 23:47:43 tbox Exp $ */
|
||||
/* $Id: nsec3param_51.c,v 1.7 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 2004 Nominet, Ltd.
|
||||
|
|
@ -311,4 +311,9 @@ checknames_nsec3param(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_nsec3param(ARGS_COMPARE) {
|
||||
return (compare_nsec3param(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_NSEC3PARAM_51_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsec_47.c,v 1.11 2008/07/15 23:47:21 tbox Exp $ */
|
||||
/* $Id: nsec_47.c,v 1.12 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 18:21:15 PST 2000 by brister */
|
||||
|
||||
|
|
@ -363,4 +363,36 @@ checknames_nsec(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_nsec(ARGS_COMPARE) {
|
||||
isc_region_t region1;
|
||||
isc_region_t region2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int order;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->rdclass == rdata2->rdclass);
|
||||
REQUIRE(rdata1->type == 47);
|
||||
REQUIRE(rdata1->length != 0);
|
||||
REQUIRE(rdata2->length != 0);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
|
||||
dns_rdata_toregion(rdata1, ®ion1);
|
||||
dns_rdata_toregion(rdata2, ®ion2);
|
||||
|
||||
dns_name_fromregion(&name1, ®ion1);
|
||||
dns_name_fromregion(&name2, ®ion2);
|
||||
|
||||
order = dns_name_rdatacompare(&name1, &name2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
isc_region_consume(®ion1, name_length(&name1));
|
||||
isc_region_consume(®ion2, name_length(&name2));
|
||||
|
||||
return (isc_region_compare(®ion1, ®ion2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_NSEC_47_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: null_10.c,v 1.42 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: null_10.c,v 1.43 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 13:57:50 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -189,4 +189,9 @@ checknames_null(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_null(ARGS_COMPARE) {
|
||||
return (compare_null(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_NULL_10_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nxt_30.c,v 1.63 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: nxt_30.c,v 1.64 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Wed Mar 15 18:21:15 PST 2000 by brister */
|
||||
|
||||
|
|
@ -326,4 +326,8 @@ checknames_nxt(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_nxt(ARGS_COMPARE) {
|
||||
return (compare_nxt(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_NXT_30_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: opt_41.c,v 1.33 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: opt_41.c,v 1.34 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 14:06:44 PST 2000 by gson */
|
||||
|
||||
|
|
@ -277,4 +277,9 @@ checknames_opt(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_opt(ARGS_COMPARE) {
|
||||
return (compare_opt(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_OPT_41_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: proforma.c,v 1.36 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: proforma.c,v 1.37 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_#_#_C
|
||||
#define RDATA_GENERIC_#_#_C
|
||||
|
|
@ -170,4 +170,21 @@ checknames_#(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_#(ARGS_COMPARE) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->rdclass == rdata2->rdclass);
|
||||
REQUIRE(rdata1->type == #);
|
||||
REQUIRE(rdata1->rdclass == #);
|
||||
REQUIRE(rdata1->length != 0); /* XXX */
|
||||
REQUIRE(rdata2->length != 0); /* XXX */
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
return (isc_region_compare(&r1, &r2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_#_#_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: ptr_12.c,v 1.43 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: ptr_12.c,v 1.44 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 14:05:12 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -288,4 +288,8 @@ checknames_ptr(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_ptr(ARGS_COMPARE) {
|
||||
return (compare_ptr(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_PTR_12_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rp_17.c,v 1.42 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: rp_17.c,v 1.43 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* RFC1183 */
|
||||
|
||||
|
|
@ -311,4 +311,8 @@ checknames_rp(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_rp(ARGS_COMPARE) {
|
||||
return (compare_rp(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_RP_17_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rrsig_46.c,v 1.10 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: rrsig_46.c,v 1.11 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 09:05:02 PST 2000 by gson */
|
||||
|
||||
|
|
@ -548,4 +548,47 @@ checknames_rrsig(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_rrsig(ARGS_COMPARE) {
|
||||
isc_region_t r1;
|
||||
isc_region_t r2;
|
||||
dns_name_t name1;
|
||||
dns_name_t name2;
|
||||
int order;
|
||||
|
||||
REQUIRE(rdata1->type == rdata2->type);
|
||||
REQUIRE(rdata1->rdclass == rdata2->rdclass);
|
||||
REQUIRE(rdata1->type == 46);
|
||||
REQUIRE(rdata1->length != 0);
|
||||
REQUIRE(rdata2->length != 0);
|
||||
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
|
||||
INSIST(r1.length > 18);
|
||||
INSIST(r2.length > 18);
|
||||
r1.length = 18;
|
||||
r2.length = 18;
|
||||
order = isc_region_compare(&r1, &r2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
dns_name_init(&name1, NULL);
|
||||
dns_name_init(&name2, NULL);
|
||||
dns_rdata_toregion(rdata1, &r1);
|
||||
dns_rdata_toregion(rdata2, &r2);
|
||||
isc_region_consume(&r1, 18);
|
||||
isc_region_consume(&r2, 18);
|
||||
dns_name_fromregion(&name1, &r1);
|
||||
dns_name_fromregion(&name2, &r2);
|
||||
order = dns_name_rdatacompare(&name1, &name2);
|
||||
if (order != 0)
|
||||
return (order);
|
||||
|
||||
isc_region_consume(&r1, name_length(&name1));
|
||||
isc_region_consume(&r2, name_length(&name2));
|
||||
|
||||
return (isc_region_compare(&r1, &r2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_RRSIG_46_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rt_21.c,v 1.46 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: rt_21.c,v 1.47 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Thu Mar 16 15:02:31 PST 2000 by brister */
|
||||
|
||||
|
|
@ -308,4 +308,9 @@ checknames_rt(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_rt(ARGS_COMPARE) {
|
||||
return (compare_rt(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_RT_21_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: sig_24.c,v 1.66 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: sig_24.c,v 1.67 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 09:05:02 PST 2000 by gson */
|
||||
|
||||
|
|
@ -575,4 +575,8 @@ checknames_sig(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_sig(ARGS_COMPARE) {
|
||||
return (compare_sig(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_SIG_24_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: soa_6.c,v 1.63 2009/02/16 23:48:04 tbox Exp $ */
|
||||
/* $Id: soa_6.c,v 1.64 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 15:18:32 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -441,4 +441,9 @@ checknames_soa(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_soa(ARGS_COMPARE) {
|
||||
return (compare_soa(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_SOA_6_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: spf_99.c,v 1.4 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: spf_99.c,v 1.5 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 15:40:00 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -235,4 +235,8 @@ checknames_spf(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_spf(ARGS_COMPARE) {
|
||||
return (compare_spf(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_SPF_99_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: sshfp_44.c,v 1.7 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: sshfp_44.c,v 1.8 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* RFC 4255 */
|
||||
|
||||
|
|
@ -259,4 +259,9 @@ checknames_sshfp(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_sshfp(ARGS_COMPARE) {
|
||||
return (compare_sshfp(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_SSHFP_44_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: tkey_249.c,v 1.57 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: tkey_249.c,v 1.58 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Reviewed: Thu Mar 16 17:35:30 PST 2000 by halley.
|
||||
|
|
@ -552,4 +552,8 @@ checknames_tkey(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
casecompare_tkey(ARGS_COMPARE) {
|
||||
return (compare_tkey(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_GENERIC_TKEY_249_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: txt_16.c,v 1.45 2008/02/15 23:46:51 tbox Exp $ */
|
||||
/* $Id: txt_16.c,v 1.46 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 15:40:00 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -235,4 +235,9 @@ checknames_txt(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline isc_result_t
|
||||
casecompare_txt(ARGS_COMPARE) {
|
||||
return (compare_txt(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_TXT_16_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: unspec_103.c,v 1.35 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: unspec_103.c,v 1.36 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
#ifndef RDATA_GENERIC_UNSPEC_103_C
|
||||
#define RDATA_GENERIC_UNSPEC_103_C
|
||||
|
|
@ -186,4 +186,9 @@ checknames_unspec(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_unspec(ARGS_COMPARE) {
|
||||
return (compare_unspec(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_UNSPEC_103_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: x25_19.c,v 1.39 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: x25_19.c,v 1.40 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 16:15:57 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -216,4 +216,9 @@ checknames_x25(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_x25(ARGS_COMPARE) {
|
||||
return (compare_x25(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_GENERIC_X25_19_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a_1.c,v 1.31 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: a_1.c,v 1.32 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* reviewed: Thu Mar 16 15:58:36 PST 2000 by brister */
|
||||
|
||||
|
|
@ -229,4 +229,9 @@ checknames_hs_a(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_hs_a(ARGS_COMPARE) {
|
||||
return (compare_hs_a(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_HS_4_A_1_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a6_38.c,v 1.54 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: a6_38.c,v 1.55 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* RFC2874 */
|
||||
|
||||
|
|
@ -458,4 +458,9 @@ checknames_in_a6(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_a6(ARGS_COMPARE) {
|
||||
return (compare_in_a6(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_A6_38_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: a_1.c,v 1.53 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: a_1.c,v 1.54 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -233,4 +233,9 @@ checknames_in_a(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_a(ARGS_COMPARE) {
|
||||
return (compare_in_a(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_A_1_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: aaaa_28.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: aaaa_28.c,v 1.46 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -230,4 +230,8 @@ checknames_in_aaaa(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_aaaa(ARGS_COMPARE) {
|
||||
return (compare_in_aaaa(rdata1, rdata2));
|
||||
}
|
||||
#endif /* RDATA_IN_1_AAAA_28_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: apl_42.c,v 1.14 2008/01/22 23:28:04 tbox Exp $ */
|
||||
/* $Id: apl_42.c,v 1.15 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* RFC3123 */
|
||||
|
||||
|
|
@ -450,4 +450,9 @@ checknames_in_apl(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_apl(ARGS_COMPARE) {
|
||||
return (compare_in_apl(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_APL_42_C */
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dhcid_49.c,v 1.5 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: dhcid_49.c,v 1.6 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* RFC 4701 */
|
||||
|
||||
|
|
@ -226,4 +226,9 @@ checknames_in_dhcid(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_dhcid(ARGS_COMPARE) {
|
||||
return (compare_in_dhcid(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_DHCID_49_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: kx_36.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: kx_36.c,v 1.46 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 17:24:54 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -285,4 +285,9 @@ checknames_in_kx(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_kx(ARGS_COMPARE) {
|
||||
return (compare_in_kx(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_KX_36_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: naptr_35.c,v 1.55 2009/01/21 23:47:27 tbox Exp $ */
|
||||
/* $Id: naptr_35.c,v 1.56 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -702,4 +702,9 @@ checknames_in_naptr(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_naptr(ARGS_COMPARE) {
|
||||
return (compare_in_naptr(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_NAPTR_35_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsap-ptr_23.c,v 1.38 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: nsap-ptr_23.c,v 1.39 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 10:16:02 PST 2000 by gson */
|
||||
|
||||
|
|
@ -242,4 +242,9 @@ checknames_in_nsap_ptr(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_nsap_ptr(ARGS_COMPARE) {
|
||||
return (compare_in_nsap_ptr(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_NSAP_PTR_23_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: nsap_22.c,v 1.42 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: nsap_22.c,v 1.43 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 10:41:07 PST 2000 by gson */
|
||||
|
||||
|
|
@ -252,4 +252,9 @@ checknames_in_nsap(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_nsap(ARGS_COMPARE) {
|
||||
return (compare_in_nsap(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_NSAP_22_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: px_26.c,v 1.43 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: px_26.c,v 1.44 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Mon Mar 20 10:44:27 PST 2000 */
|
||||
|
||||
|
|
@ -371,4 +371,9 @@ checknames_in_px(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_px(ARGS_COMPARE) {
|
||||
return (compare_in_px(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_PX_26_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: srv_33.c,v 1.45 2007/06/19 23:47:17 tbox Exp $ */
|
||||
/* $Id: srv_33.c,v 1.46 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 13:01:00 PST 2000 by bwelling */
|
||||
|
||||
|
|
@ -370,4 +370,9 @@ checknames_in_srv(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_srv(ARGS_COMPARE) {
|
||||
return (compare_in_srv(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_SRV_33_C */
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: wks_11.c,v 1.56 2009/02/16 23:48:04 tbox Exp $ */
|
||||
/* $Id: wks_11.c,v 1.57 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/* Reviewed: Fri Mar 17 15:01:49 PST 2000 by explorer */
|
||||
|
||||
|
|
@ -348,4 +348,9 @@ checknames_in_wks(ARGS_CHECKNAMES) {
|
|||
return (ISC_TRUE);
|
||||
}
|
||||
|
||||
static inline int
|
||||
casecompare_in_wks(ARGS_COMPARE) {
|
||||
return (compare_in_wks(rdata1, rdata2));
|
||||
}
|
||||
|
||||
#endif /* RDATA_IN_1_WKS_11_C */
|
||||
|
|
|
|||
117
lib/dns/zone.c
117
lib/dns/zone.c
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zone.c,v 1.535 2009/12/04 03:33:15 marka Exp $ */
|
||||
/* $Id: zone.c,v 1.536 2009/12/04 21:09:33 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -2021,6 +2021,113 @@ zone_check_glue(dns_zone_t *zone, dns_db_t *db, dns_name_t *name,
|
|||
return (answer);
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
zone_rrset_check_dup(dns_zone_t *zone, dns_name_t *owner,
|
||||
dns_rdataset_t *rdataset)
|
||||
{
|
||||
dns_rdataset_t tmprdataset;
|
||||
isc_result_t result;
|
||||
isc_boolean_t answer = ISC_TRUE;
|
||||
isc_boolean_t format = ISC_TRUE;
|
||||
int level = ISC_LOG_WARNING;
|
||||
char ownerbuf[DNS_NAME_FORMATSIZE];
|
||||
char typebuf[DNS_RDATATYPE_FORMATSIZE];
|
||||
unsigned int count1 = 0;
|
||||
|
||||
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKDUPRRFAIL))
|
||||
level = ISC_LOG_ERROR;
|
||||
|
||||
dns_rdataset_init(&tmprdataset);
|
||||
for (result = dns_rdataset_first(rdataset);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdataset_next(rdataset)) {
|
||||
dns_rdata_t rdata1 = DNS_RDATA_INIT;
|
||||
unsigned int count2 = 0;
|
||||
|
||||
count1++;
|
||||
dns_rdataset_current(rdataset, &rdata1);
|
||||
dns_rdataset_clone(rdataset, &tmprdataset);
|
||||
for (result = dns_rdataset_first(&tmprdataset);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdataset_next(&tmprdataset)) {
|
||||
dns_rdata_t rdata2 = DNS_RDATA_INIT;
|
||||
count2++;
|
||||
if (count1 >= count2)
|
||||
continue;
|
||||
dns_rdataset_current(&tmprdataset, &rdata2);
|
||||
if (dns_rdata_casecompare(&rdata1, &rdata2) == 0) {
|
||||
if (format) {
|
||||
dns_name_format(owner, ownerbuf,
|
||||
sizeof ownerbuf);
|
||||
dns_rdatatype_format(rdata1.type,
|
||||
typebuf,
|
||||
sizeof(typebuf));
|
||||
format = ISC_FALSE;
|
||||
}
|
||||
dns_zone_log(zone, level, "%s/%s has "
|
||||
"semantically identical records",
|
||||
ownerbuf, typebuf);
|
||||
if (level == ISC_LOG_ERROR)
|
||||
answer = ISC_FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
dns_rdataset_disassociate(&tmprdataset);
|
||||
if (!format)
|
||||
break;
|
||||
}
|
||||
return (answer);
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
zone_check_dup(dns_zone_t *zone, dns_db_t *db) {
|
||||
dns_dbiterator_t *dbiterator = NULL;
|
||||
dns_dbnode_t *node = NULL;
|
||||
dns_fixedname_t fixed;
|
||||
dns_name_t *name;
|
||||
dns_rdataset_t rdataset;
|
||||
dns_rdatasetiter_t *rdsit = NULL;
|
||||
isc_boolean_t ok = ISC_TRUE;
|
||||
isc_result_t result;
|
||||
|
||||
dns_fixedname_init(&fixed);
|
||||
name = dns_fixedname_name(&fixed);
|
||||
dns_rdataset_init(&rdataset);
|
||||
|
||||
result = dns_db_createiterator(db, 0, &dbiterator);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return (ISC_TRUE);
|
||||
|
||||
for (result = dns_dbiterator_first(dbiterator);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_dbiterator_next(dbiterator)) {
|
||||
result = dns_dbiterator_current(dbiterator, &node, name);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
continue;
|
||||
|
||||
result = dns_db_allrdatasets(db, node, NULL, 0, &rdsit);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
continue;
|
||||
|
||||
for (result = dns_rdatasetiter_first(rdsit);
|
||||
result == ISC_R_SUCCESS;
|
||||
result = dns_rdatasetiter_next(rdsit)) {
|
||||
dns_rdatasetiter_current(rdsit, &rdataset);
|
||||
if (!zone_rrset_check_dup(zone, name, &rdataset))
|
||||
ok = ISC_FALSE;
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
}
|
||||
dns_rdatasetiter_destroy(&rdsit);
|
||||
dns_db_detachnode(db, &node);
|
||||
}
|
||||
|
||||
if (node != NULL)
|
||||
dns_db_detachnode(db, &node);
|
||||
dns_dbiterator_destroy(&dbiterator);
|
||||
|
||||
return (ok);
|
||||
}
|
||||
|
||||
static isc_boolean_t
|
||||
integrity_checks(dns_zone_t *zone, dns_db_t *db) {
|
||||
dns_dbiterator_t *dbiterator = NULL;
|
||||
|
|
@ -2088,6 +2195,7 @@ integrity_checks(dns_zone_t *zone, dns_db_t *db) {
|
|||
result = dns_rdataset_next(&rdataset);
|
||||
}
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
goto next;
|
||||
|
||||
checkmx:
|
||||
result = dns_db_findrdataset(db, node, NULL, dns_rdatatype_mx,
|
||||
|
|
@ -3348,6 +3456,13 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
|
|||
result = DNS_R_BADZONE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (zone->type == dns_zone_master &&
|
||||
DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKDUPRR) &&
|
||||
!zone_check_dup(zone, db)) {
|
||||
result = DNS_R_BADZONE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (zone->db != NULL) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: namedconf.c,v 1.112 2009/12/03 23:18:17 each Exp $ */
|
||||
/* $Id: namedconf.c,v 1.113 2009/12/04 21:09:34 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
|
|
@ -523,6 +523,7 @@ static cfg_tuplefielddef_t checknames_fields[] = {
|
|||
{ "mode", &cfg_type_checkmode, 0 },
|
||||
{ NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
static cfg_type_t cfg_type_checknames = {
|
||||
"checknames", cfg_parse_tuple, cfg_print_tuple, cfg_doc_tuple, &cfg_rep_tuple,
|
||||
checknames_fields
|
||||
|
|
@ -1119,6 +1120,7 @@ zone_clauses[] = {
|
|||
{ "also-notify", &cfg_type_portiplist, 0 },
|
||||
{ "alt-transfer-source", &cfg_type_sockaddr4wild, 0 },
|
||||
{ "alt-transfer-source-v6", &cfg_type_sockaddr6wild, 0 },
|
||||
{ "check-dup-records", &cfg_type_checkmode, 0 },
|
||||
{ "check-integrity", &cfg_type_boolean, 0 },
|
||||
{ "check-mx", &cfg_type_checkmode, 0 },
|
||||
{ "check-mx-cname", &cfg_type_checkmode, 0 },
|
||||
|
|
|
|||
Loading…
Reference in a new issue