+1586. [func] "check-names" is now implemented.
+
1585. [placeholder] rt10497
1584. [placeholder] rt10461
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: named-checkzone.c,v 1.27 2004/01/07 05:27:17 marka Exp $ */
+/* $Id: named-checkzone.c,v 1.28 2004/02/27 20:41:41 marka Exp $ */
#include <config.h>
usage(void) {
fprintf(stderr,
"usage: named-checkzone [-djqvD] [-c class] [-o output] "
- "[-t directory] [-w directory] zonename filename\n");
+ "[-t directory] [-w directory] [-k option] zonename filename\n");
exit(1);
}
char *classname = classname_in;
const char *workdir = NULL;
- while ((c = isc_commandline_parse(argc, argv, "c:dijn:qst:o:vw:D")) != EOF) {
+ while ((c = isc_commandline_parse(argc, argv, "c:dijk:n:qst:o:vw:D")) != EOF) {
switch (c) {
case 'c':
classname = isc_commandline_argument;
DNS_ZONEOPT_FATALNS;
break;
+ case 'k':
+ if (!strcmp(isc_commandline_argument, "check-names")) {
+ zone_options |= DNS_ZONEOPT_CHECKNAMES;
+ } else if (!strcmp(isc_commandline_argument,
+ "check-names-fail")) {
+ zone_options |= DNS_ZONEOPT_CHECKNAMES |
+ DNS_ZONEOPT_CHECKNAMESFAIL;
+ }
+ break;
+
case 'q':
quiet++;
break;
- WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named-checkzone.docbook,v 1.9 2004/01/07 05:27:17 marka Exp $ -->
+<!-- $Id: named-checkzone.docbook,v 1.10 2004/02/27 20:41:41 marka Exp $ -->
<refentry>
<refentryinfo>
<arg><option>-q</option></arg>
<arg><option>-v</option></arg>
<arg><option>-c <replaceable class="parameter">class</replaceable></option></arg>
+ <arg><option>-k <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>-t <replaceable class="parameter">directory</replaceable></option></arg>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>-k <replaceable class="parameter">mode</replaceable></term>
+ <listitem>
+ <para>
+ Perform <command>"check-name"</command> checks with the specified failure mode.
+ Possible modes are <command>"fail"</command>,
+ <command>"warn"</command> (default) and
+ <command>"ignore"</command>.
+ </para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>-n <replaceable class="parameter">mode</replaceable></term>
<listitem>
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.c,v 1.43 2004/02/17 03:40:19 marka Exp $ */
+/* $Id: config.c,v 1.44 2004/02/27 20:41:41 marka Exp $ */
#include <config.h>
max-cache-ttl 604800; /* 1 week */\n\
transfer-format many-answers;\n\
max-cache-size 0;\n\
- check-names master ignore;\n\
- check-names slave ignore;\n\
+ check-names master fail;\n\
+ check-names slave warn;\n\
check-names response ignore;\n\
enable-dnssec no; /* Make yes for 9.4. */ \n\
\n\
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: query.c,v 1.254 2004/02/17 03:40:20 marka Exp $ */
+/* $Id: query.c,v 1.255 2004/02/27 20:41:41 marka Exp $ */
#include <config.h>
version = NULL;
need_wildcardproof = ISC_FALSE;
+ if (client->view->checknames &&
+ !dns_rdata_checkowner(client->query.qname,
+ client->message->rdclass,
+ qtype, ISC_FALSE)) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char typename[DNS_RDATATYPE_FORMATSIZE];
+ char classname[DNS_RDATACLASS_FORMATSIZE];
+
+ dns_name_format(client->query.qname, namebuf, sizeof(namebuf));
+ dns_rdatatype_format(qtype, typename, sizeof(typename));
+ dns_rdataclass_format(client->message->rdclass, classname,
+ sizeof(classname));
+ ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
+ NS_LOGMODULE_QUERY, ISC_LOG_ERROR,
+ "check-names failure %s/%s/%s", namebuf,
+ typename, classname);
+ QUERY_ERROR(DNS_R_REFUSED);
+ goto cleanup;
+ }
+
/*
* First we must find the right database.
*/
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.413 2004/02/24 03:31:08 marka Exp $ */
+/* $Id: server.c,v 1.414 2004/02/27 20:41:42 marka Exp $ */
#include <config.h>
dns_dispatch_t *dispatch6 = NULL;
isc_boolean_t reused_cache = ISC_FALSE;
int i;
- char *str;
+ const char *str;
dns_order_t *order = NULL;
isc_uint32_t udpsize;
+ unsigned int check = 0;
REQUIRE(DNS_VIEW_VALID(view));
dns_cache_detach(&cache);
+ /*
+ * Check-names.
+ */
+ obj = NULL;
+ str = "";
+ result = ns_config_get(maps, "check-names", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ for (element = cfg_list_first(obj);
+ element != NULL;
+ element = cfg_list_next(element)) {
+ cfg_obj_t *value, *type;
+ value = cfg_listelt_value(element);
+ type = cfg_tuple_get(value, "type");
+ if (strcasecmp(cfg_obj_asstring(type), "response") == 0) {
+ str = cfg_obj_asstring(cfg_tuple_get(value, "mode"));
+ break;
+ }
+ }
+
+ if (strcasecmp(str, "fail") == 0) {
+ check = DNS_RESOLVER_CHECKNAMES |
+ DNS_RESOLVER_CHECKNAMESFAIL;
+ view->checknames = ISC_TRUE;
+ } else if (strcasecmp(str, "warn") == 0) {
+ check = DNS_RESOLVER_CHECKNAMES;
+ view->checknames = ISC_FALSE;
+ } else if (strcasecmp(str, "ignore") == 0) {
+ check = 0;
+ view->checknames = ISC_FALSE;
+ } else
+ INSIST(0);
+
/*
* Resolver.
*
}
CHECK(dns_view_createresolver(view, ns_g_taskmgr, 31,
ns_g_socketmgr, ns_g_timermgr,
- 0, ns_g_dispatchmgr,
+ check, ns_g_dispatchmgr,
dispatch4, dispatch6));
if (dispatch4 != NULL)
dns_dispatch_detach(&dispatch4);
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.c,v 1.107 2004/02/03 00:59:03 marka Exp $ */
+/* $Id: update.c,v 1.108 2004/02/27 20:41:42 marka Exp $ */
#include <config.h>
FAILC(DNS_R_FORMERR,
"meta-RR in update");
}
+ result = dns_zone_checknames(zone, name, &rdata);
+ if (result != ISC_R_SUCCESS)
+ FAIL(DNS_R_REFUSED);
} else if (update_class == dns_rdataclass_any) {
if (ttl != 0 || rdata.length != 0 ||
(dns_rdatatype_ismeta(rdata.type) &&
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.c,v 1.108 2004/01/05 06:56:44 marka Exp $ */
+/* $Id: zoneconf.c,v 1.109 2004/02/27 20:41:42 marka Exp $ */
#include <config.h>
return (strtoargvsub(mctx, s, argcp, argvp, 0));
}
+static void
+checknames(dns_zonetype_t ztype, cfg_obj_t **maps, cfg_obj_t **objp) {
+ const char *zone = NULL;
+ cfg_listelt_t *element;
+ cfg_obj_t *type;
+ cfg_obj_t *value;
+ cfg_obj_t *check;
+ int i;
+
+ switch (ztype) {
+ case dns_zone_slave: zone = "slave"; break;
+ case dns_zone_master: zone = "master"; break;
+ default:
+ INSIST(0);
+ }
+ for (i = 0; maps[i] != NULL; i++) {
+ check = NULL;
+ cfg_map_get(maps[i], "check-names", &check);
+ if (check != NULL && !cfg_obj_islist(check)) {
+ *objp = check;
+ return;
+ }
+ for (element = cfg_list_first(check);
+ element != NULL;
+ element = cfg_list_next(element)) {
+ value = cfg_listelt_value(element);
+ type = cfg_tuple_get(value, "type");
+ if (strcasecmp(cfg_obj_asstring(type), zone) == 0) {
+ *objp = cfg_tuple_get(value, "mode");
+ return;
+ }
+ }
+ }
+}
+
isc_result_t
ns_zone_configure(cfg_obj_t *config, cfg_obj_t *vconfig, cfg_obj_t *zconfig,
ns_aclconfctx_t *ac, dns_zone_t *zone)
isc_boolean_t multi;
isc_boolean_t alt;
dns_view_t *view;
+ isc_boolean_t check = ISC_FALSE, fail = ISC_FALSE;
i = 0;
if (zconfig != NULL) {
INSIST(result == ISC_R_SUCCESS);
dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,
cfg_obj_asboolean(obj));
+
+ checknames(ztype, maps, &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_CHECKNAMES, check);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL, fail);
}
/*
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsupdate.c,v 1.123 2003/07/25 02:22:23 marka Exp $ */
+/* $Id: nsupdate.c,v 1.124 2004/02/27 20:41:42 marka Exp $ */
#include <config.h>
result = isc_buffer_allocate(mctx, &buf, MAXWIRE);
check_result(result, "isc_buffer_allocate");
result = dns_rdata_fromtext(rdata, rdataclass, rdatatype, lex,
- rn, ISC_FALSE, mctx, buf,
+ rn, 0, mctx, buf,
&callbacks);
isc_lex_destroy(&lex);
if (result == ISC_R_SUCCESS) {
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdata_test.c,v 1.39 2003/09/30 05:56:02 marka Exp $ */
+/* $Id: rdata_test.c,v 1.40 2004/02/27 20:41:42 marka Exp $ */
#include <config.h>
dns_rdata_init(&rdata);
isc_buffer_init(&dbuf, inbuf, sizeof(inbuf));
result = dns_rdata_fromtext(&rdata, class, type, lex,
- NULL, ISC_FALSE, mctx, &dbuf,
+ NULL, 0, mctx, &dbuf,
NULL);
if (result != ISC_R_SUCCESS) {
fprintf(stdout,
isc_buffer_init(&dbuf, inbuf, sizeof(inbuf));
dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_ANY);
result = dns_rdata_fromwire(&rdata, class, type, &wbuf,
- &dctx, ISC_FALSE, &dbuf);
+ &dctx, 0, &dbuf);
dns_decompress_invalidate(&dctx);
if (result != ISC_R_SUCCESS) {
fprintf(stdout,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-# $Id: conf.sh.in,v 1.25 2003/09/30 05:56:06 marka Exp $
+# $Id: conf.sh.in,v 1.26 2004/02/27 20:41:43 marka Exp $
#
# Common configuration data for system tests, to be sourced into
# The "stress" test is not run by default since it creates enough
# load on the machine to make it unusable to other users.
# v6synth
-SUBDIRS="cacheclean dnssec forward glue ixfr limits lwresd \
+SUBDIRS="cacheclean checknames dnssec forward glue ixfr limits lwresd \
masterfile notify nsupdate resolver sortlist stub tkey \
unknown upforwd views xfer xferquota"
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gen.c,v 1.70 2003/07/25 00:01:05 marka Exp $ */
+/* $Id: gen.c,v 1.71 2004/02/27 20:41:43 marka Exp $ */
#include <config.h>
#include "gen-unix.h"
#endif
-#define FROMTEXTARGS "rdclass, type, lexer, origin, downcase, target, callbacks"
+#define FROMTEXTARGS "rdclass, type, lexer, origin, options, target, callbacks"
#define FROMTEXTCLASS "rdclass"
#define FROMTEXTTYPE "type"
#define FROMTEXTDEF "result = DNS_R_UNKNOWN"
#define TOTEXTTYPE "rdata->type"
#define TOTEXTDEF "use_default = ISC_TRUE"
-#define FROMWIREARGS "rdclass, type, source, dctx, downcase, target"
+#define FROMWIREARGS "rdclass, type, source, dctx, options, target"
#define FROMWIRECLASS "rdclass"
#define FROMWIRETYPE "type"
#define FROMWIREDEF "use_default = ISC_TRUE"
#define DIGESTTYPE "rdata->type"
#define DIGESTDEF "use_default = ISC_TRUE"
+#define CHECKOWNERARGS "name, rdclass, type, wildcard"
+#define CHECKOWNERCLASS "rdclass"
+#define CHECKOWNERTYPE "type"
+#define CHECKOWNERDEF "result = ISC_TRUE"
+
+#define CHECKNAMESARGS "rdata, owner, bad"
+#define CHECKNAMESCLASS "rdata->rdclass"
+#define CHECKNAMESTYPE "rdata->type"
+#define CHECKNAMESDEF "result = ISC_TRUE"
+
const char copyright[] =
"/*\n"
" * Copyright (C) 1998%s Internet Software Consortium.\n"
doswitch("DIGESTSWITCH", "digest",
DIGESTARGS, DIGESTTYPE,
DIGESTCLASS, DIGESTDEF);
+ doswitch("CHECKOWNERSWITCH", "checkowner",
+ CHECKOWNERARGS, CHECKOWNERTYPE,
+ CHECKOWNERCLASS, CHECKOWNERDEF);
+ doswitch("CHECKNAMESSWITCH", "checknames",
+ CHECKNAMESARGS, CHECKNAMESTYPE,
+ CHECKNAMESCLASS, CHECKNAMESDEF);
/*
* From here down, we are processing the rdata names and
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: master.h,v 1.36 2002/07/19 02:34:56 marka Exp $ */
+/* $Id: master.h,v 1.37 2004/02/27 20:41:45 marka Exp $ */
#ifndef DNS_MASTER_H
#define DNS_MASTER_H 1
* they are an address */
#define DNS_MASTER_FATALNS 0x00000080 /* Treat DNS_MASTER_CHECKNS
* matches as fatal */
+#define DNS_MASTER_CHECKNAMES 0x00000100
+#define DNS_MASTER_CHECKNAMESFAIL 0x00000200
ISC_LANG_BEGINDECLS
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: name.h,v 1.104 2003/10/25 00:31:12 jinmei Exp $ */
+/* $Id: name.h,v 1.105 2004/02/27 20:41:45 marka Exp $ */
#ifndef DNS_NAME_H
#define DNS_NAME_H 1
#define DNS_NAMEATTR_NCACHE 0x0400 /* Used by resolver. */
#define DNS_NAMEATTR_CHAINING 0x0800 /* Used by resolver. */
#define DNS_NAMEATTR_CHASE 0x1000 /* Used by resolver. */
-#define DNS_NAMEATTR_WILDCARD 0x2000 /* Used by server */
+#define DNS_NAMEATTR_WILDCARD 0x2000 /* Used by server. */
+
+#define DNS_NAME_DOWNCASE 0x0001
+#define DNS_NAME_CHECKNAMES 0x0002 /* Used by rdata. */
+#define DNS_NAME_CHECKNAMESFAIL 0x0004 /* Used by rdata. */
+#define DNS_NAME_CHECKREVERSE 0x0008 /* Used by rdata. */
LIBDNS_EXTERNAL_DATA extern dns_name_t *dns_rootname;
LIBDNS_EXTERNAL_DATA extern dns_name_t *dns_wildcardname;
isc_result_t
dns_name_fromwire(dns_name_t *name, isc_buffer_t *source,
- dns_decompress_t *dctx, isc_boolean_t downcase,
+ dns_decompress_t *dctx, unsigned int options,
isc_buffer_t *target);
/*
* Copy the possibly-compressed name at source (active region) into target,
* Notes:
* Decompression policy is controlled by 'dctx'.
*
- * If 'downcase' is true, any uppercase letters in 'source' will be
+ * If DNS_NAME_DOWNCASE is set, any uppercase letters in 'source' will be
* downcased when they are copied into 'target'.
*
* Security:
* If result is success:
* If 'target' is not NULL, 'name' is attached to it.
*
- * Uppercase letters are downcased in the copy iff. 'downcase' is
- * true.
+ * Uppercase letters are downcased in the copy iff
+ * DNS_NAME_DOWNCASE is set in options.
*
* The current location in source is advanced, and the used space
* in target is updated.
isc_result_t
dns_name_fromtext(dns_name_t *name, isc_buffer_t *source,
- dns_name_t *origin, isc_boolean_t downcase,
+ dns_name_t *origin, unsigned int options,
isc_buffer_t *target);
/*
* Convert the textual representation of a DNS name at source
* unless 'origin' is NULL, in which case relative domain names
* will remain relative.
*
- * If 'downcase' is true, any uppercase letters in 'source' will be
- * downcased when they are copied into 'target'.
+ * If DNS_NAME_DOWNCASE is set in 'options', any uppercase letters
+ * in 'source' will be downcased when they are copied into 'target'.
*
* Requires:
*
* If result is success:
* If 'target' is not NULL, 'name' is attached to it.
*
- * Uppercase letters are downcased in the copy iff. 'downcase' is
- * true.
+ * Uppercase letters are downcased in the copy iff
+ * DNS_NAME_DOWNCASE is set in 'options'.
*
* The current location in source is advanced, and the used space
* in target is updated.
* ISC_R_NOSPACE
*/
+isc_boolean_t
+dns_name_ishostname(const dns_name_t *name, isc_boolean_t wildcard);
+/*
+ * Return if 'name' is a valid hostname. RFC 952 / RFC 1123.
+ * If 'wildcard' is ISC_TRUE then allow the first label of name to
+ * be a wildcard.
+ * The root is also accepted.
+ *
+ * Requires:
+ * 'name' to be valid.
+ */
+
+
+isc_boolean_t
+dns_name_ismailbox(const dns_name_t *name);
+/*
+ * Return if 'name' is a valid mailbox. RFC 821.
+ *
+ * Requires:
+ * 'name' to be valid.
+ */
+
ISC_LANG_ENDDECLS
/***
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdata.h,v 1.58 2003/10/17 03:46:45 marka Exp $ */
+/* $Id: rdata.h,v 1.59 2004/02/27 20:41:45 marka Exp $ */
#ifndef DNS_RDATA_H
#define DNS_RDATA_H 1
#include <isc/lang.h>
#include <dns/types.h>
+#include <dns/name.h>
ISC_LANG_BEGINDECLS
/* Output explanatory comments. */
#define DNS_STYLEFLAG_COMMENT 0x00000002U
+#define DNS_RDATA_DOWNCASE DNS_NAME_DOWNCASE
+#define DNS_RDATA_CHECKNAMES DNS_NAME_CHECKNAMES
+#define DNS_RDATA_CHECKNAMESFAIL DNS_NAME_CHECKNAMESFAIL
+#define DNS_RDATA_CHECKREVERSE DNS_NAME_CHECKREVERSE
+
/***
*** Initialization
***/
isc_result_t
dns_rdata_fromwire(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
dns_rdatatype_t type, isc_buffer_t *source,
- dns_decompress_t *dctx,
- isc_boolean_t downcase,
+ dns_decompress_t *dctx, unsigned int options,
isc_buffer_t *target);
/*
* Copy the possibly-compressed rdata at source into the target region.
* Notes:
* Name decompression policy is controlled by 'dctx'.
*
- * If 'downcase' is true, any uppercase letters in domain names in
- * 'source' will be downcased when they are copied into 'target'.
+ * 'options'
+ * DNS_RDATA_DOWNCASE downcase domain names when they are copied
+ * into target.
*
* Requires:
*
isc_result_t
dns_rdata_fromtext(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
dns_rdatatype_t type, isc_lex_t *lexer, dns_name_t *origin,
- isc_boolean_t downcase, isc_mem_t *mctx,
+ unsigned int options, isc_mem_t *mctx,
isc_buffer_t *target, dns_rdatacallbacks_t *callbacks);
/*
* Convert the textual representation of a DNS rdata into uncompressed wire
* Relative domain names in the rdata will have 'origin' appended to them.
* A NULL origin implies "origin == dns_rootname".
*
- * If 'downcase' is true, any uppercase letters in domain names in
- * 'source' will be downcased when they are copied into 'target'.
+ *
+ * 'options'
+ * DNS_RDATA_DOWNCASE downcase domain names when they are copied
+ * into target.
+ * DNS_RDATA_CHECKNAMES perform checknames checks.
+ * DNS_RDATA_CHECKNAMESFAIL fail if the checknames check fail. If
+ * not set a warning will be issued.
+ * DNS_RDATA_CHECKREVERSE this should set if the owner name ends
+ * in IP6.ARPA, IP6.INT or IN-ADDR.ARPA.
*
* Requires:
*
* The type covered.
*/
+isc_boolean_t
+dns_rdata_checkowner(dns_name_t* name, dns_rdataclass_t rdclass,
+ dns_rdatatype_t type, isc_boolean_t wildcard);
+/*
+ * Returns whether this is a valid ownername for this <type,class>.
+ * If wildcard is true allow the first label to be a wildcard if
+ * appropriate.
+ *
+ * Requires:
+ * 'name' is a valid name.
+ */
+
+isc_boolean_t
+dns_rdata_checknames(dns_rdata_t *rdata, dns_name_t *owner, dns_name_t *bad);
+/*
+ * Returns whether 'rdata' contains valid domain names. The checks are
+ * sensitive to the owner name.
+ *
+ * If 'bad' is non-NULL and a domain name fails the check the
+ * the offending name will be return in 'bad' by cloning from
+ * the 'rdata' contents.
+ *
+ * Requires:
+ * 'rdata' to be valid.
+ * 'owner' to be valid.
+ * 'bad' to be NULL or valid.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_RDATA_H */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdataset.h,v 1.49 2004/01/14 02:06:50 marka Exp $ */
+/* $Id: rdataset.h,v 1.50 2004/02/27 20:41:46 marka Exp $ */
#ifndef DNS_RDATASET_H
#define DNS_RDATASET_H 1
#define DNS_RDATASETATTR_CHASE 0x1000 /* Used by resolver. */
#define DNS_RDATASETATTR_NXDOMAIN 0x2000
#define DNS_RDATASETATTR_NOQNAME 0x4000
+#define DNS_RDATASETATTR_CHECKNAMES 0x8000 /* Used by resolver. */
/*
* _OMITDNSSEC:
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.h,v 1.38 2004/01/14 02:06:50 marka Exp $ */
+/* $Id: resolver.h,v 1.39 2004/02/27 20:41:46 marka Exp $ */
#ifndef DNS_RESOLVER_H
#define DNS_RESOLVER_H 1
* _dns_resolver_create()).
*/
+#define DNS_RESOLVER_CHECKNAMES 0x01
+#define DNS_RESOLVER_CHECKNAMESFAIL 0x02
+
isc_result_t
dns_resolver_create(dns_view_t *view,
isc_taskmgr_t *taskmgr, unsigned int ntasks,
dns_dispatch_t *dispatchv4,
dns_dispatch_t *dispatchv6,
dns_resolver_t **resp);
+
/*
* Create a resolver.
*
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.h,v 1.100 2004/01/14 02:06:50 marka Exp $ */
+/* $Id: result.h,v 1.101 2004/02/27 20:41:46 marka Exp $ */
#ifndef DNS_RESULT_H
#define DNS_RESULT_H 1
#define DNS_R_EMPTYWILD (ISC_RESULTCLASS_DNS + 93)
#define DNS_R_BADBITMAP (ISC_RESULTCLASS_DNS + 94)
#define DNS_R_FROMWILDCARD (ISC_RESULTCLASS_DNS + 95)
+#define DNS_R_BADOWNERNAME (ISC_RESULTCLASS_DNS + 96)
+#define DNS_R_BADNAME (ISC_RESULTCLASS_DNS + 97)
-#define DNS_R_NRESULTS 96 /* Number of results */
+#define DNS_R_NRESULTS 98 /* Number of results */
/*
* DNS wire format rcodes.
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: view.h,v 1.88 2004/02/17 03:40:23 marka Exp $ */
+/* $Id: view.h,v 1.89 2004/02/27 20:41:46 marka Exp $ */
#ifndef DNS_VIEW_H
#define DNS_VIEW_H 1
dns_namelist_t * delonly;
isc_boolean_t rootdelonly;
dns_namelist_t * rootexclude;
+ isc_boolean_t checknames;
/*
* Configurable data for server use only,
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.h,v 1.124 2004/01/07 05:27:17 marka Exp $ */
+/* $Id: zone.h,v 1.125 2004/02/27 20:41:46 marka Exp $ */
#ifndef DNS_ZONE_H
#define DNS_ZONE_H 1
#define DNS_ZONEOPT_FATALNS 0x00000100U /* DNS_ZONEOPT_CHECKNS is fatal */
#define DNS_ZONEOPT_MULTIMASTER 0x00000200U /* this zone has multiple masters */
#define DNS_ZONEOPT_USEALTXFRSRC 0x00000400U /* use alternate transfer sources */
+#define DNS_ZONEOPT_CHECKNAMES 0x00000800U /* check-names */
+#define DNS_ZONEOPT_CHECKNAMESFAIL 0x00001000U /* fatal check-name failures */
#ifndef NOMINUM_PUBLIC
/*
* 'buf' to be non NULL.
*/
+isc_result_t
+dns_zone_checknames(dns_zone_t *zone, dns_name_t *name, dns_rdata_t *rdata);
+/*
+ * Check if this record meets the check-names policy.
+ *
+ * Requires:
+ * 'zone' to be valid.
+ * 'name' to be valid.
+ * 'rdata' to be valid.
+ *
+ * Returns:
+ * DNS_R_SUCCESS passed checks.
+ * DNS_R_BADOWNERNAME failed ownername checks.
+ * DNS_R_BADNAME failed rdata checks.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_ZONE_H */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: journal.c,v 1.84 2002/07/22 02:06:04 marka Exp $ */
+/* $Id: journal.c,v 1.85 2004/02/27 20:41:43 marka Exp $ */
#include <config.h>
isc_buffer_setactive(&j->it.source,
j->it.source.used - j->it.source.current);
CHECK(dns_name_fromwire(&j->it.name, &j->it.source,
- &j->it.dctx, ISC_FALSE, &j->it.target));
+ &j->it.dctx, 0, &j->it.target));
/*
* Check that the RR header is there, and parse it.
dns_rdata_reset(&j->it.rdata);
CHECK(dns_rdata_fromwire(&j->it.rdata, rdclass,
rdtype, &j->it.source, &j->it.dctx,
- ISC_FALSE, &j->it.target));
+ 0, &j->it.target));
j->it.ttl = ttl;
j->it.xpos += sizeof(journal_rawrrhdr_t) + rrhdr.size;
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: master.c,v 1.146 2003/09/30 05:56:11 marka Exp $ */
+/* $Id: master.c,v 1.147 2004/02/27 20:41:43 marka Exp $ */
#include <config.h>
"dns_master_load", \
source, line, dns_result_totext(result))
+
+static unsigned char in_addr_arpa_data[] = "\007IN-ADDR\004ARPA";
+static unsigned char in_addr_arpa_offsets[] = { 0, 8, 13 };
+static const dns_name_t in_addr_arpa =
+{
+ DNS_NAME_MAGIC,
+ in_addr_arpa_data, 14, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ in_addr_arpa_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+static unsigned char ip6_int_data[] = "\003IP6\003INT";
+static unsigned char ip6_int_offsets[] = { 0, 4, 8 };
+static const dns_name_t ip6_int =
+{
+ DNS_NAME_MAGIC,
+ ip6_int_data, 9, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ ip6_int_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+static unsigned char ip6_arpa_data[] = "\003IP6\004ARPA";
+static unsigned char ip6_arpa_offsets[] = { 0, 4, 9 };
+static const dns_name_t ip6_arpa =
+{
+ DNS_NAME_MAGIC,
+ ip6_arpa_data, 10, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ ip6_arpa_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+
static inline isc_result_t
gettoken(isc_lex_t *lex, unsigned int options, isc_token_t *token,
isc_boolean_t eol, dns_rdatacallbacks_t *callbacks)
isc_buffer_add(&buffer, strlen(lhsbuf));
isc_buffer_setactive(&buffer, strlen(lhsbuf));
result = dns_name_fromtext(owner, &buffer, ictx->origin,
- ISC_FALSE, NULL);
+ 0, NULL);
if (result != ISC_R_SUCCESS)
goto error_cleanup;
isc_buffer_init(&target, target_mem, target_size);
result = dns_rdata_fromtext(&rdata, lctx->zclass, type,
- lctx->lex, ictx->origin, ISC_FALSE,
+ lctx->lex, ictx->origin, 0,
lctx->mctx, &target, callbacks);
RUNTIME_CHECK(isc_lex_close(lctx->lex) == ISC_R_SUCCESS);
if (result != ISC_R_SUCCESS)
isc_stdtime_t now;
char classname1[DNS_RDATACLASS_FORMATSIZE];
char classname2[DNS_RDATACLASS_FORMATSIZE];
+ unsigned int options = 0;
REQUIRE(DNS_LCTX_VALID(lctx));
callbacks = lctx->callbacks;
isc_buffer_init(&target, target_mem, target_size);
target_save = target;
+ if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0)
+ options |= DNS_RDATA_CHECKNAMES;
+ if ((lctx->options & DNS_MASTER_CHECKNAMESFAIL) != 0)
+ options |= DNS_RDATA_CHECKNAMESFAIL;
source = isc_lex_getsourcename(lctx->lex);
do {
initialws = ISC_FALSE;
}
}
+ /*
+ * Check owner name.
+ */
+ options &= ~DNS_RDATA_CHECKREVERSE;
+ if ((lctx->options & DNS_MASTER_CHECKNAMES) != 0) {
+ isc_boolean_t ok;
+ dns_name_t *name;
+
+ name = (ictx->glue != NULL) ? ictx-> glue :
+ ictx->current;
+ ok = dns_rdata_checkowner(name, lctx->zclass, type,
+ ISC_TRUE);
+ if (!ok) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ const char *desc;
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ result = DNS_R_BADOWNERNAME;
+ desc = dns_result_totext(result);
+ if ((lctx->options & DNS_MASTER_CHECKNAMESFAIL) != 0) {
+ (*callbacks->error)(callbacks,
+ "%s:%lu: %s: %s",
+ source, line,
+ namebuf, desc);
+ if (MANYERRS(lctx, result)) {
+ SETRESULT(lctx, result);
+ } else if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ } else {
+ (*callbacks->warn)(callbacks,
+ "%s:%lu: %s: %s",
+ source, line,
+ namebuf, desc);
+ }
+ }
+ if (type == dns_rdatatype_ptr &&
+ (dns_name_issubdomain(name, &in_addr_arpa) ||
+ dns_name_issubdomain(name, &ip6_arpa) ||
+ dns_name_issubdomain(name, &ip6_int)))
+ options |= DNS_RDATA_CHECKREVERSE;
+ }
+
/*
* Read rdata contents.
*/
target_ft = target;
result = dns_rdata_fromtext(&rdata[rdcount], lctx->zclass,
type, lctx->lex, ictx->origin,
- ISC_FALSE, lctx->mctx, &target,
+ options, lctx->mctx, &target,
callbacks);
if (MANYERRS(lctx, result)) {
SETRESULT(lctx, result);
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: message.c,v 1.219 2003/09/30 05:56:12 marka Exp $ */
+/* $Id: message.c,v 1.220 2004/02/27 20:41:43 marka Exp $ */
/***
*** Imports
/* XXX possibly change this to a while (tries < 2) loop */
for (;;) {
result = dns_rdata_fromwire(rdata, rdclass, rdtype,
- source, dctx, ISC_FALSE,
+ source, dctx, 0,
scratch);
if (result == ISC_R_NOSPACE) {
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: name.c,v 1.142 2003/10/25 00:31:10 jinmei Exp $ */
+/* $Id: name.c,v 1.143 2004/02/27 20:41:44 marka Exp $ */
#include <config.h>
return (ISC_FALSE);
}
+#define hyphenchar(c) ((c) == 0x2d)
+#define asterchar(c) ((c) == 0x2a)
+#define alphachar(c) (((c) >= 0x41 && (c) <= 0x5a) \
+ || ((c) >= 0x61 && (c) <= 0x7a))
+#define digitchar(c) ((c) >= 0x30 && (c) <= 0x39)
+#define borderchar(c) (alphachar(c) || digitchar(c))
+#define middlechar(c) (borderchar(c) || hyphenchar(c))
+#define domainchar(c) ((c) > 0x20 && (c) < 0x7f)
+
+isc_boolean_t
+dns_name_ismailbox(const dns_name_t *name) {
+ unsigned char *ndata, ch;
+ unsigned int n;
+ isc_boolean_t first;
+
+ REQUIRE(VALID_NAME(name));
+ REQUIRE(name->labels > 0);
+ REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE);
+
+ /*
+ * Root label.
+ */
+ if (name->length == 1)
+ return (ISC_TRUE);
+
+ ndata = name->ndata;
+ n = *ndata++;
+ INSIST(n < 63);
+ while (n--) {
+ ch = *ndata++;
+ if (!domainchar(ch))
+ return (ISC_FALSE);
+ }
+
+ if (ndata == name->ndata + name->length)
+ return (ISC_FALSE);
+
+ /*
+ * RFC292/RFC1123 hostname.
+ */
+ while (ndata < (name->ndata + name->length)) {
+ n = *ndata++;
+ INSIST(n < 63);
+ first = ISC_TRUE;
+ while (n--) {
+ ch = *ndata++;
+ if (first || n == 0) {
+ if (!borderchar(ch))
+ return (ISC_FALSE);
+ } else {
+ if (!middlechar(ch))
+ return (ISC_FALSE);
+ }
+ first = ISC_FALSE;
+ }
+ }
+ return (ISC_TRUE);
+}
+
+isc_boolean_t
+dns_name_ishostname(const dns_name_t *name, isc_boolean_t wildcard) {
+ unsigned char *ndata, ch;
+ unsigned int n;
+ isc_boolean_t first;
+
+ REQUIRE(VALID_NAME(name));
+ REQUIRE(name->labels > 0);
+ REQUIRE(name->attributes & DNS_NAMEATTR_ABSOLUTE);
+
+ /*
+ * Root label.
+ */
+ if (name->length == 1)
+ return (ISC_TRUE);
+
+ /*
+ * Skip wildcard if this is a ownername.
+ */
+ ndata = name->ndata;
+ if (wildcard && ndata[0] == 1 && ndata[1] == '*')
+ ndata += 2;
+
+ /*
+ * RFC292/RFC1123 hostname.
+ */
+ while (ndata < (name->ndata + name->length)) {
+ n = *ndata++;
+ INSIST(n < 63);
+ first = ISC_TRUE;
+ while (n--) {
+ ch = *ndata++;
+ if (first || n == 0) {
+ if (!borderchar(ch))
+ return (ISC_FALSE);
+ } else {
+ if (!middlechar(ch))
+ return (ISC_FALSE);
+ }
+ first = ISC_FALSE;
+ }
+ }
+ return (ISC_TRUE);
+}
+
isc_boolean_t
dns_name_iswildcard(const dns_name_t *name) {
unsigned char *ndata;
isc_result_t
dns_name_fromtext(dns_name_t *name, isc_buffer_t *source,
- dns_name_t *origin, isc_boolean_t downcase,
+ dns_name_t *origin, unsigned int options,
isc_buffer_t *target)
{
unsigned char *ndata, *label;
isc_boolean_t done;
unsigned char *offsets;
dns_offsets_t odata;
+ isc_boolean_t downcase;
/*
* Convert the textual representation of a DNS name at source
REQUIRE(ISC_BUFFER_VALID(source));
REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) ||
(target == NULL && ISC_BUFFER_VALID(name->buffer)));
+
+ downcase = ISC_TF((options & DNS_NAME_DOWNCASE) != 0);
if (target == NULL && name->buffer != NULL) {
target = name->buffer;
isc_result_t
dns_name_fromwire(dns_name_t *name, isc_buffer_t *source,
- dns_decompress_t *dctx, isc_boolean_t downcase,
+ dns_decompress_t *dctx, unsigned int options,
isc_buffer_t *target)
{
unsigned char *cdata, *ndata;
unsigned int c;
unsigned char *offsets;
dns_offsets_t odata;
+ isc_boolean_t downcase;
/*
* Copy the possibly-compressed name at source into target,
REQUIRE((target != NULL && ISC_BUFFER_VALID(target)) ||
(target == NULL && ISC_BUFFER_VALID(name->buffer)));
+ downcase = ISC_TF((options & DNS_NAME_DOWNCASE) != 0);
+
if (target == NULL && name->buffer != NULL) {
target = name->buffer;
isc_buffer_clear(target);
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdata.c,v 1.181 2003/10/17 03:46:43 marka Exp $ */
+/* $Id: rdata.c,v 1.182 2004/02/27 20:41:44 marka Exp $ */
#include <config.h>
#include <ctype.h>
#define ARGS_FROMTEXT int rdclass, dns_rdatatype_t type, \
isc_lex_t *lexer, dns_name_t *origin, \
- isc_boolean_t downcase, isc_buffer_t *target, \
+ unsigned int options, isc_buffer_t *target, \
dns_rdatacallbacks_t *callbacks
#define ARGS_TOTEXT dns_rdata_t *rdata, dns_rdata_textctx_t *tctx, \
#define ARGS_FROMWIRE int rdclass, dns_rdatatype_t type, \
isc_buffer_t *source, dns_decompress_t *dctx, \
- isc_boolean_t downcase, isc_buffer_t *target
+ unsigned int options, isc_buffer_t *target
#define ARGS_TOWIRE dns_rdata_t *rdata, dns_compress_t *cctx, \
isc_buffer_t *target
#define ARGS_DIGEST dns_rdata_t *rdata, dns_digestfunc_t digest, void *arg
+#define ARGS_CHECKOWNER dns_name_t *name, dns_rdataclass_t rdclass, \
+ dns_rdatatype_t type, isc_boolean_t wildcard
+
+#define ARGS_CHECKNAMES dns_rdata_t *rdata, dns_name_t *owner, dns_name_t *bad
+
+
/*
* Context structure for the totext_ functions.
* Contains formatting options for rdata-to-text
rdata_totext(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx,
isc_buffer_t *target);
+static void
+warn_badname(dns_name_t *name, isc_lex_t *lexer,
+ dns_rdatacallbacks_t *callbacks);
+
static inline int
getquad(const void *src, struct in_addr *dst,
isc_lex_t *lexer, dns_rdatacallbacks_t *callbacks)
isc_result_t
dns_rdata_fromwire(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
dns_rdatatype_t type, isc_buffer_t *source,
- dns_decompress_t *dctx, isc_boolean_t downcase,
+ dns_decompress_t *dctx, unsigned int options,
isc_buffer_t *target)
{
isc_result_t result = ISC_R_NOTIMPLEMENTED;
dns_decompress_init(&dctx, -1, DNS_DECOMPRESS_NONE);
isc_buffer_setactive(src, isc_buffer_usedlength(src));
result = dns_rdata_fromwire(&rdata, rdclass, type, src,
- &dctx, ISC_FALSE, dest);
+ &dctx, 0, dest);
dns_decompress_invalidate(&dctx);
return (result);
isc_result_t
dns_rdata_fromtext(dns_rdata_t *rdata, dns_rdataclass_t rdclass,
dns_rdatatype_t type, isc_lex_t *lexer,
- dns_name_t *origin, isc_boolean_t downcase, isc_mem_t *mctx,
+ dns_name_t *origin, unsigned int options, isc_mem_t *mctx,
isc_buffer_t *target, dns_rdatacallbacks_t *callbacks)
{
isc_result_t result = ISC_R_NOTIMPLEMENTED;
isc_region_t region;
isc_buffer_t st;
isc_token_t token;
- unsigned int options = ISC_LEXOPT_EOL | ISC_LEXOPT_EOF |
- ISC_LEXOPT_DNSMULTILINE | ISC_LEXOPT_ESCAPE;
+ unsigned int lexoptions = ISC_LEXOPT_EOL | ISC_LEXOPT_EOF |
+ ISC_LEXOPT_DNSMULTILINE | ISC_LEXOPT_ESCAPE;
char *name;
unsigned long line;
void (*callback)(dns_rdatacallbacks_t *, const char *, ...);
do {
name = isc_lex_getsourcename(lexer);
line = isc_lex_getsourceline(lexer);
- tresult = isc_lex_gettoken(lexer, options, &token);
+ tresult = isc_lex_gettoken(lexer, lexoptions, &token);
if (tresult != ISC_R_SUCCESS) {
if (result == ISC_R_SUCCESS)
result = tresult;
return (result);
}
+isc_boolean_t
+dns_rdata_checkowner(dns_name_t *name, dns_rdataclass_t rdclass,
+ dns_rdatatype_t type, isc_boolean_t wildcard)
+{
+ isc_boolean_t result;
+
+ CHECKOWNERSWITCH
+ return (result);
+}
+
+isc_boolean_t
+dns_rdata_checknames(dns_rdata_t *rdata, dns_name_t *owner, dns_name_t *bad)
+{
+ isc_boolean_t result;
+
+ CHECKNAMESSWITCH
+ return (result);
+}
+
unsigned int
dns_rdatatype_attributes(dns_rdatatype_t type)
{
}
}
+static void
+warn_badname(dns_name_t *name, isc_lex_t *lexer,
+ dns_rdatacallbacks_t *callbacks)
+{
+ const char *file;
+ unsigned long line;
+ char namebuf[DNS_NAME_FORMATSIZE];
+
+ if (lexer != NULL) {
+ file = isc_lex_getsourcename(lexer);
+ line = isc_lex_getsourceline(lexer);
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ (*callbacks->warn)(callbacks, "%s:%u: %s: %s",
+ file, line, namebuf,
+ dns_result_totext(DNS_R_BADNAME));
+ }
+}
+
static void
fromtext_error(void (*callback)(dns_rdatacallbacks_t *, const char *, ...),
dns_rdatacallbacks_t *callbacks, const char *name,
return (ISC_TRUE);
return (ISC_FALSE);
}
-
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: tsig_250.c,v 1.57 2003/07/25 00:01:07 marka Exp $ */
+/* $Id: tsig_250.c,v 1.58 2004/02/27 20:41:46 marka Exp $ */
/* Reviewed: Thu Mar 16 13:39:43 PST 2000 by gson */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
/*
* Time Signed: 48 bits.
* Algorithm Name.
*/
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
isc_buffer_activeregion(source, &sr);
/*
return (ISC_R_NOTIMPLEMENTED);
}
+static inline isc_boolean_t
+checkowner_any_tsig(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 250);
+ REQUIRE(rdclass == 255);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_any_tsig(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 250);
+ REQUIRE(rdata->rdclass == 250);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_ANY_255_TSIG_250_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: afsdb_18.c,v 1.41 2003/07/25 00:01:08 marka Exp $ */
+/* $Id: afsdb_18.c,v 1.42 2004/02/27 20:41:46 marka Exp $ */
/* Reviewed: Wed Mar 15 14:59:00 PST 2000 by explorer */
isc_token_t token;
isc_buffer_t buffer;
dns_name_t name;
+ isc_boolean_t ok;
REQUIRE(type == 18);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
memcpy(tr.base, sr.base, 2);
isc_buffer_forward(source, 2);
isc_buffer_add(target, 2);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_afsdb(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 18);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_afsdb(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 18);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ isc_region_consume(®ion, 2);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_AFSDB_18_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: cert_37.c,v 1.44 2003/07/25 00:01:08 marka Exp $ */
+/* $Id: cert_37.c,v 1.45 2004/02/27 20:41:47 marka Exp $ */
/* Reviewed: Wed Mar 15 21:14:32 EST 2000 by tale */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/*
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 5)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_cert(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 37);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_cert(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 37);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_CERT_37_C */
+
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: cname_5.c,v 1.43 2001/07/16 03:06:03 marka Exp $ */
+/* $Id: cname_5.c,v 1.44 2004/02/27 20:41:47 marka Exp $ */
/* reviewed: Wed Mar 15 16:48:45 PST 2000 by brister */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_cname(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 5);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_cname(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 5);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_CNAME_5_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dname_39.c,v 1.34 2001/07/16 03:06:04 marka Exp $ */
+/* $Id: dname_39.c,v 1.35 2004/02/27 20:41:47 marka Exp $ */
/* Reviewed: Wed Mar 15 16:52:38 PST 2000 by explorer */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
dns_name_init(&name, NULL);
- return(dns_name_fromwire(&name, source, dctx, downcase, target));
+ return(dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_dname(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 39);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_dname(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 39);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_DNAME_39_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnskey_48.c,v 1.2 2003/09/30 06:00:40 marka Exp $ */
+/* $Id: dnskey_48.c,v 1.3 2004/02/27 20:41:47 marka Exp $ */
/*
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/* flags */
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 4)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_dnskey(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 48);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_dnskey(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 48);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_DNSKEY_48_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: ds_43.c,v 1.4 2002/12/20 01:19:20 marka Exp $ */
+/* $Id: ds_43.c,v 1.5 2004/02/27 20:41:47 marka Exp $ */
/* draft-ietf-dnsext-delegation-signer-05.txt */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/*
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 4)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_ds(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 43);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_ds(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 43);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_DS_43_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gpos_27.c,v 1.35 2002/02/20 03:34:47 marka Exp $ */
+/* $Id: gpos_27.c,v 1.36 2004/02/27 20:41:47 marka Exp $ */
/* reviewed: Wed Mar 15 16:48:45 PST 2000 by brister */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
for (i = 0; i < 3; i++) {
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
for (i = 0; i < 3; i++)
RETERR(txt_fromwire(source, target));
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_gpos(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 27);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_gpos(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 27);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_GPOS_27_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: hinfo_13.c,v 1.40 2002/02/20 03:34:48 marka Exp $ */
+/* $Id: hinfo_13.c,v 1.41 2004/02/27 20:41:47 marka Exp $ */
/*
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
REQUIRE(type == 13);
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
RETERR(txt_fromwire(source, target));
return (txt_fromwire(source, target));
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_hinfo(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 13);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_hinfo(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 13);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_HINFO_13_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: isdn_20.c,v 1.32 2002/02/20 03:34:50 marka Exp $ */
+/* $Id: isdn_20.c,v 1.33 2004/02/27 20:41:47 marka Exp $ */
/* Reviewed: Wed Mar 15 16:53:11 PST 2000 by bwelling */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/* ISDN-address */
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
RETERR(txt_fromwire(source, target));
if (buffer_empty(source))
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_isdn(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 20);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_isdn(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 20);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_ISDN_20_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: key_25.c,v 1.45 2003/09/30 05:56:17 marka Exp $ */
+/* $Id: key_25.c,v 1.46 2004/02/27 20:41:47 marka Exp $ */
/*
* Reviewed: Wed Mar 15 16:47:10 PST 2000 by halley.
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/* flags */
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 4)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_key(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 25);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_key(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 25);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_KEY_25_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: loc_29.c,v 1.39 2003/07/25 00:01:08 marka Exp $ */
+/* $Id: loc_29.c,v 1.40 2004/02/27 20:41:47 marka Exp $ */
/* Reviewed: Wed Mar 15 18:13:09 PST 2000 by explorer */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
/*
* Defaults.
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 1)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_loc(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 29);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_loc(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 29);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_LOC_29_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mb_7.c,v 1.41 2001/07/16 03:06:11 marka Exp $ */
+/* $Id: mb_7.c,v 1.42 2004/02/27 20:41:47 marka Exp $ */
/* Reviewed: Wed Mar 15 17:31:26 PST 2000 by bwelling */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_mb(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 7);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (dns_name_ismailbox(name));
+}
+
+static inline isc_boolean_t
+checknames_mb(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 7);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MB_7_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: md_3.c,v 1.43 2001/07/16 03:06:13 marka Exp $ */
+/* $Id: md_3.c,v 1.44 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Wed Mar 15 17:48:20 PST 2000 by bwelling */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_md(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 3);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_md(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 3);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MD_3_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mf_4.c,v 1.41 2001/07/16 03:06:14 marka Exp $ */
+/* $Id: mf_4.c,v 1.42 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 17:47:33 PST 2000 by brister */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_mf(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 4);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_mf(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 4);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MF_4_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mg_8.c,v 1.39 2001/07/16 03:06:15 marka Exp $ */
+/* $Id: mg_8.c,v 1.40 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 17:49:21 PST 2000 by brister */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_mg(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 8);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (dns_name_ismailbox(name));
+}
+
+static inline isc_boolean_t
+checknames_mg(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 8);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MG_8_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: minfo_14.c,v 1.41 2001/11/27 00:56:02 gson Exp $ */
+/* $Id: minfo_14.c,v 1.42 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 17:45:32 PST 2000 by brister */
dns_name_t name;
isc_buffer_t buffer;
int i;
+ isc_boolean_t ok;
REQUIRE(type == 14);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
RETTOK(dns_name_fromtext(&name, &buffer, origin,
- downcase, target));
+ options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ismailbox(&name);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
}
return (ISC_R_SUCCESS);
}
dns_name_init(&rmail, NULL);
dns_name_init(&email, NULL);
- RETERR(dns_name_fromwire(&rmail, source, dctx, downcase, target));
- return (dns_name_fromwire(&email, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&rmail, source, dctx, options, target));
+ return (dns_name_fromwire(&email, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_minfo(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 14);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_minfo(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 14);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ismailbox(&name)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ isc_region_consume(®ion, name_length(&name));
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ismailbox(&name)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MINFO_14_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mr_9.c,v 1.38 2001/07/16 03:06:18 marka Exp $ */
+/* $Id: mr_9.c,v 1.39 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Wed Mar 15 21:30:35 EST 2000 by tale */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_mr(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 9);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_mr(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 9);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MR_9_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: mx_15.c,v 1.50 2003/07/25 00:01:08 marka Exp $ */
+/* $Id: mx_15.c,v 1.51 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 18:05:46 PST 2000 by brister */
isc_token_t token;
dns_name_t name;
isc_buffer_t buffer;
+ isc_boolean_t ok;
REQUIRE(type == 15);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
return (ISC_R_UNEXPECTEDEND);
RETERR(mem_tobuffer(target, sregion.base, 2));
isc_buffer_forward(source, 2);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_mx(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 15);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (dns_name_ishostname(name, wildcard));
+}
+
+static inline isc_boolean_t
+checknames_mx(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 15);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ isc_region_consume(®ion, 2);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_MX_15_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: ns_2.c,v 1.42 2001/07/16 03:06:20 marka Exp $ */
+/* $Id: ns_2.c,v 1.43 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Wed Mar 15 18:15:00 PST 2000 by bwelling */
isc_token_t token;
dns_name_t name;
isc_buffer_t buffer;
+ isc_boolean_t ok;
REQUIRE(type == 2);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_ns(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 2);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_ns(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 2);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_NS_2_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsec_47.c,v 1.5 2003/12/13 04:33:53 marka Exp $ */
+/* $Id: nsec_47.c,v 1.6 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 18:21:15 PST 2000 by brister */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
memset(bm, 0, sizeof(bm));
do {
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
isc_buffer_activeregion(source, &sr);
for (i = 0; i < sr.length; i += len) {
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_nsec(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 47);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_nsec(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 47);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_NSEC_47_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: null_10.c,v 1.38 2002/02/20 03:34:53 marka Exp $ */
+/* $Id: null_10.c,v 1.39 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Thu Mar 16 13:57:50 PST 2000 by explorer */
UNUSED(type);
UNUSED(lexer);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(target);
UNUSED(callbacks);
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
isc_buffer_forward(source, sr.length);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_null(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 10);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_null(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 10);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_NULL_10_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nxt_30.c,v 1.57 2003/09/30 05:56:17 marka Exp $ */
+/* $Id: nxt_30.c,v 1.58 2004/02/27 20:41:48 marka Exp $ */
/* reviewed: Wed Mar 15 18:21:15 PST 2000 by brister */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
memset(bm, 0, sizeof(bm));
do {
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
isc_buffer_activeregion(source, &sr);
if (sr.length > 0 && (sr.base[0] & 0x80) == 0 &&
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_nxt(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 30);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_nxt(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 30);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_NXT_30_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: opt_41.c,v 1.27 2002/02/20 03:34:57 marka Exp $ */
+/* $Id: opt_41.c,v 1.28 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Thu Mar 16 14:06:44 PST 2000 by gson */
UNUSED(rdclass);
UNUSED(lexer);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(target);
UNUSED(callbacks);
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sregion);
total = 0;
return (ISC_R_NOTIMPLEMENTED);
}
+static inline isc_boolean_t
+checkowner_opt(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 41);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (dns_name_equal(name, dns_rootname));
+}
+
+static inline isc_boolean_t
+checknames_opt(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 41);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_OPT_41_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: proforma.c,v 1.32 2002/02/20 03:34:59 marka Exp $ */
+/* $Id: proforma.c,v 1.33 2004/02/27 20:41:48 marka Exp $ */
#ifndef RDATA_GENERIC_#_#_C
#define RDATA_GENERIC_#_#_C
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_#(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == #);
+ REQUIRE(rdclass == #);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_#(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == #);
+ REQUIRE(rdata->rdclass == #);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_#_#_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: ptr_12.c,v 1.39 2001/07/16 03:06:26 marka Exp $ */
+/* $Id: ptr_12.c,v 1.40 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Thu Mar 16 14:05:12 PST 2000 by explorer */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ if (rdclass == dns_rdataclass_in &&
+ (options & DNS_RDATA_CHECKNAMES) != 0 &&
+ (options & DNS_RDATA_CHECKREVERSE) != 0) {
+ isc_boolean_t ok;
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
+ }
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_GLOBAL14);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_ptr(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 12);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static unsigned char ip6_arpa_data[] = "\003IP6\004ARPA";
+static unsigned char ip6_arpa_offsets[] = { 0, 4, 9 };
+static const dns_name_t ip6_arpa =
+{
+ DNS_NAME_MAGIC,
+ ip6_arpa_data, 10, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ ip6_arpa_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+static unsigned char ip6_int_data[] = "\003IP6\003INT";
+static unsigned char ip6_int_offsets[] = { 0, 4, 8 };
+static const dns_name_t ip6_int =
+{
+ DNS_NAME_MAGIC,
+ ip6_int_data, 9, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ ip6_int_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+static unsigned char in_addr_arpa_data[] = "\007IN-ADDR\004ARPA";
+static unsigned char in_addr_arpa_offsets[] = { 0, 8, 13 };
+static const dns_name_t in_addr_arpa =
+{
+ DNS_NAME_MAGIC,
+ in_addr_arpa_data, 14, 3,
+ DNS_NAMEATTR_READONLY | DNS_NAMEATTR_ABSOLUTE,
+ in_addr_arpa_offsets, NULL,
+ {(void *)-1, (void *)-1},
+ {NULL, NULL}
+};
+
+static inline isc_boolean_t
+checknames_ptr(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 12);
+
+ if (rdata->rdclass != dns_rdataclass_in)
+ return (ISC_TRUE);
+
+ if (dns_name_issubdomain(owner, &in_addr_arpa) ||
+ dns_name_issubdomain(owner, &ip6_arpa) ||
+ dns_name_issubdomain(owner, &ip6_int)) {
+ dns_rdata_toregion(rdata, ®ion);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_PTR_12_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rp_17.c,v 1.36 2001/11/27 00:56:05 gson Exp $ */
+/* $Id: rp_17.c,v 1.37 2004/02/27 20:41:48 marka Exp $ */
/* RFC 1183 */
dns_name_t name;
isc_buffer_t buffer;
int i;
+ isc_boolean_t ok;
REQUIRE(type == 17);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
RETTOK(dns_name_fromtext(&name, &buffer, origin,
- downcase, target));
+ options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0 && i == 0)
+ ok = dns_name_ismailbox(&name);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
}
return (ISC_R_SUCCESS);
}
dns_name_init(&rmail, NULL);
dns_name_init(&email, NULL);
- RETERR(dns_name_fromwire(&rmail, source, dctx, downcase, target));
- return (dns_name_fromwire(&email, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&rmail, source, dctx, options, target));
+ return (dns_name_fromwire(&email, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_rp(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 17);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_rp(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 17);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ismailbox(&name)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_RP_17_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rrsig_46.c,v 1.2 2003/09/30 06:00:40 marka Exp $ */
+/* $Id: rrsig_46.c,v 1.3 2004/02/27 20:41:48 marka Exp $ */
/* Reviewed: Fri Mar 17 09:05:02 PST 2000 by gson */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
/*
* Sig.
* Signer.
*/
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
/*
* Sig.
return (type);
}
+static inline isc_boolean_t
+checkowner_rrsig(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 46);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_rrsig(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 46);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_RRSIG_46_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rt_21.c,v 1.39 2003/07/25 00:01:08 marka Exp $ */
+/* $Id: rt_21.c,v 1.40 2004/02/27 20:41:49 marka Exp $ */
/* reviewed: Thu Mar 16 15:02:31 PST 2000 by brister */
isc_token_t token;
dns_name_t name;
isc_buffer_t buffer;
+ isc_boolean_t ok;
REQUIRE(type == 21);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
memcpy(tregion.base, sregion.base, 2);
isc_buffer_forward(source, 2);
isc_buffer_add(target, 2);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_rt(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 21);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_rt(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 21);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ isc_region_consume(®ion, 2);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_RT_21_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: sig_24.c,v 1.60 2003/09/30 05:56:18 marka Exp $ */
+/* $Id: sig_24.c,v 1.61 2004/02/27 20:41:49 marka Exp $ */
/* Reviewed: Fri Mar 17 09:05:02 PST 2000 by gson */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
/*
* Sig.
* Signer.
*/
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
/*
* Sig.
return (type);
}
+static inline isc_boolean_t
+checkowner_sig(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 24);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_sig(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 24);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_SIG_24_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: soa_6.c,v 1.57 2002/02/20 03:35:01 marka Exp $ */
+/* $Id: soa_6.c,v 1.58 2004/02/27 20:41:49 marka Exp $ */
/* Reviewed: Thu Mar 16 15:18:32 PST 2000 by explorer */
isc_buffer_t buffer;
int i;
isc_uint32_t n;
+ isc_boolean_t ok;
REQUIRE(type == 6);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
RETTOK(dns_name_fromtext(&name, &buffer, origin,
- downcase, target));
+ options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ switch (i) {
+ case 0:
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ break;
+ case 1:
+ ok = dns_name_ismailbox(&name);
+ break;
+
+ }
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
}
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_number,
dns_name_init(&mname, NULL);
dns_name_init(&rname, NULL);
- RETERR(dns_name_fromwire(&mname, source, dctx, downcase, target));
- RETERR(dns_name_fromwire(&rname, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&mname, source, dctx, options, target));
+ RETERR(dns_name_fromwire(&rname, source, dctx, options, target));
isc_buffer_activeregion(source, &sregion);
isc_buffer_availableregion(target, &tregion);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_soa(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 6);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_soa(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 6);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ isc_region_consume(®ion, name_length(&name));
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ismailbox(&name)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_SOA_6_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: sshfp_44.c,v 1.1 2003/10/01 10:05:00 marka Exp $ */
+/* $Id: sshfp_44.c,v 1.2 2004/02/27 20:41:49 marka Exp $ */
/* draft-ietf-secsh-dns-05.txt */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
/*
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 4)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_sshfp(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 44);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_sshfp(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 44);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_SSHFP_44_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: tkey_249.c,v 1.53 2003/07/25 00:01:09 marka Exp $ */
+/* $Id: tkey_249.c,v 1.54 2004/02/27 20:41:49 marka Exp $ */
/*
* Reviewed: Thu Mar 16 17:35:30 PST 2000 by halley.
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
/*
* Algorithm.
*/
dns_name_init(&name, NULL);
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
/*
* Inception: 4
return (ISC_R_NOTIMPLEMENTED);
}
+static inline isc_boolean_t
+checkowner_tkey(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 249);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_tkey(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 249);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_TKEY_249_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: txt_16.c,v 1.39 2002/02/20 03:35:04 marka Exp $ */
+/* $Id: txt_16.c,v 1.40 2004/02/27 20:41:49 marka Exp $ */
/* Reviewed: Thu Mar 16 15:40:00 PST 2000 by bwelling */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
strings = 0;
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
do {
result = txt_fromwire(source, target);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_txt(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 16);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_txt(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 16);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_TXT_16_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: unspec_103.c,v 1.31 2002/02/20 03:35:05 marka Exp $ */
+/* $Id: unspec_103.c,v 1.32 2004/02/27 20:41:49 marka Exp $ */
#ifndef RDATA_GENERIC_UNSPEC_103_C
#define RDATA_GENERIC_UNSPEC_103_C
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
return (atob_tobuffer(lexer, target));
UNUSED(type);
UNUSED(rdclass);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
isc_buffer_forward(source, sr.length);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_unspec(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 103);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_unspec(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 103);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_UNSPEC_103_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: x25_19.c,v 1.33 2002/02/20 03:35:06 marka Exp $ */
+/* $Id: x25_19.c,v 1.34 2004/02/27 20:41:49 marka Exp $ */
/* Reviewed: Thu Mar 16 16:15:57 PST 2000 by bwelling */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_qstring,
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
if (sr.length < 5)
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_x25(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 19);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_x25(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 19);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_GENERIC_X25_19_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: a_1.c,v 1.27 2002/02/20 03:35:08 marka Exp $ */
+/* $Id: a_1.c,v 1.28 2004/02/27 20:41:49 marka Exp $ */
/* reviewed: Thu Mar 16 15:58:36 PST 2000 by brister */
UNUSED(type);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
UNUSED(type);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
isc_buffer_activeregion(source, &sregion);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_hs_a(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 1);
+ REQUIRE(rdclass == 4);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_hs_a(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 1);
+ REQUIRE(rdata->rdclass == 4);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_HS_4_A_1_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: a6_38.c,v 1.50 2003/07/25 00:01:10 marka Exp $ */
+/* $Id: a6_38.c,v 1.51 2004/02/27 20:41:49 marka Exp $ */
/* RFC2874 */
unsigned char mask;
dns_name_t name;
isc_buffer_t buffer;
+ isc_boolean_t ok;
REQUIRE(type == 38);
REQUIRE(rdclass == 1);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
return (ISC_R_SUCCESS);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_in_a6(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 38);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (dns_name_ishostname(name, wildcard));
+}
+
+static inline isc_boolean_t
+checknames_in_a6(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+ unsigned int prefixlen;
+
+ REQUIRE(rdata->type == 38);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ prefixlen = uint8_fromregion(®ion);
+ if (prefixlen == 0)
+ return (ISC_TRUE);
+ isc_region_consume(®ion, 1 + 16 - prefixlen / 8);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_A6_38_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: a_1.c,v 1.49 2002/02/20 03:35:10 marka Exp $ */
+/* $Id: a_1.c,v 1.50 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
UNUSED(type);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
UNUSED(type);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
isc_buffer_activeregion(source, &sregion);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_in_a(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 1);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (dns_name_ishostname(name, wildcard));
+}
+
+static inline isc_boolean_t
+checknames_in_a(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 1);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_A_1_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: aaaa_28.c,v 1.39 2002/02/20 03:35:12 marka Exp $ */
+/* $Id: aaaa_28.c,v 1.40 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
UNUSED(type);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
UNUSED(callbacks);
UNUSED(type);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
isc_buffer_activeregion(source, &sregion);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_in_aaaa(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 28);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (dns_name_ishostname(name, wildcard));
+}
+
+static inline isc_boolean_t
+checknames_in_aaaa(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 28);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_AAAA_28_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: apl_42.c,v 1.5 2004/01/05 06:11:39 marka Exp $ */
+/* $Id: apl_42.c,v 1.6 2004/02/27 20:41:50 marka Exp $ */
/* RFC 3123 */
UNUSED(type);
UNUSED(rdclass);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(callbacks);
do {
UNUSED(type);
UNUSED(dctx);
UNUSED(rdclass);
- UNUSED(downcase);
+ UNUSED(options);
isc_buffer_activeregion(source, &sr);
isc_buffer_availableregion(target, &tr);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_in_apl(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 42);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+
+static inline isc_boolean_t
+checknames_in_apl(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 42);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_APL_42_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: kx_36.c,v 1.39 2003/07/25 00:01:10 marka Exp $ */
+/* $Id: kx_36.c,v 1.40 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Thu Mar 16 17:24:54 PST 2000 by explorer */
/* RFC 2230 */
-#ifndef RDATA_GENERIC_KX_36_C
-#define RDATA_GENERIC_KX_36_C
+#ifndef RDATA_IN_1_KX_36_C
+#define RDATA_IN_1_KX_36_C
#define RRTYPE_KX_ATTRIBUTES (0)
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
return (ISC_R_UNEXPECTEDEND);
RETERR(mem_tobuffer(target, sregion.base, 2));
isc_buffer_forward(source, 2);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
-#endif /* RDATA_GENERIC_KX_36_C */
+static inline isc_boolean_t
+checkowner_in_kx(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 36);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_kx(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 36);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
+#endif /* RDATA_IN_1_KX_36_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: naptr_35.c,v 1.45 2003/07/25 00:01:10 marka Exp $ */
+/* $Id: naptr_35.c,v 1.46 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Thu Mar 16 16:52:50 PST 2000 by bwelling */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
/*
* Replacement.
*/
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_in_naptr(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 35);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_naptr(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 35);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_NAPTR_35_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsap-ptr_23.c,v 1.32 2001/07/16 03:06:46 marka Exp $ */
+/* $Id: nsap-ptr_23.c,v 1.33 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Fri Mar 17 10:16:02 PST 2000 by gson */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
dns_decompress_setmethods(dctx, DNS_COMPRESS_NONE);
dns_name_init(&name, NULL);
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_in_nsap_ptr(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 23);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_nsap_ptr(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 23);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_NSAP_PTR_23_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsap_22.c,v 1.36 2002/02/20 03:35:13 marka Exp $ */
+/* $Id: nsap_22.c,v 1.37 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Fri Mar 17 10:41:07 PST 2000 by gson */
UNUSED(type);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
UNUSED(callbacks);
UNUSED(type);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
isc_buffer_activeregion(source, ®ion);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_in_nsap(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 22);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_nsap(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 22);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_NSAP_22_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: px_26.c,v 1.36 2003/07/25 00:01:10 marka Exp $ */
+/* $Id: px_26.c,v 1.37 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Mon Mar 20 10:44:27 PST 2000 */
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
/*
* MAPX400.
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
return (ISC_R_SUCCESS);
}
/*
* MAP822.
*/
- RETERR(dns_name_fromwire(&name, source, dctx, downcase, target));
+ RETERR(dns_name_fromwire(&name, source, dctx, options, target));
/*
* MAPX400.
*/
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_in_px(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 250);
+ REQUIRE(rdclass == 255);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_px(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 26);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_PX_26_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: srv_33.c,v 1.38 2003/07/25 00:01:10 marka Exp $ */
+/* $Id: srv_33.c,v 1.39 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Fri Mar 17 13:01:00 PST 2000 by bwelling */
isc_token_t token;
dns_name_t name;
isc_buffer_t buffer;
+ isc_boolean_t ok;
REQUIRE(type == 33);
REQUIRE(rdclass == 1);
dns_name_init(&name, NULL);
buffer_fromregion(&buffer, &token.value.as_region);
origin = (origin != NULL) ? origin : dns_rootname;
- RETTOK(dns_name_fromtext(&name, &buffer, origin, downcase, target));
+ RETTOK(dns_name_fromtext(&name, &buffer, origin, options, target));
+ ok = ISC_TRUE;
+ if ((options & DNS_RDATA_CHECKNAMES) != 0)
+ ok = dns_name_ishostname(&name, ISC_FALSE);
+ if (!ok && (options & DNS_RDATA_CHECKNAMESFAIL) != 0)
+ RETTOK(DNS_R_BADNAME);
+ if (!ok && callbacks != NULL)
+ warn_badname(&name, lexer, callbacks);
return (ISC_R_SUCCESS);
}
/*
* Target.
*/
- return (dns_name_fromwire(&name, source, dctx, downcase, target));
+ return (dns_name_fromwire(&name, source, dctx, options, target));
}
static inline isc_result_t
return (dns_name_digest(&name, digest, arg));
}
+static inline isc_boolean_t
+checkowner_in_srv(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 250);
+ REQUIRE(rdclass == 255);
+
+ UNUSED(name);
+ UNUSED(type);
+ UNUSED(rdclass);
+ UNUSED(wildcard);
+
+ return (ISC_TRUE);
+}
+
+static inline isc_boolean_t
+checknames_in_srv(ARGS_CHECKNAMES) {
+ isc_region_t region;
+ dns_name_t name;
+
+ REQUIRE(rdata->type == 33);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(owner);
+
+ dns_rdata_toregion(rdata, ®ion);
+ isc_region_consume(®ion, 6);
+ dns_name_init(&name, NULL);
+ dns_name_fromregion(&name, ®ion);
+ if (!dns_name_ishostname(&name, ISC_FALSE)) {
+ if (bad != NULL)
+ dns_name_clone(&name, bad);
+ return (ISC_FALSE);
+ }
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_SRV_33_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: wks_11.c,v 1.49 2002/02/20 03:35:14 marka Exp $ */
+/* $Id: wks_11.c,v 1.50 2004/02/27 20:41:50 marka Exp $ */
/* Reviewed: Fri Mar 17 15:01:49 PST 2000 by explorer */
UNUSED(type);
UNUSED(origin);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
/*
UNUSED(type);
UNUSED(dctx);
- UNUSED(downcase);
+ UNUSED(options);
UNUSED(rdclass);
isc_buffer_activeregion(source, &sr);
return ((digest)(arg, &r));
}
+static inline isc_boolean_t
+checkowner_in_wks(ARGS_CHECKOWNER) {
+
+ REQUIRE(type == 11);
+ REQUIRE(rdclass == 1);
+
+ UNUSED(type);
+ UNUSED(rdclass);
+
+ return (dns_name_ishostname(name, wildcard));
+}
+
+static inline isc_boolean_t
+checknames_in_wks(ARGS_CHECKNAMES) {
+
+ REQUIRE(rdata->type == 11);
+ REQUIRE(rdata->rdclass == 1);
+
+ UNUSED(rdata);
+ UNUSED(owner);
+ UNUSED(bad);
+
+ return (ISC_TRUE);
+}
+
#endif /* RDATA_IN_1_WKS_11_C */
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: resolver.c,v 1.281 2004/02/20 00:52:45 marka Exp $ */
+/* $Id: resolver.c,v 1.282 2004/02/27 20:41:44 marka Exp $ */
#include <config.h>
#define EXTERNAL(r) (((r)->attributes & DNS_RDATASETATTR_EXTERNAL) != 0)
#define CHAINING(r) (((r)->attributes & DNS_RDATASETATTR_CHAINING) != 0)
#define CHASE(r) (((r)->attributes & DNS_RDATASETATTR_CHASE) != 0)
+#define CHECKNAMES(r) (((r)->attributes & DNS_RDATASETATTR_CHECKNAMES) != 0)
/*
unsigned int options;
isc_task_t *task;
dns_validator_t *validator;
+ isc_boolean_t fail;
/*
* The appropriate bucket lock must be held.
/*
* Cache or validate each cacheable rdataset.
*/
+ fail = (fctx->res->options & DNS_RESOLVER_CHECKNAMESFAIL) != 0;
for (rdataset = ISC_LIST_HEAD(name->list);
rdataset != NULL;
rdataset = ISC_LIST_NEXT(rdataset, link)) {
if (!CACHE(rdataset))
continue;
+ if (CHECKNAMES(rdataset)) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char typebuf[DNS_RDATATYPE_FORMATSIZE];
+ char classbuf[DNS_RDATATYPE_FORMATSIZE];
+
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_rdatatype_format(rdataset->type, typebuf,
+ sizeof(typebuf));
+ dns_rdataclass_format(rdataset->rdclass, classbuf,
+ sizeof(classbuf));
+ isc_log_write(dns_lctx, DNS_LOGCATEGORY_RESOLVER,
+ DNS_LOGMODULE_RESOLVER, ISC_LOG_NOTICE,
+ "check-names %s %s/%s/%s",
+ fail ? "failure" : "warning",
+ namebuf, typebuf, classbuf);
+ if (fail) {
+ if (ANSWER(rdataset))
+ return (DNS_R_BADNAME);
+ continue;
+ }
+ }
/*
* Enforce the configure maximum cache TTL.
empty_bucket(res);
}
+static inline void
+checknamessection(dns_message_t *message, dns_section_t section) {
+ isc_result_t result;
+ dns_name_t *name;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_t *rdataset;
+
+ for (result = dns_message_firstname(message, section);
+ result == ISC_R_SUCCESS;
+ result = dns_message_nextname(message, section))
+ {
+ name = NULL;
+ dns_message_currentname(message, section, &name);
+ for (rdataset = ISC_LIST_HEAD(name->list);
+ rdataset != NULL;
+ rdataset = ISC_LIST_NEXT(rdataset, link)) {
+ for (result = dns_rdataset_first(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset)) {
+ dns_rdataset_current(rdataset, &rdata);
+ if (!dns_rdata_checkowner(name, rdata.rdclass,
+ rdata.type,
+ ISC_FALSE) ||
+ !dns_rdata_checknames(&rdata, name, NULL))
+ {
+ rdataset->attributes |=
+ DNS_RDATASETATTR_CHECKNAMES;
+ }
+ dns_rdata_reset(&rdata);
+ }
+ }
+ }
+}
+
+static void
+checknames(dns_message_t *message) {
+
+ checknamessection(message, DNS_SECTION_ANSWER);
+ checknamessection(message, DNS_SECTION_AUTHORITY);
+ checknamessection(message, DNS_SECTION_ADDITIONAL);
+}
+
static void
resquery_response(isc_task_t *task, isc_event_t *event) {
isc_result_t result = ISC_R_SUCCESS;
domainbuf, namebuf, typebuf, classbuf, addrbuf);
}
+ if ((fctx->res->options | DNS_RESOLVER_CHECKNAMES) != 0)
+ checknames(message);
+
/*
* Did we get any answers?
*/
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: result.c,v 1.111 2004/01/14 02:06:50 marka Exp $ */
+/* $Id: result.c,v 1.112 2004/02/27 20:41:44 marka Exp $ */
#include <config.h>
"empty wild", /* 93 DNS_R_EMPTYWILD */
"bad bitmap", /* 94 DNS_R_BADBITMAP */
- "from wildcard" /* 95 DNS_R_FROMWILDCARD */
+ "from wildcard", /* 95 DNS_R_FROMWILDCARD */
+ "bad owner name (check-names)", /* 96 DNS_R_BADOWNERNAME */
+ "bad name (check-names)" /* 97 DNS_R_BADNAME */
};
static const char *rcode_text[DNS_R_NRCODERESULTS] = {
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: sdb.c,v 1.42 2004/02/03 00:59:05 marka Exp $ */
+/* $Id: sdb.c,v 1.43 2004/02/27 20:41:44 marka Exp $ */
#include <config.h>
result = dns_rdata_fromtext(NULL,
lookup->sdb->common.rdclass,
typeval, lex,
- origin, ISC_FALSE,
+ origin, 0,
mctx, &rb,
&lookup->callbacks);
if (result != ISC_R_NOSPACE)
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: xfrin.c,v 1.133 2003/04/17 05:40:45 marka Exp $ */
+/* $Id: xfrin.c,v 1.134 2004/02/27 20:41:45 marka Exp $ */
#include <config.h>
isc_result_t result;
dns_difftuple_t *tuple = NULL;
+
+ CHECK(dns_zone_checknames(xfr->zone, name, rdata));
CHECK(dns_difftuple_create(xfr->diff.mctx, op,
name, ttl, rdata, &tuple));
dns_diff_append(&xfr->diff, &tuple);
isc_result_t result;
dns_difftuple_t *tuple = NULL;
+ if (op == DNS_DIFFOP_ADD)
+ CHECK(dns_zone_checknames(xfr->zone, name, rdata));
CHECK(dns_difftuple_create(xfr->diff.mctx, op,
name, ttl, rdata, &tuple));
dns_diff_append(&xfr->diff, &tuple);
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.c,v 1.404 2004/01/07 05:27:17 marka Exp $ */
+/* $Id: zone.c,v 1.405 2004/02/27 20:41:45 marka Exp $ */
#include <config.h>
#include <dns/rdatalist.h>
#include <dns/rdataset.h>
#include <dns/rdatastruct.h>
+#include <dns/rdatatype.h>
#include <dns/request.h>
#include <dns/resolver.h>
#include <dns/result.h>
options |= DNS_MASTER_CHECKNS;
if (DNS_ZONE_OPTION(load->zone, DNS_ZONEOPT_FATALNS))
options |= DNS_MASTER_FATALNS;
+ if (DNS_ZONE_OPTION(load->zone, DNS_ZONEOPT_CHECKNAMES))
+ options |= DNS_MASTER_CHECKNAMES;
+ if (DNS_ZONE_OPTION(load->zone, DNS_ZONEOPT_CHECKNAMESFAIL))
+ options |= DNS_MASTER_CHECKNAMESFAIL;
result = dns_master_loadfileinc(load->zone->masterfile,
dns_db_origin(load->db),
dns_db_origin(load->db),
options |= DNS_MASTER_FATALNS;
if (zone->type == dns_zone_slave)
options |= DNS_MASTER_SLAVE;
+ if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKNAMES))
+ options |= DNS_MASTER_CHECKNAMES;
+ if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKNAMESFAIL))
+ options |= DNS_MASTER_CHECKNAMESFAIL;
if (zone->zmgr != NULL && zone->db != NULL && zone->task != NULL) {
load = isc_mem_get(zone->mctx, sizeof(*load));
return (count);
}
+
+isc_result_t
+dns_zone_checknames(dns_zone_t *zone, dns_name_t *name, dns_rdata_t *rdata) {
+ isc_boolean_t ok = ISC_TRUE;
+ isc_boolean_t fail = ISC_FALSE;
+ char namebuf[DNS_NAME_FORMATSIZE];
+ char namebuf2[DNS_NAME_FORMATSIZE];
+ char typebuf[DNS_RDATATYPE_FORMATSIZE];
+ unsigned int level = ISC_LOG_WARNING;
+ dns_name_t bad;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ if (!DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKNAMES))
+ return (ISC_R_SUCCESS);
+
+ if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKNAMESFAIL)) {
+ level = ISC_LOG_ERROR;
+ fail = ISC_TRUE;
+ }
+
+ ok = dns_rdata_checkowner(name, rdata->rdclass, rdata->type, ISC_TRUE);
+ if (!ok) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_rdatatype_format(rdata->type, typebuf, sizeof(typebuf));
+ dns_zone_log(zone, level, "%s/%s: %s", namebuf, typebuf,
+ dns_result_totext(DNS_R_BADOWNERNAME));
+ if (fail)
+ return (DNS_R_BADOWNERNAME);
+ }
+
+ dns_name_init(&bad, NULL);
+ ok = dns_rdata_checknames(rdata, name, &bad);
+ if (!ok) {
+ dns_name_format(name, namebuf, sizeof(namebuf));
+ dns_name_format(&bad, namebuf2, sizeof(namebuf2));
+ dns_rdatatype_format(rdata->type, typebuf, sizeof(typebuf));
+ dns_zone_log(zone, level, "%s/%s: %s: %s ", namebuf, typebuf,
+ namebuf2, dns_result_totext(DNS_R_BADNAME));
+ if (fail)
+ return (DNS_R_BADNAME);
+ }
+
+ return (ISC_R_SUCCESS);
+}
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: namedconf.c,v 1.26 2004/02/17 03:40:23 marka Exp $ */
+/* $Id: namedconf.c,v 1.27 2004/02/27 20:41:51 marka Exp $ */
#include <config.h>
* A global or view "check-names" option. Note that the zone
* "check-names" option has a different syntax.
*/
+
+static const char *checktype_enums[] = { "master", "slave", "response", NULL };
+static cfg_type_t cfg_type_checktype = {
+ "checktype", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
+ &cfg_rep_string, &checktype_enums
+};
+
+static const char *checkmode_enums[] = { "fail", "warn", "ignore", NULL };
+static cfg_type_t cfg_type_checkmode = {
+ "checkmode", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
+ &cfg_rep_string, &checkmode_enums
+};
+
static cfg_tuplefielddef_t checknames_fields[] = {
- { "type", &cfg_type_ustring, 0 },
- { "mode", &cfg_type_ustring, 0 },
+ { "type", &cfg_type_checktype, 0 },
+ { "mode", &cfg_type_checkmode, 0 },
{ NULL, NULL, 0 }
};
static cfg_type_t cfg_type_checknames = {
{ "max-cache-ttl", &cfg_type_uint32, 0 },
{ "transfer-format", &cfg_type_transferformat, 0 },
{ "max-cache-size", &cfg_type_sizenodefault, 0 },
- { "check-names", &cfg_type_checknames,
- CFG_CLAUSEFLAG_MULTI | CFG_CLAUSEFLAG_NOTIMP },
+ { "check-names", &cfg_type_checknames, CFG_CLAUSEFLAG_MULTI },
{ "cache-file", &cfg_type_qstring, 0 },
{ "suppress-initial-notify", &cfg_type_boolean, CFG_CLAUSEFLAG_NYI },
{ "preferred-glue", &cfg_type_astring, 0 },
* Note that the format of the check-names option is different between
* the zone options and the global/view options. Ugh.
*/
- { "check-names", &cfg_type_ustring, CFG_CLAUSEFLAG_NOTIMP },
+ { "check-names", &cfg_type_checkmode, 0 },
{ NULL, NULL, 0 }
};