]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- cachedb module framework (empty).
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 14 Apr 2016 14:50:18 +0000 (14:50 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 14 Apr 2016 14:50:18 +0000 (14:50 +0000)
git-svn-id: file:///svn/unbound/trunk@3698 be551aaa-1e26-0410-a405-d3ace91eadb9

Makefile.in
cachedb/cachedb.c [new file with mode: 0644]
cachedb/cachedb.h [new file with mode: 0644]
config.h.in
configure
configure.ac
doc/Changelog
services/modstack.c
smallapp/unbound-checkconf.c
util/fptr_wlist.c

index 289ce3717ea44d5abff773a349fd5818208a08ab..30d2e4213dec1d8e8026ddda9d2699f6243a95c8 100644 (file)
@@ -112,7 +112,7 @@ util/ub_event.c util/ub_event_pluggable.c util/winsock_event.c \
 validator/autotrust.c validator/val_anchor.c validator/validator.c \
 validator/val_kcache.c validator/val_kentry.c validator/val_neg.c \
 validator/val_nsec3.c validator/val_nsec.c validator/val_secalgo.c \
-validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c $(CHECKLOCK_SRC) \
+validator/val_sigcrypt.c validator/val_utils.c dns64/dns64.c cachedb/cachedb.c $(CHECKLOCK_SRC) \
 $(DNSTAP_SRC)
 COMMON_OBJ_WITHOUT_NETCALL=dns.lo infra.lo rrset.lo dname.lo msgencode.lo \
 as112.lo msgparse.lo msgreply.lo packed_rrset.lo iterator.lo iter_delegpt.lo \
@@ -123,7 +123,7 @@ fptr_wlist.lo locks.lo log.lo mini_event.lo module.lo net_help.lo \
 random.lo rbtree.lo regional.lo rtt.lo dnstree.lo lookup3.lo lruhash.lo \
 slabhash.lo timehist.lo tube.lo winsock_event.lo autotrust.lo val_anchor.lo \
 validator.lo val_kcache.lo val_kentry.lo val_neg.lo val_nsec3.lo val_nsec.lo \
-val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo \
+val_secalgo.lo val_sigcrypt.lo val_utils.lo dns64.lo cachedb.lo \
 $(PYTHONMOD_OBJ) $(CHECKLOCK_OBJ) $(DNSTAP_OBJ)
 COMMON_OBJ_WITHOUT_UB_EVENT=$(COMMON_OBJ_WITHOUT_NETCALL) netevent.lo listen_dnsport.lo \
 outside_network.lo
@@ -811,9 +811,9 @@ tube.lo tube.o: $(srcdir)/util/tube.c config.h $(srcdir)/util/tube.h $(srcdir)/u
  $(srcdir)/util/netevent.h $(srcdir)/util/fptr_wlist.h $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h \
  $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/packed_rrset.h \
  $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h $(srcdir)/sldns/rrdef.h $(srcdir)/services/mesh.h \
- $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h
+ $(srcdir)/util/rbtree.h $(srcdir)/services/modstack.h $(srcdir)/util/ub_event.h
 ub_event.lo ub_event.o: $(srcdir)/util/ub_event.c config.h $(srcdir)/util/ub_event.h $(srcdir)/util/log.h \
- $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
+ $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/util/mini_event.h $(srcdir)/util/rbtree.h
 ub_event_pluggable.lo ub_event_pluggable.o: $(srcdir)/util/ub_event_pluggable.c config.h $(srcdir)/util/ub_event.h \
  $(srcdir)/libunbound/unbound-event.h $(srcdir)/util/netevent.h $(srcdir)/util/log.h $(srcdir)/util/fptr_wlist.h \
  $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/module.h $(srcdir)/util/data/msgreply.h \
@@ -899,6 +899,10 @@ dns64.lo dns64.o: $(srcdir)/dns64/dns64.c config.h $(srcdir)/dns64/dns64.h $(src
  $(srcdir)/util/storage/slabhash.h $(srcdir)/util/config_file.h $(srcdir)/util/fptr_wlist.h \
  $(srcdir)/util/netevent.h $(srcdir)/util/tube.h $(srcdir)/services/mesh.h $(srcdir)/util/rbtree.h \
  $(srcdir)/services/modstack.h $(srcdir)/util/net_help.h $(srcdir)/util/regional.h
+cachedb.lo cachedb.o: $(srcdir)/cachedb/cachedb.c config.h $(srcdir)/cachedb/cachedb.h $(srcdir)/util/module.h \
+ $(srcdir)/util/storage/lruhash.h $(srcdir)/util/locks.h $(srcdir)/util/log.h $(srcdir)/util/data/msgreply.h \
+ $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
+ $(srcdir)/sldns/rrdef.h
 checklocks.lo checklocks.o: $(srcdir)/testcode/checklocks.c config.h $(srcdir)/util/locks.h $(srcdir)/util/log.h \
  $(srcdir)/testcode/checklocks.h
 unitanchor.lo unitanchor.o: $(srcdir)/testcode/unitanchor.c config.h $(srcdir)/util/log.h $(srcdir)/util/data/dname.h \
@@ -1182,7 +1186,7 @@ win_svc.lo win_svc.o: $(srcdir)/winrc/win_svc.c config.h $(srcdir)/winrc/win_svc
  $(srcdir)/sldns/sbuffer.h $(srcdir)/util/data/packed_rrset.h $(srcdir)/util/storage/lruhash.h \
  $(srcdir)/util/netevent.h $(srcdir)/util/data/msgreply.h $(srcdir)/util/data/msgparse.h $(srcdir)/sldns/pkthdr.h \
  $(srcdir)/sldns/rrdef.h $(srcdir)/daemon/stats.h $(srcdir)/util/timehist.h $(srcdir)/util/module.h \
- $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/winsock_event.h
+ $(srcdir)/dnstap/dnstap.h $(srcdir)/daemon/remote.h $(srcdir)/util/config_file.h $(srcdir)/util/ub_event.h
 w_inst.lo w_inst.o: $(srcdir)/winrc/w_inst.c config.h $(srcdir)/winrc/w_inst.h $(srcdir)/winrc/win_svc.h
 unbound-service-install.lo unbound-service-install.o: $(srcdir)/winrc/unbound-service-install.c config.h \
  $(srcdir)/winrc/w_inst.h
diff --git a/cachedb/cachedb.c b/cachedb/cachedb.c
new file mode 100644 (file)
index 0000000..719dc22
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * cachedb/cachedb.c - cache from a database external to the program module
+ *
+ * Copyright (c) 2016, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains a module that uses an external database to cache
+ * dns responses.
+ */
+
+#include "config.h"
+#ifdef USE_CACHEDB
+#include "cachedb/cachedb.h"
+#include "util/regional.h"
+#include "sldns/parseutil.h"
+#include "sldns/wire2str.h"
+
+/** apply configuration to cachedb module 'global' state */
+static int
+cachedb_apply_cfg(struct cachedb_env* cachedb_env, struct config_file* cfg)
+{
+       /* TODO */
+       return 1;
+}
+
+int 
+cachedb_init(struct module_env* env, int id)
+{
+       struct cachedb_env* cachedb_env = (struct cachedb_env*)calloc(1,
+               sizeof(struct cachedb_env));
+       if(!cachedb_env) {
+               log_err("malloc failure");
+               return 0;
+       }
+       env->modinfo[id] = (void*)cachedb_env;
+       if(!cachedb_apply_cfg(cachedb_env, env->cfg)) {
+               log_err("cachedb: could not apply configuration settings.");
+               return 0;
+       }
+       return 1;
+}
+
+void 
+cachedb_deinit(struct module_env* env, int id)
+{
+       struct cachedb_env* cachedb_env;
+       if(!env || !env->modinfo[id])
+               return;
+       cachedb_env = (struct cachedb_env*)env->modinfo[id];
+       /* free contents */
+       /* TODO */
+
+       free(cachedb_env);
+       env->modinfo[id] = NULL;
+}
+
+/** new query for cachedb */
+static int
+cachedb_new(struct module_qstate* qstate, int id)
+{
+       struct cachedb_qstate* iq = (struct cachedb_qstate*)regional_alloc(
+               qstate->region, sizeof(struct cachedb_qstate));
+       qstate->minfo[id] = iq;
+       if(!iq) 
+               return 0;
+       memset(iq, 0, sizeof(*iq));
+       /* initialise it */
+       /* TODO */
+
+       return 1;
+}
+
+/**
+ * Return an error
+ * @param qstate: our query state
+ * @param id: module id
+ * @param rcode: error code (DNS errcode).
+ * @return: 0 for use by caller, to make notation easy, like:
+ *     return error_response(..). 
+ */
+static int
+error_response(struct module_qstate* qstate, int id, int rcode)
+{
+       verbose(VERB_QUERY, "return error response %s", 
+               sldns_lookup_by_id(sldns_rcodes, rcode)?
+               sldns_lookup_by_id(sldns_rcodes, rcode)->name:"??");
+       qstate->return_rcode = rcode;
+       qstate->return_msg = NULL;
+       qstate->ext_state[id] = module_finished;
+       return 0;
+}
+
+/**
+ * Handle a cachedb module event
+ * @param qstate: query state (from the mesh), passed between modules.
+ *     contains qstate->env module environment with global caches and so on.
+ * @param iq: query state specific for this module.  per-query.
+ * @param ie: environment specific for this module.  global.
+ * @param id: module id.
+ */
+static void
+cachedb_handle(struct module_qstate* qstate, struct cachedb_qstate* iq,
+       struct cachedb_env* ie, int id)
+{
+       /* figure out if this is a lookup or a store moment */
+       /* TODO */
+}
+
+void 
+cachedb_operate(struct module_qstate* qstate, enum module_ev event, int id,
+       struct outbound_entry* outbound)
+{
+       struct cachedb_env* ie = (struct cachedb_env*)qstate->env->modinfo[id];
+       struct cachedb_qstate* iq = (struct cachedb_qstate*)qstate->minfo[id];
+       verbose(VERB_QUERY, "cachedb[module %d] operate: extstate:%s event:%s", 
+               id, strextstate(qstate->ext_state[id]), strmodulevent(event));
+       if(iq) log_query_info(VERB_QUERY, "cachedb operate: query", 
+               &qstate->qinfo);
+
+       /* perform cachedb state machine */
+       if((event == module_event_new || event == module_event_pass) && 
+               iq == NULL) {
+               if(!cachedb_new(qstate, id)) {
+                       (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+                       return;
+               }
+               iq = (struct cachedb_qstate*)qstate->minfo[id];
+               cachedb_handle(qstate, iq, ie, id);
+               return;
+       }
+       if(iq && event == module_event_pass) {
+               cachedb_handle(qstate, iq, ie, id);
+               return;
+       }
+       if(iq && outbound) {
+               /* cachedb does not need to process responses at this time
+                * ignore it.
+               cachedb_process_response(qstate, iq, ie, id, outbound, event);
+               */
+               return;
+       }
+       if(event == module_event_error) {
+               verbose(VERB_ALGO, "got called with event error, giving up");
+               (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+               return;
+       }
+
+       log_err("bad event for cachedb");
+       (void)error_response(qstate, id, LDNS_RCODE_SERVFAIL);
+}
+
+void
+cachedb_inform_super(struct module_qstate* ATTR_UNUSED(qstate),
+       int ATTR_UNUSED(id), struct module_qstate* ATTR_UNUSED(super))
+{
+       /* cachedb does not use subordinate requests at this time */
+}
+
+void 
+cachedb_clear(struct module_qstate* qstate, int id)
+{
+       struct cachedb_qstate* iq;
+       if(!qstate)
+               return;
+       iq = (struct cachedb_qstate*)qstate->minfo[id];
+       if(iq) {
+               /* free contents of iq */
+               /* TODO */
+       }
+       qstate->minfo[id] = NULL;
+}
+
+size_t 
+cachedb_get_mem(struct module_env* env, int id)
+{
+       struct cachedb_env* ie = (struct cachedb_env*)env->modinfo[id];
+       if(!ie)
+               return 0;
+       return sizeof(*ie); /* TODO - more mem */
+}
+
+/**
+ * The cachedb function block 
+ */
+static struct module_func_block cachedb_block = {
+       "cachedb",
+       &cachedb_init, &cachedb_deinit, &cachedb_operate,
+       &cachedb_inform_super, &cachedb_clear, &cachedb_get_mem
+};
+
+struct module_func_block* 
+cachedb_get_funcblock(void)
+{
+       return &cachedb_block;
+}
+#endif /* USE_CACHEDB */
diff --git a/cachedb/cachedb.h b/cachedb/cachedb.h
new file mode 100644 (file)
index 0000000..3f29df0
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * cachedb/cachedb.h - cache from a database external to the program module
+ *
+ * Copyright (c) 2016, NLnet Labs. All rights reserved.
+ *
+ * This software is open source.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 
+ * Neither the name of the NLNET LABS nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file
+ *
+ * This file contains a module that uses an external database to cache
+ * dns responses.
+ */
+#include "util/module.h"
+
+/**
+ * The global variable environment contents for the cachedb
+ * Shared between threads, this represents long term information.
+ * Like database connections.
+ */
+struct cachedb_env {
+       int todo;
+};
+
+/**
+ * Per query state for the cachedb module.
+ */
+struct cachedb_qstate {
+       int todo;
+};
+
+/** Init the cachedb module */
+int cachedb_init(struct module_env* env, int id);
+/** Deinit the cachedb module */
+void cachedb_deinit(struct module_env* env, int id);
+/** Operate on an event on a query (in qstate). */
+void cachedb_operate(struct module_qstate* qstate, enum module_ev event,
+       int id, struct outbound_entry* outbound);
+/** Subordinate query done, inform this super request of its conclusion */
+void cachedb_inform_super(struct module_qstate* qstate, int id,
+       struct module_qstate* super);
+/** clear the cachedb query-specific contents out of qstate */
+void cachedb_clear(struct module_qstate* qstate, int id);
+/** return memory estimate for cachedb module */
+size_t cachedb_get_mem(struct module_env* env, int id);
+
+/**
+ * Get the function block with pointers to the cachedb functions
+ * @return the function block for "cachedb".
+ */
+struct module_func_block* cachedb_get_funcblock(void);
+
index 011357b06d47a234d231e4437483e1d5a16260a1..0993e3926dca2971b0f98c13b130764822c08bbe 100644 (file)
 /* define this to enable debug checks. */
 #undef UNBOUND_DEBUG
 
+/* Define to 1 to use cachedb support */
+#undef USE_CACHEDB
+
 /* Define to 1 to enable dnstap support */
 #undef USE_DNSTAP
 
index 96f8d0effba7dd485d5d67cec0b77856da71f4cf..e4cb111a5c11fde661cd1bd45ac41a3e9e437ad1 100755 (executable)
--- a/configure
+++ b/configure
@@ -843,6 +843,7 @@ enable_dnstap
 with_dnstap_socket_path
 with_protobuf_c
 with_libfstrm
+enable_cachedb
 with_libunbound_only
 '
       ac_precious_vars='build_alias
@@ -1507,6 +1508,8 @@ Optional Features:
                           to it, smaller install size but libunbound export
                           table is polluted by internal symbols
   --enable-dnstap         Enable dnstap support (requires fstrm, protobuf-c)
+  --enable-cachedb        enable cachedb module that can use external cache
+                          storage
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -19626,6 +19629,23 @@ _ACEOF
   fi
 
 
+# check for cachedb if requested
+# Check whether --enable-cachedb was given.
+if test "${enable_cachedb+set}" = set; then :
+  enableval=$enable_cachedb;
+fi
+
+case "$enable_cachedb" in
+    yes)
+
+$as_echo "#define USE_CACHEDB 1" >>confdefs.h
+
+       ;;
+    no|*)
+       # nothing
+       ;;
+esac
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ${MAKE:-make} supports $< with implicit rule in scope" >&5
 $as_echo_n "checking if ${MAKE:-make} supports $< with implicit rule in scope... " >&6; }
 # on openBSD, the implicit rule make $< work.
index aa1fb92fbe7483ea3b41e9eb3880fcb07c9c4d5d..0cd762e1ae62030e8aff0cbaf5bccaf4f3fae247 100644 (file)
@@ -1227,6 +1227,17 @@ dt_DNSTAP([$UNBOUND_RUN_DIR/dnstap.sock],
     ]
 )
 
+# check for cachedb if requested
+AC_ARG_ENABLE(cachedb, AC_HELP_STRING([--enable-cachedb], [enable cachedb module that can use external cache storage]))
+case "$enable_cachedb" in
+    yes)
+       AC_DEFINE([USE_CACHEDB], [1], [Define to 1 to use cachedb support])
+       ;;
+    no|*)
+       # nothing
+       ;;
+esac
+
 AC_MSG_CHECKING([if ${MAKE:-make} supports $< with implicit rule in scope])
 # on openBSD, the implicit rule make $< work.
 # on Solaris, it does not work ($? is changed sources, $^ lists dependencies).
index d69fb7f08d5204e4812c9c08a311df70a4856ac7..704a438b8f73dd8793b22bbf5b277f38e4a1772e 100644 (file)
@@ -1,3 +1,6 @@
+14 April 2016: Wouter
+       - cachedb module framework (empty).
+
 12 April 2016: Wouter
        - Fix #753: document dump_requestlist is for first thread.
 
index 49bb2fd15adf455988b18640f7df4c007e786a4a..70e066670d5df63b4335bb3d6bfe135ed2785f52 100644 (file)
@@ -50,6 +50,9 @@
 #ifdef WITH_PYTHONMODULE
 #include "pythonmod/pythonmod.h"
 #endif
+#ifdef USE_CACHEDB
+#include "cachedb/cachedb.h"
+#endif
 
 /** count number of modules (words) in the string */
 static int
@@ -120,6 +123,9 @@ module_list_avail(void)
                "dns64",
 #ifdef WITH_PYTHONMODULE
                "python", 
+#endif
+#ifdef USE_CACHEDB
+               "cachedb",
 #endif
                "validator", 
                "iterator", 
@@ -138,6 +144,9 @@ module_funcs_avail(void)
                &dns64_get_funcblock,
 #ifdef WITH_PYTHONMODULE
                &pythonmod_get_funcblock, 
+#endif
+#ifdef USE_CACHEDB
+               &cachedb_get_funcblock,
 #endif
                &val_get_funcblock, 
                &iter_get_funcblock, 
index ec0771306b9a4d20782a7a9c2e2159bad0852631..b1c70f50787b7c6977a0bd429a42355a05a5f7a8 100644 (file)
@@ -411,6 +411,21 @@ morechecks(struct config_file* cfg, const char* fname)
                && strcmp(cfg->module_conf, "dns64 validator python iterator") != 0
                && strcmp(cfg->module_conf, "python dns64 iterator") != 0 
                && strcmp(cfg->module_conf, "python dns64 validator iterator") != 0 
+#endif
+#ifdef USE_CACHEDB
+               && strcmp(cfg->module_conf, "validator cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "dns64 validator cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "dns64 cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "python dns64 cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "python dns64 validator cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "dns64 python cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "dns64 python validator cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "python cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "python validator cachedb iterator") != 0
+               && strcmp(cfg->module_conf, "cachedb python iterator") != 0
+               && strcmp(cfg->module_conf, "validator cachedb python iterator") != 0
+               && strcmp(cfg->module_conf, "validator python cachedb iterator") != 0
 #endif
                ) {
                fatal_exit("module conf '%s' is not known to work",
index 1397e9c1359d05e84af9987b38bf92fa374d80a4..63d0b8b6fe7573a3484b3522b061c26c8dd45f57 100644 (file)
@@ -78,6 +78,9 @@
 #ifdef WITH_PYTHONMODULE
 #include "pythonmod/pythonmod.h"
 #endif
+#ifdef USE_CACHEDB
+#include "cachedb/cachedb.h"
+#endif
 
 int 
 fptr_whitelist_comm_point(comm_point_callback_t *fptr)
@@ -314,6 +317,9 @@ fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id))
        else if(fptr == &dns64_init) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_init) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_init) return 1;
 #endif
        return 0;
 }
@@ -326,6 +332,9 @@ fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id))
        else if(fptr == &dns64_deinit) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_deinit) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_deinit) return 1;
 #endif
        return 0;
 }
@@ -339,6 +348,9 @@ fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate,
        else if(fptr == &dns64_operate) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_operate) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_operate) return 1;
 #endif
        return 0;
 }
@@ -352,6 +364,9 @@ fptr_whitelist_mod_inform_super(void (*fptr)(
        else if(fptr == &dns64_inform_super) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_inform_super) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_inform_super) return 1;
 #endif
        return 0;
 }
@@ -365,6 +380,9 @@ fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate,
        else if(fptr == &dns64_clear) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_clear) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_clear) return 1;
 #endif
        return 0;
 }
@@ -377,6 +395,9 @@ fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id))
        else if(fptr == &dns64_get_mem) return 1;
 #ifdef WITH_PYTHONMODULE
        else if(fptr == &pythonmod_get_mem) return 1;
+#endif
+#ifdef USE_CACHEDB
+       else if(fptr == &cachedb_get_mem) return 1;
 #endif
        return 0;
 }