2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-03 16:15:27 +00:00

625. [func] Zone's now inherit their class from the enclosing view.

This commit is contained in:
Mark Andrews
2000-12-20 03:36:19 +00:00
parent 7cb10f7789
commit 2a80a4e120
3 changed files with 29 additions and 9 deletions

View File

@@ -1,3 +1,4 @@
625. [func] Zone's now inherit their class from the enclosing view.
624. [bug] The zone object could get timer events after it had 624. [bug] The zone object could get timer events after it had
been destroyed, causing a server crash. [RT #571] been destroyed, causing a server crash. [RT #571]

View File

@@ -2,7 +2,7 @@
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.0//EN" <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.0//EN"
"http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd"> "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">
<!-- File: $Id: Bv9ARM-book.xml,v 1.71 2000/12/19 19:48:06 gson Exp $ --> <!-- File: $Id: Bv9ARM-book.xml,v 1.72 2000/12/20 03:36:18 marka Exp $ -->
<book> <book>
@@ -3805,9 +3805,12 @@ Classes other than IN have no built-in defaults hints.</para></entry>
</tbody> </tbody>
</tgroup></informaltable></sect3> </tgroup></informaltable></sect3>
<sect3><title>Class</title> <sect3><title>Class</title>
<para>The zone's name may optionally be followed by a class. If <para>In general <command>class</command> can now be omitted from
a class is not specified, class <literal>IN</literal> (for <varname>Internet</varname>), a <command>zone's</command> definition.
is assumed. This is correct for the vast majority of cases.</para> It is now inherited for the enclosing <command>view</command> or if
there is no explicit <command>view</command>, from the default
<command>view</command> which is <literal>IN</literal>
(for <varname>Internet</varname>).</para>
<para>The <literal>hesiod</literal> class is <para>The <literal>hesiod</literal> class is
named for an information service from MIT's Project Athena. It is named for an information service from MIT's Project Athena. It is
used to share information about various systems databases, such used to share information about various systems databases, such

View File

@@ -33,7 +33,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: confparser.y.dirty,v 1.43 2000/12/13 00:15:23 tale Exp $ */ /* $Id: confparser.y.dirty,v 1.44 2000/12/20 03:36:19 marka Exp $ */
#include <config.h> #include <config.h>
@@ -3644,6 +3644,7 @@ secret: L_SECRET any_string L_EOS
view_stmt: L_VIEW any_string optional_class L_LBRACE view_stmt: L_VIEW any_string optional_class L_LBRACE
{ {
dns_c_view_t *view; dns_c_view_t *view;
dns_rdataclass_t rdclass;
if (currcfg->views == NULL) { if (currcfg->views == NULL) {
tmpres = dns_c_viewtable_new(currcfg->mem, tmpres = dns_c_viewtable_new(currcfg->mem,
@@ -3655,8 +3656,10 @@ view_stmt: L_VIEW any_string optional_class L_LBRACE
YYABORT; YYABORT;
} }
} }
rdclass = ($3 == dns_rdataclass_reserved0) ?
dns_rdataclass_in : $3;
tmpres = dns_c_view_new(currcfg->mem, $2, $3, &view); tmpres = dns_c_view_new(currcfg->mem, $2, rdclass, &view);
if (tmpres != ISC_R_SUCCESS) { if (tmpres != ISC_R_SUCCESS) {
isc_mem_free(memctx, $2); isc_mem_free(memctx, $2);
parser_error(ISC_FALSE, parser_error(ISC_FALSE,
@@ -4831,6 +4834,8 @@ domain_name: L_QSTRING
zone_stmt: L_ZONE domain_name optional_class L_LBRACE L_TYPE zone_type L_EOS zone_stmt: L_ZONE domain_name optional_class L_LBRACE L_TYPE zone_type L_EOS
{ {
dns_c_zone_t *zone; dns_c_zone_t *zone;
dns_c_view_t *view = dns_c_ctx_getcurrview(currcfg);
dns_rdataclass_t rdclass;
if (currcfg->zlist == NULL) { if (currcfg->zlist == NULL) {
tmpres = dns_c_zonelist_new(currcfg->mem, tmpres = dns_c_zonelist_new(currcfg->mem,
@@ -4844,10 +4849,17 @@ zone_stmt: L_ZONE domain_name optional_class L_LBRACE L_TYPE zone_type L_EOS
YYABORT; YYABORT;
} }
} }
rdclass = $3;
if (rdclass == dns_rdataclass_reserved0) {
if (view != NULL)
(void)dns_c_view_getviewclass(view, &rdclass);
else
rdclass = dns_rdataclass_in;
}
/* XXX internal name support needed! */ /* XXX internal name support needed! */
tmpres = dns_c_zone_new(currcfg->mem, tmpres = dns_c_zone_new(currcfg->mem,
$6, $3, $2, $2, &zone); $6, rdclass, $2, $2, &zone);
if (tmpres != ISC_R_SUCCESS) { if (tmpres != ISC_R_SUCCESS) {
isc_log_write(dns_lctx, DNS_LOGCATEGORY_CONFIG, isc_log_write(dns_lctx, DNS_LOGCATEGORY_CONFIG,
DNS_LOGMODULE_CONFIG, DNS_LOGMODULE_CONFIG,
@@ -4971,7 +4983,7 @@ wild_class_name: any_string
optional_class: /* Empty */ optional_class: /* Empty */
{ {
$$ = dns_rdataclass_in; $$ = dns_rdataclass_reserved0;
} }
| class_name | class_name
; ;
@@ -6021,8 +6033,12 @@ lwres_option: L_LISTEN_ON port_ip_list
| L_VIEW any_string optional_class | L_VIEW any_string optional_class
{ {
dns_c_lwres_t *lwres; dns_c_lwres_t *lwres;
dns_rdataclass_t rdclass;
lwres = ISC_LIST_TAIL(currcfg->lwres->lwreslist); lwres = ISC_LIST_TAIL(currcfg->lwres->lwreslist);
tmpres = dns_c_lwres_setview(lwres, $2, $3); rdclass = ($3 == dns_rdataclass_reserved0) ?
dns_rdataclass_in : $3;
tmpres = dns_c_lwres_setview(lwres, $2, rdclass);
if (tmpres == ISC_R_EXISTS) { if (tmpres == ISC_R_EXISTS) {
parser_error(ISC_FALSE, "cannot redefine view"); parser_error(ISC_FALSE, "cannot redefine view");
YYABORT; YYABORT;