net-dns/bind: Fix compilation with dyndb and dlopen, bug 600212, thanks to all involved'
authorChristian Ruppert <idl0r@gentoo.org>
Fri, 9 Jun 2017 17:35:18 +0000 (19:35 +0200)
committerChristian Ruppert <idl0r@gentoo.org>
Fri, 9 Jun 2017 17:35:18 +0000 (19:35 +0200)
Package-Manager: Portage-2.3.6, Repoman-2.3.2

net-dns/bind/bind-9.11.0_p5.ebuild
net-dns/bind/files/bind-9.11.0_p5-dyndb-dlopen.patch [new file with mode: 0644]

index 7b82a67324450e76afd45da4ba92c4b45a114113..887f9abcb523b9a591a185f1238fa5d51eee1b3b 100644 (file)
@@ -100,6 +100,9 @@ pkg_setup() {
 }
 
 src_prepare() {
+       # bug 600212
+       epatch "${FILESDIR}"/${P}-dyndb-dlopen.patch
+
        # Adjusting PATHs in manpages
        for i in bin/{named/named.8,check/named-checkconf.8,rndc/rndc.8} ; do
                sed -i \
diff --git a/net-dns/bind/files/bind-9.11.0_p5-dyndb-dlopen.patch b/net-dns/bind/files/bind-9.11.0_p5-dyndb-dlopen.patch
new file mode 100644 (file)
index 0000000..5fc8f3c
--- /dev/null
@@ -0,0 +1,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
+