summaryrefslogtreecommitdiff
blob: 5fc8f3c188970bac4258bb821e14fd09d3cdedd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
From ae903759c205f8a5039458d780c0e0c4442b7291 Mon Sep 17 00:00:00 2001
From: Mark Andrews <marka@isc.org>
Date: Tue, 30 May 2017 11:31:34 +1000
Subject: [PATCH] 4530.   [bug]           "dyndb" is dependent on dlopen
 existing / being                         enabled. [RT #45291]

From aa3a8979bc7eb1596d044eff572b3c35310584fa Mon Sep 17 00:00:00 2001
From: Mark Andrews <marka@isc.org>
Date: Tue, 30 May 2017 11:34:37 +1000
Subject: [PATCH] 4530.   [bug]           "dyndb" is dependent on dlopen
 existing / being                         enabled. [RT #45291]

diff --git a/lib/dns/dyndb.c b/lib/dns/dyndb.c
index a477508..dec68a7 100644
--- a/lib/dns/dyndb.c
+++ b/lib/dns/dyndb.c
@@ -80,7 +80,7 @@ impfind(const char *name) {
 	return (NULL);
 }
 
-#if HAVE_DLFCN_H
+#if HAVE_DLFCN_H && HAVE_DLOPEN
 static isc_result_t
 load_symbol(void *handle, const char *filename,
 	    const char *symbol_name, void **symbolp)
--- a/bin/named/server.c
+++ b/bin/named/server.c
@@ -1496,6 +1496,7 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) {
 	return (result);
 }
 
+#ifdef HAVE_DLOPEN
 static isc_result_t
 configure_dyndb(const cfg_obj_t *dyndb, isc_mem_t *mctx,
 		const dns_dyndbctx_t *dctx)
@@ -1521,6 +1522,7 @@ configure_dyndb(const cfg_obj_t *dyndb, isc_mem_t *mctx,
 			      name, isc_result_totext(result));
 	return (result);
 }
+#endif
 
 
 static isc_result_t
@@ -4669,6 +4671,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
 	else
 		(void)cfg_map_get(config, "dyndb", &dyndb_list);
 
+#ifdef HAVE_DLOPEN
 	for (element = cfg_list_first(dyndb_list);
 	     element != NULL;
 	     element = cfg_list_next(element))
@@ -4686,6 +4689,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist,
 
 		CHECK(configure_dyndb(dyndb, mctx, dctx));
 	}
+#endif
 
 	/*
 	 * Setup automatic empty zones.  If recursion is off then
diff --git a/lib/bind9/check.c b/lib/bind9/check.c
index 097dd96..99b995c 100644
--- a/lib/bind9/check.c
+++ b/lib/bind9/check.c
@@ -2988,6 +2988,9 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions,
 {
 	const cfg_obj_t *zones = NULL;
 	const cfg_obj_t *keys = NULL;
+#ifndef HAVE_DLOPEN
+	const cfg_obj_t *dyndb = NULL;
+#endif
 	const cfg_listelt_t *element, *element2;
 	isc_symtab_t *symtab = NULL;
 	isc_result_t result = ISC_R_SUCCESS;
@@ -3041,6 +3044,20 @@ check_viewconf(const cfg_obj_t *config, const cfg_obj_t *voptions,
 			result = ISC_R_FAILURE;
 	}
 
+#ifndef HAVE_DLOPEN
+	if (voptions != NULL)
+		(void)cfg_map_get(voptions, "dyndb", &dyndb);
+	else
+		(void)cfg_map_get(config, "dyndb", &dyndb);
+
+	if (dyndb != NULL) {
+		cfg_obj_log(dyndb, logctx, ISC_LOG_ERROR,
+			    "dynamic loading of databases is not supported");
+		if (tresult != ISC_R_SUCCESS)
+			result = ISC_R_NOTIMPLEMENTED;
+	}
+#endif
+
 	/*
 	 * Check that the response-policy and catalog-zones options
 	 * refer to zones that exist.
-- 
2.9.0