summaryrefslogtreecommitdiff
path: root/lib/dns/config/confview.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dns/config/confview.c')
-rw-r--r--lib/dns/config/confview.c107
1 files changed, 100 insertions, 7 deletions
diff --git a/lib/dns/config/confview.c b/lib/dns/config/confview.c
index b272401e..9e38aaad 100644
--- a/lib/dns/config/confview.c
+++ b/lib/dns/config/confview.c
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: confview.c,v 1.62 2000/12/01 23:27:42 marka Exp $ */
+/* $Id: confview.c,v 1.66 2000/12/13 00:15:24 tale Exp $ */
#include <config.h>
@@ -143,6 +143,8 @@ PVT_CONCAT(dns_c_view_unset, FUNCNAME)(dns_c_view_t *view) { \
} \
}
+
+
#define BYTYPE_FUNCS(TYPE, FUNC, FIELD) \
SETBYTYPE(TYPE, FUNC, FIELD) \
GETBYTYPE(TYPE, FUNC, FIELD) \
@@ -210,6 +212,64 @@ PVT_CONCAT(dns_c_view_get, FUNCNAME)(dns_c_view_t *view, \
UNSETIPMLIST(FUNC, FIELD)
+#define SETSTRING(FUNC, FIELD) \
+isc_result_t \
+PVT_CONCAT(dns_c_view_set, FUNC)(dns_c_view_t *view, const char *newval) \
+{ \
+ char *p = NULL; \
+ \
+ REQUIRE(DNS_C_VIEW_VALID(view)); \
+ REQUIRE(newval != NULL); \
+ REQUIRE(*newval != '\0'); \
+ \
+ if (newval != NULL) { \
+ p = isc_mem_strdup(view->mem, newval); \
+ if (p == NULL) \
+ return (ISC_R_NOMEMORY); \
+ } \
+ if (view->FIELD != NULL) { \
+ isc_mem_free(view->mem, view->FIELD); \
+ view->FIELD = NULL; \
+ } \
+ view->FIELD = p; \
+ return (ISC_R_SUCCESS); \
+}
+
+
+#define GETSTRING(FUNC, FIELD) \
+isc_result_t \
+PVT_CONCAT(dns_c_view_get, FUNC)(dns_c_view_t *view, char **retval) \
+{ \
+ REQUIRE(DNS_C_VIEW_VALID(view)); \
+ REQUIRE(retval != NULL); \
+ \
+ *retval = view->FIELD; \
+ \
+ return (*retval == NULL ? ISC_R_NOTFOUND : ISC_R_SUCCESS); \
+}
+
+
+#define UNSETSTRING(FUNC, FIELD) \
+isc_result_t \
+PVT_CONCAT(dns_c_view_unset, FUNC)(dns_c_view_t *view) \
+{ \
+ REQUIRE(DNS_C_VIEW_VALID(view)); \
+ \
+ if (view->FIELD == NULL) { \
+ return (ISC_R_NOTFOUND); \
+ } \
+ \
+ isc_mem_free(view->mem, view->FIELD); \
+ view->FIELD = NULL; \
+ \
+ return (ISC_R_SUCCESS); \
+}
+
+#define STRING_FUNCS(FUNC, FIELD) \
+ SETSTRING(FUNC, FIELD) \
+ GETSTRING(FUNC, FIELD) \
+ UNSETSTRING(FUNC, FIELD)
+
isc_result_t
dns_c_viewtable_new(isc_mem_t *mem, dns_c_viewtable_t **viewtable) {
dns_c_viewtable_t *table;
@@ -470,6 +530,7 @@ dns_c_view_new(isc_mem_t *mem, const char *name, dns_rdataclass_t viewclass,
view->forwarders = NULL;
view->also_notify = NULL;
+ view->allownotify = NULL;
view->allowquery = NULL;
view->allowupdateforwarding = NULL;
view->transferacl = NULL;
@@ -526,6 +587,8 @@ dns_c_view_new(isc_mem_t *mem, const char *name, dns_rdataclass_t viewclass,
view->trusted_keys = NULL;
+ view->cache_file = NULL;
+
#if 0
view->max_transfer_time_in = NULL;
view->max_transfer_idle_in = NULL;
@@ -563,7 +626,24 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
port = isc_sockaddr_getport(view->FIELD); \
\
dns_c_printtabs(fp, indent + 1); \
- fprintf(fp, NAME " address "); \
+ fprintf(fp, "%s ", NAME); \
+ \
+ dns_c_print_ipaddr(fp, view->FIELD); \
+ \
+ if (port == 0) { \
+ fprintf(fp, " port *"); \
+ } else { \
+ fprintf(fp, " port %d", port); \
+ } \
+ fprintf(fp, " ;\n"); \
+ }
+
+#define PRINT_QUERYSOURCE(FIELD, NAME) \
+ if (view->FIELD != NULL) { \
+ port = isc_sockaddr_getport(view->FIELD); \
+ \
+ dns_c_printtabs(fp, indent + 1); \
+ fprintf(fp, "%s address ", NAME); \
\
dns_c_print_ipaddr(fp, view->FIELD); \
\
@@ -610,6 +690,7 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
fputs("no", fp); \
else \
fputs("explicit", fp); \
+ fprintf(fp, ";\n"); \
}
#define PRINT_AS_DIALUPTYPE(FIELD, NAME) \
@@ -644,6 +725,13 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
(unsigned long)(*view->FIELD / 60)); \
}
+#define PRINT_AS_DAYS(FIELD, NAME) \
+ if (view->FIELD != NULL) { \
+ dns_c_printtabs(fp, indent + 1); \
+ fprintf(fp, "%s %lu;\n",NAME, \
+ (unsigned long)(*view->FIELD / (24 * 60 * 60))); \
+ }
+
#define PRINT_AS_SIZE_CLAUSE(FIELD, NAME) \
if (view->FIELD != NULL) { \
dns_c_printtabs(fp, indent + 1); \
@@ -679,6 +767,7 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
fprintf(fp, ";\n");
}
+ PRINT_IPMLIST(allownotify, "allow-notify");
PRINT_IPMLIST(allowquery, "allow-query");
PRINT_IPMLIST(allowupdateforwarding, "allow-update-forwarding");
PRINT_IPMLIST(transferacl, "alllow-transfer");
@@ -737,8 +826,8 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
PRINT_IPANDPORT(transfer_source, "transfer-source");
PRINT_IPANDPORT(transfer_source_v6, "transfer-source-v6");
- PRINT_IPANDPORT(query_source, "query-source");
- PRINT_IPANDPORT(query_source_v6, "query-source-v6");
+ PRINT_QUERYSOURCE(query_source, "query-source");
+ PRINT_QUERYSOURCE(query_source_v6, "query-source-v6");
PRINT_AS_MINUTES(max_transfer_time_out, "max-transfer-time-out");
PRINT_AS_MINUTES(max_transfer_idle_out, "max-transfer-idle-out");
@@ -748,14 +837,13 @@ dns_c_view_print(FILE *fp, int indent, dns_c_view_t *view) {
PRINT_INT32(lamettl, "lame-ttl");
PRINT_INT32(max_ncache_ttl, "max-ncache-ttl");
PRINT_INT32(max_cache_ttl, "max-cache-ttl");
- PRINT_INT32(sig_valid_interval, "sig-validity-interval");
+ PRINT_AS_DAYS(sig_valid_interval, "sig-validity-interval");
PRINT_INT32(min_retry_time, "min-retry-time");
PRINT_INT32(max_retry_time, "max-retry-time");
PRINT_INT32(min_refresh_time, "min-refresh-time");
PRINT_INT32(max_refresh_time, "max-refresh-time");
-
PRINT_AS_SIZE_CLAUSE(max_cache_size, "max-cache-size");
if (view->additional_data != NULL) {
@@ -850,6 +938,7 @@ dns_c_view_delete(dns_c_view_t **viewptr) {
dns_c_iplist_detach(&view->also_notify);
}
+ FREEIPMLIST(allownotify);
FREEIPMLIST(allowquery);
FREEIPMLIST(allowupdateforwarding);
FREEIPMLIST(transferacl);
@@ -910,6 +999,8 @@ dns_c_view_delete(dns_c_view_t **viewptr) {
dns_c_view_unsettrustedkeys(view);
+ dns_c_view_unsetcachefile(view);
+
#if 0
FREEFIELD(max_transfer_time_in);
FREEFIELD(max_transfer_idle_in);
@@ -1494,6 +1585,7 @@ dns_c_view_settrustedkeys(dns_c_view_t *view, dns_c_tkeylist_t *newval,
**
*/
+IPMLIST_FUNCS(allownotify, allownotify)
IPMLIST_FUNCS(allowquery, allowquery)
IPMLIST_FUNCS(allowupdateforwarding, allowupdateforwarding)
IPMLIST_FUNCS(transferacl, transferacl)
@@ -1524,6 +1616,8 @@ SOCKADDR_FUNCS(transfersourcev6, transfer_source_v6)
SOCKADDR_FUNCS(querysource, query_source)
SOCKADDR_FUNCS(querysourcev6, query_source_v6)
+STRING_FUNCS(cachefile, cache_file)
+
UINT32_FUNCS(maxtransfertimeout, max_transfer_time_out)
UINT32_FUNCS(maxtransferidleout, max_transfer_idle_out)
UINT32_FUNCS(cleaninterval, clean_interval)
@@ -1539,7 +1633,6 @@ UINT32_FUNCS(maxretrytime, max_retry_time)
UINT32_FUNCS(minrefreshtime, min_refresh_time)
UINT32_FUNCS(maxrefreshtime, max_refresh_time)
-
BYTYPE_FUNCS(dns_c_addata_t, additionaldata, additional_data)
BYTYPE_FUNCS(dns_transfer_format_t, transferformat, transfer_format)