Commit cc0abf62 authored by Evan Hunt's avatar Evan Hunt

add -class option to rndc nta

parent 83dc5a70
...@@ -14232,6 +14232,7 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14232,6 +14232,7 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
dns_name_t *fname; dns_name_t *fname;
dns_ttl_t ntattl; dns_ttl_t ntattl;
bool ttlset = false, excl = false; bool ttlset = false, excl = false;
dns_rdataclass_t rdclass = dns_rdataclass_in;
UNUSED(force); UNUSED(force);
...@@ -14239,18 +14240,20 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14239,18 +14240,20 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
/* Skip the command name. */ /* Skip the command name. */
ptr = next_token(lex, text); ptr = next_token(lex, text);
if (ptr == NULL) if (ptr == NULL) {
return (ISC_R_UNEXPECTEDEND); return (ISC_R_UNEXPECTEDEND);
}
for (;;) { for (;;) {
/* Check for options */ /* Check for options */
ptr = next_token(lex, text); ptr = next_token(lex, text);
if (ptr == NULL) if (ptr == NULL) {
return (ISC_R_UNEXPECTEDEND); return (ISC_R_UNEXPECTEDEND);
}
if (argcheck(ptr, "dump")) if (argcheck(ptr, "dump")) {
dump = true; dump = true;
else if (argcheck(ptr, "remove")) { } else if (argcheck(ptr, "remove")) {
ntattl = 0; ntattl = 0;
ttlset = true; ttlset = true;
} else if (argcheck(ptr, "force")) { } else if (argcheck(ptr, "force")) {
...@@ -14280,8 +14283,22 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14280,8 +14283,22 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
ttlset = true; ttlset = true;
continue; continue;
} else } else if (argcheck(ptr, "class")) {
isc_textregion_t tr;
ptr = next_token(lex, text);
if (ptr == NULL) {
msg = "No class specified";
CHECK(ISC_R_UNEXPECTEDEND);
}
tr.base = ptr;
tr.length = strlen(ptr);
CHECK(dns_rdataclass_fromtext(&rdclass, &tr));
continue;
} else {
nametext = ptr; nametext = ptr;
}
break; break;
} }
...@@ -14294,11 +14311,13 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14294,11 +14311,13 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
view != NULL; view != NULL;
view = ISC_LIST_NEXT(view, link)) view = ISC_LIST_NEXT(view, link))
{ {
if (ntatable != NULL) if (ntatable != NULL) {
dns_ntatable_detach(&ntatable); dns_ntatable_detach(&ntatable);
}
result = dns_view_getntatable(view, &ntatable); result = dns_view_getntatable(view, &ntatable);
if (result == ISC_R_NOTFOUND) if (result == ISC_R_NOTFOUND) {
continue; continue;
}
CHECK(dns_ntatable_totext(ntatable, text)); CHECK(dns_ntatable_totext(ntatable, text));
} }
CHECK(putnull(text)); CHECK(putnull(text));
...@@ -14315,17 +14334,19 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14315,17 +14334,19 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
} }
/* Get the NTA name. */ /* Get the NTA name. */
if (nametext == NULL) if (nametext == NULL) {
nametext = next_token(lex, text); nametext = next_token(lex, text);
if (nametext == NULL) }
if (nametext == NULL) {
return (ISC_R_UNEXPECTEDEND); return (ISC_R_UNEXPECTEDEND);
}
/* Copy nametext as it'll be overwritten by next_token() */ /* Copy nametext as it'll be overwritten by next_token() */
strlcpy(namebuf, nametext, DNS_NAME_FORMATSIZE); strlcpy(namebuf, nametext, DNS_NAME_FORMATSIZE);
if (strcmp(namebuf, ".") == 0) if (strcmp(namebuf, ".") == 0) {
ntaname = dns_rootname; ntaname = dns_rootname;
else { } else {
isc_buffer_t b; isc_buffer_t b;
isc_buffer_init(&b, namebuf, strlen(namebuf)); isc_buffer_init(&b, namebuf, strlen(namebuf));
isc_buffer_add(&b, strlen(namebuf)); isc_buffer_add(&b, strlen(namebuf));
...@@ -14351,6 +14372,10 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14351,6 +14372,10 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
continue; continue;
} }
if (view->rdclass != rdclass && rdclass != dns_rdataclass_any) {
continue;
}
if (view->nta_lifetime == 0) { if (view->nta_lifetime == 0) {
continue; continue;
} }
...@@ -14436,10 +14461,12 @@ named_server_nta(named_server_t *server, isc_lex_t *lex, ...@@ -14436,10 +14461,12 @@ named_server_nta(named_server_t *server, isc_lex_t *lex,
(void) putstr(text, msg); (void) putstr(text, msg);
(void) putnull(text); (void) putnull(text);
} }
if (excl) if (excl) {
isc_task_endexclusive(server->task); isc_task_endexclusive(server->task);
if (ntatable != NULL) }
if (ntatable != NULL) {
dns_ntatable_detach(&ntatable); dns_ntatable_detach(&ntatable);
}
return (result); return (result);
} }
......
...@@ -575,7 +575,7 @@ ...@@ -575,7 +575,7 @@
<varlistentry> <varlistentry>
<term><userinput>nta <term><userinput>nta
<optional>( -d | -f | -r | -l <replaceable>duration</replaceable>)</optional> <optional>( -class <replaceable>class</replaceable> | -dump | -force | -remove | -lifetime <replaceable>duration</replaceable>)</optional>
<replaceable>domain</replaceable> <replaceable>domain</replaceable>
<optional><replaceable>view</replaceable></optional> <optional><replaceable>view</replaceable></optional>
</userinput></term> </userinput></term>
...@@ -623,7 +623,7 @@ ...@@ -623,7 +623,7 @@
is equivalent to <option>-remove</option>. is equivalent to <option>-remove</option>.
</para> </para>
<para> <para>
If <option>-dump</option> is used, any other arguments If the <option>-dump</option> is used, any other arguments
are ignored, and a list of existing NTAs is printed are ignored, and a list of existing NTAs is printed
(note that this may include NTAs that are expired but (note that this may include NTAs that are expired but
have not yet been cleaned up). have not yet been cleaned up).
...@@ -640,10 +640,15 @@ ...@@ -640,10 +640,15 @@
lifetime, regardless of whether data could be lifetime, regardless of whether data could be
validated if the NTA were not present. validated if the NTA were not present.
</para> </para>
<para>
The view class can be specified with <option>-class</option>.
The default is class <userinput>IN</userinput>, which is
the only class for which DNSSEC is currently supported.
</para>
<para> <para>
All of these options can be shortened, i.e., to All of these options can be shortened, i.e., to
<option>-l</option>, <option>-r</option>, <option>-d</option>, <option>-l</option>, <option>-r</option>, <option>-d</option>,
and <option>-f</option>. <option>-f</option>, and <option>-c</option>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
rm -f dig.out.*.test* rm -f dig.out.*.test*
rm -f ns*/named.lock rm -f ns*/named.lock
rm -f ns*/named.memstats rm -f ns*/named.memstats
rm -f ns*/named.run rm -f ns*/named.run ns*/named.run.prev
rm -f ns2/named.stats rm -f ns2/named.stats
rm -f ns2/nil.db ns2/other.db ns2/static.db ns2/*.jnl rm -f ns2/nil.db ns2/other.db ns2/static.db ns2/*.jnl
rm -f ns2/session.key rm -f ns2/session.key
......
...@@ -486,6 +486,22 @@ grep "NTA lifetime cannot exceed one week" rndc.out.4.test$n > /dev/null || ret= ...@@ -486,6 +486,22 @@ grep "NTA lifetime cannot exceed one week" rndc.out.4.test$n > /dev/null || ret=
if [ $ret != 0 ]; then echo_i "failed"; fi if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret` status=`expr $status + $ret`
n=`expr $n + 1`
echo_i "testing rndc nta -class option ($n)"
ret=0
nextpart ns4/named.run > /dev/null
$RNDCCMD4 nta -c in nta1.example > rndc.out.1.test$n 2>&1
nextpart ns4/named.run | grep "added NTA 'nta1.example'" > /dev/null || ret=1
$RNDCCMD4 nta -c any nta1.example > rndc.out.2.test$n 2>&1
nextpart ns4/named.run | grep "added NTA 'nta1.example'" > /dev/null || ret=1
$RNDCCMD4 nta -c ch nta1.example > rndc.out.3.test$n 2>&1
nextpart ns4/named.run | grep "added NTA 'nta1.example'" > /dev/null && ret=1
$RNDCCMD4 nta -c fake nta1.example > rndc.out.4.test$n 2>&1
nextpart ns4/named.run | grep "added NTA 'nta1.example'" > /dev/null && ret=1
grep 'unknown class' rndc.out.4.test$n > /dev/null || ret=1
if [ $ret != 0 ]; then echo_i "failed"; fi
status=`expr $status + $ret`
for i in 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 for i in 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288
do do
n=`expr $n + 1` n=`expr $n + 1`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment