zoneconf.c revision ac21f918f23ce95fd5be807428ee9e2c42319878
bf8267aa453e5d2a735ed732a043b77a0b355b20Mark Andrews * Copyright (C) 2004-2011 Internet Systems Consortium, Inc. ("ISC")
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 1999-2003 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and/or distribute this software for any
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * purpose with or without fee is hereby granted, provided that the above
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * copyright notice and this permission notice appear in all copies.
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews * PERFORMANCE OF THIS SOFTWARE.
a27bbd21cf07371fc71e7ade75c3d78a5b98b7f9Mark Andrews/* $Id: zoneconf.c,v 1.176 2011/05/06 21:23:50 each Exp $ */
ff6de396a93b9b73a37173059a595f3d295b57cbMark Andrews#include <isc/string.h> /* Required for HP/UX (and others?) */
8f25faf9720a0c2730c4ac80ea4c12ca1f25599fMukund Sivaraman/* ACLs associated with zone */
8f25faf9720a0c2730c4ac80ea4c12ca1f25599fMukund Sivaramantypedef enum {
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt#define RETERR(x) do { \
67adc03ef81fb610f8df093b17f55275ee816754Evan Hunt return (_r); \
e45d0508c3460db87afb1f743bc5210522721bb3Evan Hunt#define CHECK(x) do { \
de7df3e56fe99c33a415674b018aae93eee94750Evan Hunt * Convenience function for configuring a single zone ACL.
ac436908582fe08c85c886b200664816b11fded6Mark Andrewsconfigure_zone_acl(const cfg_obj_t *zconfig, const cfg_obj_t *vconfig,
2bef3713093349af52ba61eaab07adf3207da873Mark Andrews const cfg_obj_t *maps[5] = {NULL, NULL, NULL, NULL, NULL};
820fdd61dd35e359a8e616031209d074a7140d97Evan Hunt const char *aclname;
f46168b87966f679a22aaf494c555f0de821aff9Evan Hunt /* First check to see if ACL is defined within the zone */
1e34fe9044874422104e84373988d07876f716b6Mark Andrews /* Failing that, see if there's a default ACL already in the view */
1e34fe9044874422104e84373988d07876f716b6Mark Andrews /* Check for default ACLs that haven't been parsed yet */
1e34fe9044874422104e84373988d07876f716b6Mark Andrews const cfg_obj_t *options = cfg_tuple_get(vconfig, "options");
c14ba7107063650e7f4329e8c54adca57913381bEvan Hunt result = cfg_acl_fromconfig(aclobj, config, ns_g_lctx, actx,
35f6a21f5f8114542c050bfcb484b39ce513d4bdEvan Hunt /* Set the view default now */
35f6a21f5f8114542c050bfcb484b39ce513d4bdEvan Hunt * Parse the zone update-policy statement.
c14ba7107063650e7f4329e8c54adca57913381bEvan Huntconfigure_zone_ssutable(const cfg_obj_t *zconfig, dns_zone_t *zone,
baad8d9fd8dd054ce1edf350ff0c0f2038a1519eEvan Hunt const char *zname)
baad8d9fd8dd054ce1edf350ff0c0f2038a1519eEvan Hunt (void)cfg_map_get(zconfig, "update-policy", &updatepolicy);
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman strcmp("local", cfg_obj_asstring(updatepolicy)) == 0) {
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman result = dns_ssutable_create(mctx, &table);
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman for (element = cfg_list_first(updatepolicy);
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *stmt = cfg_listelt_value(element);
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *mode = cfg_tuple_get(stmt, "mode");
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *identity = cfg_tuple_get(stmt, "identity");
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *matchtype = cfg_tuple_get(stmt, "matchtype");
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *dname = cfg_tuple_get(stmt, "name");
0c29904b27c9ab3b85ecbde159b22ae1323bdbcdMukund Sivaraman const cfg_obj_t *typelist = cfg_tuple_get(stmt, "types");
0c2313eb367de3b58801d643d52c0fd9bc0e5df7Evan Hunt const char *str;
0c2313eb367de3b58801d643d52c0fd9bc0e5df7Evan Hunt unsigned int i, n;
fbd9aaa58c32abaeab1bd3ca6943b18ce19ea023Mark Andrews result = dns_name_fromtext(dns_fixedname_name(&fident), &b,
075a3d60c23140f05db10d70126ff271ef6469c9Mark Andrews cfg_obj_log(identity, ns_g_lctx, ISC_LOG_ERROR,
e6d0a391f5f9b18f5bd497aefff269e474ee560cWitold Krecicki result = dns_name_copy(dns_zone_getorigin(zone),
e6d0a391f5f9b18f5bd497aefff269e474ee560cWitold Krecicki cfg_obj_log(identity, ns_g_lctx, ISC_LOG_ERROR,
7382f5160274938d143d82bda1941b32822dac53Mark Andrews "error copying origin: %s",
7382f5160274938d143d82bda1941b32822dac53Mark Andrews result = dns_name_fromtext(dns_fixedname_name(&fname),
7382f5160274938d143d82bda1941b32822dac53Mark Andrews cfg_obj_log(identity, ns_g_lctx, ISC_LOG_ERROR,
7382f5160274938d143d82bda1941b32822dac53Mark Andrews 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;
if (autoddns) {
zname);
goto cleanup;
goto cleanup;
return (result);
* For example, for the zone named "example.com", the following RRs will be
* example.com. A 192.0.2.1
* example.com. AAAA 2001:db8::1
static isc_result_t
return (ISC_R_FAILURE);
return (ISC_R_FAILURE);
case AF_INET:
return (ISC_R_NOMEMORY);
return (ISC_R_SUCCESS);
return (ISC_R_NOMEMORY);
return (result);
* For example, for the zone named "example.com", something like the following
* example.com. NS ns.example.net.
static isc_result_t
const char *str;
isc_buffer_t b;
return (result);
return (ISC_R_FAILURE);
return (ISC_R_NOMEMORY);
return (result);
static isc_result_t
goto cleanup;
zname);
goto cleanup;
goto cleanup;
goto cleanup;
goto cleanup;
== ISC_R_SUCCESS);
0, NULL);
goto cleanup;
== ISC_R_SUCCESS);
goto cleanup;
&rdataset)
== ISC_R_SUCCESS);
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;
int seconds;
return(ISC_R_NOMEMORY);
return (result);
return (result);
zname);
return (ISC_R_FAILURE);
INSIST(0);
INSIST(0);
if (zonestats_on) {
INSIST(0);
&addrcount));
value);
INSIST(0);
value);
zname);
INSIST(0);
INSIST(0);
INSIST(0);
INSIST(0);
INSIST(0);
switch (ztype) {
case dns_zone_slave:
case dns_zone_stub:
case dns_zone_redirect:
count = 0;
&count));
count);
case dns_zone_staticstub:
return (ISC_R_SUCCESS);
return result;
return result;
const char *cfilename;
const char *zfilename;
return (ISC_FALSE);
return (ISC_FALSE);
return (ISC_FALSE);
return (ISC_TRUE);