cfg_aclconfctx_t *actx, isc_log_t *logctx, isc_mem_t *mctx)
{
const char *znamestr;
- const char *typestr;
+ const char *typestr = NULL;
unsigned int ztype;
const cfg_obj_t *zoptions, *goptions = NULL;
const cfg_obj_t *obj = NULL;
obj = NULL;
(void)cfg_map_get(zoptions, "in-view", &obj);
if (obj != NULL) {
- const cfg_obj_t *fwd = NULL;
- unsigned int maxopts = 1;
- (void)cfg_map_get(zoptions, "forward", &fwd);
- if (fwd != NULL)
- maxopts++;
- fwd = NULL;
- (void)cfg_map_get(zoptions, "forwarders", &fwd);
- if (fwd != NULL)
- maxopts++;
- if (cfg_map_count(zoptions) > maxopts) {
+ ztype = CFG_ZONE_INVIEW;
+ } else {
+ obj = NULL;
+ (void)cfg_map_get(zoptions, "type", &obj);
+ if (obj == NULL) {
cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
- "zone '%s': 'in-view' used "
- "with incompatible zone options",
- znamestr);
+ "zone '%s': type not present", znamestr);
return (ISC_R_FAILURE);
}
- return (ISC_R_SUCCESS);
- }
-
- obj = NULL;
- (void)cfg_map_get(zoptions, "type", &obj);
- if (obj == NULL) {
- cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
- "zone '%s': type not present", znamestr);
- return (ISC_R_FAILURE);
- }
-
- typestr = cfg_obj_asstring(obj);
- if (strcasecmp(typestr, "master") == 0 ||
- strcasecmp(typestr, "primary") == 0)
- {
- ztype = CFG_ZONE_MASTER;
- } else if (strcasecmp(typestr, "slave") == 0 ||
- strcasecmp(typestr, "secondary") == 0)
- {
- ztype = CFG_ZONE_SLAVE;
- } else if (strcasecmp(typestr, "stub") == 0) {
- ztype = CFG_ZONE_STUB;
- } else if (strcasecmp(typestr, "static-stub") == 0) {
- ztype = CFG_ZONE_STATICSTUB;
- } else if (strcasecmp(typestr, "forward") == 0) {
- ztype = CFG_ZONE_FORWARD;
- } else if (strcasecmp(typestr, "hint") == 0) {
- ztype = CFG_ZONE_HINT;
- } else if (strcasecmp(typestr, "delegation-only") == 0) {
- ztype = CFG_ZONE_DELEGATION;
- } else if (strcasecmp(typestr, "redirect") == 0) {
- ztype = CFG_ZONE_REDIRECT;
- } else {
- cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
- "zone '%s': invalid type %s",
- znamestr, typestr);
- return (ISC_R_FAILURE);
- }
-
- if (ztype == CFG_ZONE_REDIRECT && strcmp(znamestr, ".") != 0) {
- cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
- "redirect zones must be called \".\"");
- return (ISC_R_FAILURE);
- }
- obj = cfg_tuple_get(zconfig, "class");
- if (cfg_obj_isstring(obj)) {
- isc_textregion_t r;
- DE_CONST(cfg_obj_asstring(obj), r.base);
- r.length = strlen(r.base);
- result = dns_rdataclass_fromtext(&zclass, &r);
- if (result != ISC_R_SUCCESS) {
+ typestr = cfg_obj_asstring(obj);
+ if (strcasecmp(typestr, "master") == 0 ||
+ strcasecmp(typestr, "primary") == 0)
+ {
+ ztype = CFG_ZONE_MASTER;
+ } else if (strcasecmp(typestr, "slave") == 0 ||
+ strcasecmp(typestr, "secondary") == 0)
+ {
+ ztype = CFG_ZONE_SLAVE;
+ } else if (strcasecmp(typestr, "stub") == 0) {
+ ztype = CFG_ZONE_STUB;
+ } else if (strcasecmp(typestr, "static-stub") == 0) {
+ ztype = CFG_ZONE_STATICSTUB;
+ } else if (strcasecmp(typestr, "forward") == 0) {
+ ztype = CFG_ZONE_FORWARD;
+ } else if (strcasecmp(typestr, "hint") == 0) {
+ ztype = CFG_ZONE_HINT;
+ } else if (strcasecmp(typestr, "delegation-only") == 0) {
+ ztype = CFG_ZONE_DELEGATION;
+ } else if (strcasecmp(typestr, "redirect") == 0) {
+ ztype = CFG_ZONE_REDIRECT;
+ } else {
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
- "zone '%s': invalid class %s",
- znamestr, r.base);
+ "zone '%s': invalid type %s",
+ znamestr, typestr);
return (ISC_R_FAILURE);
}
- if (zclass != defclass) {
- cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
- "zone '%s': class '%s' does not "
- "match view/default class",
- znamestr, r.base);
+
+ if (ztype == CFG_ZONE_REDIRECT && strcmp(znamestr, ".") != 0) {
+ cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
+ "redirect zones must be called \".\"");
return (ISC_R_FAILURE);
}
+ obj = cfg_tuple_get(zconfig, "class");
+ if (cfg_obj_isstring(obj)) {
+ isc_textregion_t r;
+
+ DE_CONST(cfg_obj_asstring(obj), r.base);
+ r.length = strlen(r.base);
+ result = dns_rdataclass_fromtext(&zclass, &r);
+ if (result != ISC_R_SUCCESS) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "zone '%s': invalid class %s",
+ znamestr, r.base);
+ return (ISC_R_FAILURE);
+ }
+ if (zclass != defclass) {
+ cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
+ "zone '%s': class '%s' does not "
+ "match view/default class",
+ znamestr, r.base);
+ return (ISC_R_FAILURE);
+ }
+ }
}
/*
ula = ISC_TRUE;
}
+ if (ztype == CFG_ZONE_INVIEW) {
+ const cfg_obj_t *fwd = NULL;
+ unsigned int maxopts = 1;
+
+ (void)cfg_map_get(zoptions, "forward", &fwd);
+ if (fwd != NULL)
+ maxopts++;
+ fwd = NULL;
+ (void)cfg_map_get(zoptions, "forwarders", &fwd);
+ if (fwd != NULL)
+ maxopts++;
+ if (cfg_map_count(zoptions) > maxopts) {
+ cfg_obj_log(zconfig, logctx, ISC_LOG_ERROR,
+ "zone '%s': 'in-view' used "
+ "with incompatible zone options",
+ znamestr);
+ if (result == ISC_R_SUCCESS)
+ result = ISC_R_FAILURE;
+ }
+ return (result);
+ }
+
/*
* Check if value is zero.
*/