diff options
Diffstat (limited to 'package/bind/bind-dlopen.patch')
-rw-r--r-- | package/bind/bind-dlopen.patch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/package/bind/bind-dlopen.patch b/package/bind/bind-dlopen.patch new file mode 100644 index 000000000..b846d471b --- /dev/null +++ b/package/bind/bind-dlopen.patch @@ -0,0 +1,89 @@ +--- bind-9.3.1/bin/named/Makefile.in 2004-09-06 14:47:25.000000000 -0700 ++++ bind/bin/named/Makefile.in 2005-09-19 15:55:17.000000000 -0700 +@@ -29,7 +29,7 @@ + DBDRIVER_OBJS = + DBDRIVER_SRCS = + DBDRIVER_INCLUDES = +-DBDRIVER_LIBS = ++DBDRIVER_LIBS = -ldl + + CINCLUDES = -I${srcdir}/include -I${srcdir}/unix/include \ + ${LWRES_INCLUDES} ${DNS_INCLUDES} ${BIND9_INCLUDES} \ +diff -aur bind-9.3.1/bin/named/main.c bind/bin/named/main.c +--- bind-9.3.1/bin/named/main.c 2004-10-24 17:42:54.000000000 -0700 ++++ bind/bin/named/main.c 2005-09-14 10:49:28.000000000 -0700 +@@ -22,6 +22,7 @@ + #include <ctype.h> + #include <stdlib.h> + #include <string.h> ++#include <dlfcn.h> + + #include <isc/app.h> + #include <isc/commandline.h> +@@ -540,6 +541,7 @@ + static void + setup(void) { + isc_result_t result; ++ void *handle; + + /* + * Get the user and group information before changing the root +@@ -655,13 +657,33 @@ + /* + * Add calls to register sdb drivers here. + */ +- /* xxdb_init(); */ +- ++ handle = dlopen ("cadb.so", RTLD_NOW); ++ if (!handle) { ++ fprintf (stderr, "failed to load cadb driver: %s\n", dlerror()); ++ } else { ++ isc_result_t (*cadbinit)(void); ++ const char *error; ++ ++ dlerror(); /* Clear any existing error */ ++ *(void **) (&cadbinit) = dlsym(handle, "cadb_init"); ++ if ((error = dlerror()) != NULL) { ++ fprintf (stderr, "failing loading cadbinit symbol: %s\n", error); ++ exit(1); ++ } ++ ++ if((*cadbinit)() != ISC_R_SUCCESS) { ++ fprintf (stderr, "cadbinit failed"); ++ exit(1); ++ } ++ } ++ + ns_server_create(ns_g_mctx, &ns_g_server); + } + + static void + cleanup(void) { ++ void *handle; ++ + destroy_managers(); + + ns_server_destroy(&ns_g_server); +@@ -671,7 +693,21 @@ + /* + * Add calls to unregister sdb drivers here. + */ +- /* xxdb_clear(); */ ++ handle = dlopen ("cadb.so", RTLD_NOW); ++ if (!handle) { ++ fprintf (stderr, "failed to load cadb driver: %s\n", dlerror()); ++ } else { ++ isc_result_t (*cadbclear)(void); ++ const char *error; ++ ++ dlerror(); /* Clear any existing error */ ++ *(void **) (&cadbclear) = dlsym(handle, "cadb_clear"); ++ if ((error = dlerror()) != NULL) { ++ fprintf (stderr, "failing loading cadbclear symbol: %s\n", error); ++ } else { ++ (*cadbclear)(); ++ } ++ } + + isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN, + ISC_LOG_NOTICE, "exiting"); |