zoneconf.c revision 70e5a7403f0e0a3bd292b8287c5fed5772c15270
c40e033d2170ec5bd55124bbb034528888b1a76fTinderbox User * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * Copyright (C) 1999-2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * copyright notice and this permission notice appear in all copies.
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/* $Id: zoneconf.c,v 1.137 2007/06/19 23:46:59 tbox Exp $ */
22bed621ef87bc8b6c1fea599b02c4b38dd6bf48Mark Andrews#include <isc/string.h> /* Required for HP/UX (and others?) */
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt * These are BIND9 server defaults, not necessarily identical to the
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt * library defaults defined in zone.c.
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt#define RETERR(x) do { \
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt return (_r); \
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews * Convenience function for configuring a single zone ACL.
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Huntconfigure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews (void)cfg_map_get(config, "options", &options);
76af83c9adb772f7b045c62cf8b411165bfaa5efMark Andrews result = ns_config_get(maps, aclname, &aclobj);
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt result = cfg_acl_fromconfig(aclobj, config, ns_g_lctx, actx,
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * Parse the zone update-policy statement.
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsconfigure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews (void)cfg_map_get(zconfig, "update-policy", &updatepolicy);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews const cfg_obj_t *stmt = cfg_listelt_value(element);
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const cfg_obj_t *mode = cfg_tuple_get(stmt, "mode");
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const cfg_obj_t *identity = cfg_tuple_get(stmt, "identity");
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const cfg_obj_t *matchtype = cfg_tuple_get(stmt, "matchtype");
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const cfg_obj_t *dname = cfg_tuple_get(stmt, "name");
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const cfg_obj_t *typelist = cfg_tuple_get(stmt, "types");
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt const char *str;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews unsigned int i, n;
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt result = dns_name_fromtext(dns_fixedname_name(&fident), &b,
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt result = dns_name_fromtext(dns_fixedname_name(&fname), &b,
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt types = isc_mem_get(mctx, n * sizeof(dns_rdatatype_t));
INSIST(i < n);
n * sizeof(dns_rdatatype_t));
goto cleanup;
INSIST(i == n);
n, types);
goto cleanup;
return (result);
static inline dns_zonetype_t
static isc_result_t
char ***argvp, unsigned int n)
*argcp = n;
return (ISC_R_NOMEMORY);
return (result);
(*argvp)[n] = s;
return (ISC_R_SUCCESS);
static isc_result_t
switch (ztype) {
INSIST(0);
const char *zname;
char *cpval;
unsigned int dbargc;
char **dbargv;
return(ISC_R_NOMEMORY);
return (result);
return (result);
INSIST(0);
INSIST(0);
INSIST(0);
return (result);
return (result);
value);
INSIST(0);
zname);
return (ISC_R_FAILURE);
INSIST(0);
INSIST(0);
INSIST(0);
zname);
return (ISC_R_FAILURE);
switch (ztype) {
case dns_zone_slave:
case dns_zone_stub:
count = 0;
&count));
count);
return (ISC_R_SUCCESS);
const char *cfilename;
const char *zfilename;
return (ISC_FALSE);
return (ISC_FALSE);
return (ISC_TRUE);