diff options
author | Martin Nagy <mnagy@redhat.com> | 2009-04-21 09:31:11 +0200 |
---|---|---|
committer | Martin Nagy <mnagy@redhat.com> | 2009-04-21 09:45:01 +0200 |
commit | 1ae7a3c4d2f018b251838ffdbd926c758cc2329c (patch) | |
tree | bd90619806396c26411b88cc52e2c272ce05103d /bin | |
parent | 2630da853b5bad2c02e3df46dccb727ca94d8666 (diff) | |
download | bind_dynamic-1ae7a3c4d2f018b251838ffdbd926c758cc2329c.tar.gz bind_dynamic-1ae7a3c4d2f018b251838ffdbd926c758cc2329c.tar.xz bind_dynamic-1ae7a3c4d2f018b251838ffdbd926c758cc2329c.zip |
Pass all necessary pointers in a packed structure.
Access to the dns_dyndb_arguments_t structure is done through a set of
dns_dyndb_set_* and dns_dyndb_get_* functions. This will make it
unnecessary to break the ABI if someone designing a plug-in will have a
need for something more than there currently is. All that will be needed
in that case will be an addition of set/get functions.
Diffstat (limited to 'bin')
-rw-r--r-- | bin/named/server.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/bin/named/server.c b/bin/named/server.c index b76f3ce..5d4077d 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -851,7 +851,7 @@ configure_peer(const cfg_obj_t *cpeer, isc_mem_t *mctx, dns_peer_t **peerp) { static isc_result_t configure_dynamic_db(const cfg_obj_t *dynamic_db, isc_mem_t *mctx, - dns_view_t *view, dns_zonemgr_t *zmgr) + const dns_dyndb_arguments_t *dyndb_args) { isc_result_t result; const cfg_obj_t *obj; @@ -905,7 +905,7 @@ configure_dynamic_db(const cfg_obj_t *dynamic_db, isc_mem_t *mctx, REQUIRE(i < len); argv[i] = NULL; - CHECK(dns_dynamic_db_load(libname, name, mctx, argv, view, zmgr)); + CHECK(dns_dynamic_db_load(libname, name, mctx, argv, dyndb_args)); cleanup: if (argv != NULL) @@ -1246,12 +1246,27 @@ configure_view(dns_view_t *view, const cfg_obj_t *config, (void)cfg_map_get(voptions, "dynamic-db", &dynamic_db_list); else (void)cfg_map_get(config, "dynamic-db", &dynamic_db_list); - for (element = cfg_list_first(dynamic_db_list); - element != NULL; - element = cfg_list_next(element)) - { - obj = cfg_listelt_value(element); - CHECK(configure_dynamic_db(obj, mctx, view, ns_g_server->zonemgr)); + element = cfg_list_first(dynamic_db_list); + if (element != NULL) { + dns_dyndb_arguments_t *args; + + args = dns_dyndb_arguments_create(mctx); + if (args == NULL) { + result = ISC_R_NOMEMORY; + goto cleanup; + } + dns_dyndb_set_view(args, view); + dns_dyndb_set_zonemgr(args, ns_g_server->zonemgr); + dns_dyndb_set_task(args, ns_g_server->task); + dns_dyndb_set_timermgr(args, ns_g_timermgr); + while (element != NULL) { + obj = cfg_listelt_value(element); + CHECK(configure_dynamic_db(obj, mctx, args)); + + element = cfg_list_next(element); + } + + dns_dyndb_arguments_destroy(mctx, args); } /* |