2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 06:55:30 +00:00

add -class option to rndc nta

This commit is contained in:
Evan Hunt
2018-09-03 23:55:29 -07:00
parent 83dc5a704a
commit cc0abf62a1
4 changed files with 65 additions and 17 deletions

View File

@@ -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,
/* 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,
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,
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,
} }
/* 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,
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,
(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);
} }

View File

@@ -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 @@
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 @@
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>

View File

@@ -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

View File

@@ -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`