The branch, v4-1-test has been updated via 4ddd4c6 s4-dns: dlz-bind: Add trailing '.' to all fqdn strings via a5adad6 s4-dns: Add support for BIND 9.10 via a30eeec s4-dns: Update dlz_minimal.h based on BIND release 9.10 via 8fed025 s4-dns: Check DLZ_DLOPEN_VERSION for different BIND versions via 221934c s4-dns: Update template variables, change BIND98 --> BIND9_8 via c4ae1b4 samba: pass down size_t instead of int to add_string_to_array(). via fed8ae0 lib/util: use size_t for add_string_to_array(). via e0b65dd s3-proto: remove duplicate proto for add_string_to_array(). from 2947da5 Revert "buildtools: Rename perl vendorarch configure option."
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-1-test - Log ----------------------------------------------------------------- commit 4ddd4c6ace28cdb1440587b719061a626c9377a3 Author: Amitay Isaacs <ami...@gmail.com> Date: Mon Nov 3 11:57:50 2014 +1100 s4-dns: dlz-bind: Add trailing '.' to all fqdn strings BIND 9.10.x is strict when sending records via putrr and putnamedrr. Bug: https://bugzilla.samba.org/show_bug.cgi?id=10620 Thanks to Guenter Kukkukk for identifying the problem and resolution. Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Guenter Kukkukk <ku...@samba.org> Autobuild-User(master): Amitay Isaacs <ami...@samba.org> Autobuild-Date(master): Fri Nov 21 06:14:55 CET 2014 on sn-devel-104 (cherry picked from commit b7f6b09a13daaa702aef5a0ab9f458521e4902b1) Autobuild-User(v4-1-test): Karolin Seeger <ksee...@samba.org> Autobuild-Date(v4-1-test): Mon Nov 24 23:27:37 CET 2014 on sn-devel-104 commit a5adad6f82517ae07db4eadadcef1cfd475b55d5 Author: Amitay Isaacs <ami...@gmail.com> Date: Mon Oct 20 16:32:42 2014 +1100 s4-dns: Add support for BIND 9.10 Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Matthieu Patou <m...@matws.net> Autobuild-User(master): Amitay Isaacs <ami...@samba.org> Autobuild-Date(master): Sat Oct 25 05:42:19 CEST 2014 on sn-devel-104 (cherry picked from commit faa3423d1a26eb6103389b234add0f1e8d0dfc08) Conflicts: python/samba/provision/sambadns.py source4/dns_server/dlz_bind9.c source4/setup/named.conf.dlz commit a30eeec0606952df43835fb3f51357d06952e1cd Author: Amitay Isaacs <ami...@gmail.com> Date: Mon Oct 20 15:31:30 2014 +1100 s4-dns: Update dlz_minimal.h based on BIND release 9.10 Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Matthieu Patou <m...@matws.net> (cherry picked from commit aeb6ad8a9c2713c6c71a2ac4cd355dd1bda6cc51) commit 8fed02562e008af9b49dca5c02a95af81e9e5abd Author: Amitay Isaacs <ami...@gmail.com> Date: Sun Oct 19 12:57:55 2014 +1100 s4-dns: Check DLZ_DLOPEN_VERSION for different BIND versions Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Matthieu Patou <m...@matws.net> (cherry picked from commit 1e5c14548c8d03f66aaa908654c94f36a94455f2) commit 221934c68dd7accbb415393c377c7f09d0dd41a1 Author: Amitay Isaacs <ami...@gmail.com> Date: Mon Oct 20 16:40:05 2014 +1100 s4-dns: Update template variables, change BIND98 --> BIND9_8 This makes it easier to add suport for BIND 9.10. Signed-off-by: Amitay Isaacs <ami...@gmail.com> Reviewed-by: Matthieu Patou <m...@matws.net> (cherry picked from commit 58334eb58ed2f11c6f212481b6be772d9f182810) Conflicts: python/samba/provision/sambadns.py source4/setup/named.conf.dlz commit c4ae1b4d1796d57fbf18e1b38b1f3896f18c9378 Author: Günther Deschner <g...@samba.org> Date: Fri Nov 14 14:12:26 2014 +0100 samba: pass down size_t instead of int to add_string_to_array(). Guenther Signed-off-by: Günther Deschner <g...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> Autobuild-User(master): Günther Deschner <g...@samba.org> Autobuild-Date(master): Mon Nov 17 19:53:22 CET 2014 on sn-devel-104 The last 3 patches address BUG: https://bugzilla.samba.org/show_bug.cgi?id=10942 cleanup add_string_to_array and usage commit fed8ae0a3923e425f5d45af3c7e5d87e9e6c6507 Author: Günther Deschner <g...@samba.org> Date: Fri Nov 14 13:27:45 2014 +0100 lib/util: use size_t for add_string_to_array(). Guenther Signed-off-by: Günther Deschner <g...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> commit e0b65ddefc5e8bf11ad284899c17109163d11d9f Author: Günther Deschner <g...@samba.org> Date: Fri Nov 14 13:47:16 2014 +0100 s3-proto: remove duplicate proto for add_string_to_array(). Guenther Signed-off-by: Günther Deschner <g...@samba.org> Reviewed-by: Andreas Schneider <a...@samba.org> ----------------------------------------------------------------------- Summary of changes: lib/util/samba_util.h | 2 +- lib/util/util_strlist.c | 2 +- libcli/ldap/ldap_message.h | 2 +- libgpo/gpext/gpext.c | 2 +- source3/include/proto.h | 3 - source3/lib/eventlog/eventlog.c | 2 +- source3/libads/ldap.c | 2 +- source3/libnet/libnet_join.c | 4 +- source3/rpc_server/lsa/srv_lsa_nt.c | 2 +- source3/rpc_server/netlogon/srv_netlog_nt.c | 2 +- source3/rpc_server/spoolss/srv_spoolss_nt.c | 3 +- source3/rpcclient/cmd_spoolss.c | 5 +- source3/winbindd/winbindd_cm.c | 2 +- source4/dns_server/dlz_bind9.c | 77 ++++++++-- source4/dns_server/dlz_minimal.h | 227 ++++++++++++++++++++-------- source4/dns_server/wscript_build | 10 ++ source4/setup/named.conf.dlz | 7 +- source4/torture/dns/dlz_bind9.c | 24 +-- source4/torture/rpc/samba3rpc.c | 4 +- source4/torture/rpc/samr.c | 2 +- source4/torture/rpc/wkssvc.c | 10 +- 21 files changed, 279 insertions(+), 115 deletions(-) Changeset truncated at 500 lines: diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h index c6eb349..7687e1b 100644 --- a/lib/util/samba_util.h +++ b/lib/util/samba_util.h @@ -316,7 +316,7 @@ _PUBLIC_ char *rfc1738_escape_part(TALLOC_CTX *mem_ctx, const char *url); * number of elements in strings. It will be updated by this function. */ _PUBLIC_ bool add_string_to_array(TALLOC_CTX *mem_ctx, - const char *str, const char ***strings, int *num); + const char *str, const char ***strings, size_t *num); /** varient of strcmp() that handles NULL ptrs diff --git a/lib/util/util_strlist.c b/lib/util/util_strlist.c index e8d2a74..33c1e08 100644 --- a/lib/util/util_strlist.c +++ b/lib/util/util_strlist.c @@ -453,7 +453,7 @@ _PUBLIC_ const char **str_list_append_const(const char **list1, * number of elements in strings. It will be updated by this function. */ _PUBLIC_ bool add_string_to_array(TALLOC_CTX *mem_ctx, - const char *str, const char ***strings, int *num) + const char *str, const char ***strings, size_t *num) { char *dup_str = talloc_strdup(mem_ctx, str); diff --git a/libcli/ldap/ldap_message.h b/libcli/ldap/ldap_message.h index eb7e620..b41f7f5 100644 --- a/libcli/ldap/ldap_message.h +++ b/libcli/ldap/ldap_message.h @@ -104,7 +104,7 @@ struct ldap_SearchRequest { uint32_t sizelimit; bool attributesonly; struct ldb_parse_tree *tree; - int num_attributes; + size_t num_attributes; const char * const *attributes; }; diff --git a/libgpo/gpext/gpext.c b/libgpo/gpext/gpext.c index df84475..56d019d 100644 --- a/libgpo/gpext/gpext.c +++ b/libgpo/gpext/gpext.c @@ -524,7 +524,7 @@ static NTSTATUS gp_glob_ext_list(TALLOC_CTX *mem_ctx, name[PTR_DIFF(p, dirent->d_name)] = 0; if (!add_string_to_array(mem_ctx, name, ext_list, - (int *)ext_list_len)) { + ext_list_len)) { closedir(dir); return NT_STATUS_NO_MEMORY; } diff --git a/source3/include/proto.h b/source3/include/proto.h index cbad7ac..4eb7ba4 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -718,9 +718,6 @@ int ipstr_list_parse(const char *ipstr_list, struct ip_service **ip_list); void ipstr_list_free(char* ipstr_list); uint64_t STR_TO_SMB_BIG_UINT(const char *nptr, const char **entptr); uint64_t conv_str_size(const char * str); -bool add_string_to_array(TALLOC_CTX *mem_ctx, - const char *str, const char ***strings, - int *num); void sprintf_append(TALLOC_CTX *mem_ctx, char **string, ssize_t *len, size_t *bufsize, const char *fmt, ...); int asprintf_strupper_m(char **strp, const char *fmt, ...); diff --git a/source3/lib/eventlog/eventlog.c b/source3/lib/eventlog/eventlog.c index 0cc0240..7a190bd 100644 --- a/source3/lib/eventlog/eventlog.c +++ b/source3/lib/eventlog/eventlog.c @@ -581,7 +581,7 @@ bool parse_logentry( TALLOC_CTX *mem_ctx, char *line, struct eventlog_Record_tdb } } else if ( 0 == strncmp( start, "STR", stop - start ) ) { size_t tmp_len; - int num_of_strings; + size_t num_of_strings; /* skip past initial ":" */ stop++; /* now skip any other leading whitespace */ diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c index 8d104c2..b9adc9d 100644 --- a/source3/libads/ldap.c +++ b/source3/libads/ldap.c @@ -3300,7 +3300,7 @@ ADS_STATUS ads_get_joinable_ous(ADS_STRUCT *ads, if (!add_string_to_array(mem_ctx, dn, (const char ***)ous, - (int *)num_ous)) { + num_ous)) { TALLOC_FREE(dn); ads_msgfree(ads, res); return ADS_ERROR(LDAP_NO_MEMORY); diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index aa7b5cb..9a34e94 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -421,7 +421,7 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx, ok = ads_element_in_array(spn_array, num_spns, spn); if (!ok) { ok = add_string_to_array(spn_array, spn, - &spn_array, (int *)&num_spns); + &spn_array, &num_spns); if (!ok) { return ADS_ERROR_LDAP(LDAP_NO_MEMORY); } @@ -446,7 +446,7 @@ static ADS_STATUS libnet_join_set_machine_spn(TALLOC_CTX *mem_ctx, ok = ads_element_in_array(spn_array, num_spns, spn); if (!ok) { ok = add_string_to_array(spn_array, spn, - &spn_array, (int *)&num_spns); + &spn_array, &num_spns); if (!ok) { return ADS_ERROR_LDAP(LDAP_NO_MEMORY); } diff --git a/source3/rpc_server/lsa/srv_lsa_nt.c b/source3/rpc_server/lsa/srv_lsa_nt.c index 46f42d5..6b0028b 100644 --- a/source3/rpc_server/lsa/srv_lsa_nt.c +++ b/source3/rpc_server/lsa/srv_lsa_nt.c @@ -3335,7 +3335,7 @@ static NTSTATUS init_lsa_right_set(TALLOC_CTX *mem_ctx, uint32 i; const char *privname; const char **privname_array = NULL; - int num_priv = 0; + size_t num_priv = 0; for (i=0; i<privileges->count; i++) { if (privileges->set[i].luid.high) { diff --git a/source3/rpc_server/netlogon/srv_netlog_nt.c b/source3/rpc_server/netlogon/srv_netlog_nt.c index e5ca474..c903ae8 100644 --- a/source3/rpc_server/netlogon/srv_netlog_nt.c +++ b/source3/rpc_server/netlogon/srv_netlog_nt.c @@ -397,7 +397,7 @@ NTSTATUS _netr_NetrEnumerateTrustedDomains(struct pipes_struct *p, NTSTATUS status; NTSTATUS result = NT_STATUS_OK; DATA_BLOB blob; - int num_domains = 0; + size_t num_domains = 0; const char **trusted_domains = NULL; struct lsa_DomainList domain_list; struct dcerpc_binding_handle *h = NULL; diff --git a/source3/rpc_server/spoolss/srv_spoolss_nt.c b/source3/rpc_server/spoolss/srv_spoolss_nt.c index 3812153..c451212 100644 --- a/source3/rpc_server/spoolss/srv_spoolss_nt.c +++ b/source3/rpc_server/spoolss/srv_spoolss_nt.c @@ -4897,7 +4897,8 @@ static WERROR string_array_from_driver_info(TALLOC_CTX *mem_ctx, const char *arch, int version) { - int i, num_strings = 0; + int i; + size_t num_strings = 0; const char **array = NULL; if (string_array == NULL) { diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 5c499d4..3f83abf 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -1659,7 +1659,7 @@ static bool init_drv_info_3_members(TALLOC_CTX *mem_ctx, struct spoolss_AddDrive char *args) { char *str, *str2; - int count = 0; + size_t count = 0; char *saveptr = NULL; struct spoolss_StringArray *deps; const char **file_array = NULL; @@ -2636,7 +2636,8 @@ static WERROR cmd_spoolss_setprinterdata(struct rpc_pipe_client *cli, data.binary = strhex_to_data_blob(mem_ctx, argv[4]); break; case REG_MULTI_SZ: { - int i, num_strings; + int i; + size_t num_strings; const char **strings = NULL; num_strings = 0; diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c index 8bbc886..ee4b482 100644 --- a/source3/winbindd/winbindd_cm.c +++ b/source3/winbindd/winbindd_cm.c @@ -1443,7 +1443,7 @@ static bool find_new_dc(TALLOC_CTX *mem_ctx, int num_dcs = 0; const char **dcnames = NULL; - int num_dcnames = 0; + size_t num_dcnames = 0; struct sockaddr_storage *addrs = NULL; int num_addrs = 0; diff --git a/source4/dns_server/dlz_bind9.c b/source4/dns_server/dlz_bind9.c index 38b765a..604d4b9 100644 --- a/source4/dns_server/dlz_bind9.c +++ b/source4/dns_server/dlz_bind9.c @@ -103,6 +103,27 @@ static void b9_add_helper(struct dlz_bind9_data *state, const char *helper_name, } /* + * Add a trailing '.' if it's missing + */ +static const char *b9_format_fqdn(TALLOC_CTX *mem_ctx, const char *str) +{ + size_t len; + const char *tmp; + + if (str == NULL || str[0] == '\0') { + return str; + } + + len = strlen(str); + if (str[len-1] != '.') { + tmp = talloc_asprintf(mem_ctx, "%s.", str); + } else { + tmp = str; + } + return tmp; +} + +/* format a record for bind9 */ static bool b9_format(struct dlz_bind9_data *state, @@ -112,6 +133,7 @@ static bool b9_format(struct dlz_bind9_data *state, { uint32_t i; char *tmp; + const char *fqdn; switch (rec->wType) { case DNS_TYPE_A: @@ -126,7 +148,7 @@ static bool b9_format(struct dlz_bind9_data *state, case DNS_TYPE_CNAME: *type = "cname"; - *data = rec->data.cname; + *data = b9_format_fqdn(mem_ctx, rec->data.cname); break; case DNS_TYPE_TXT: @@ -140,23 +162,30 @@ static bool b9_format(struct dlz_bind9_data *state, case DNS_TYPE_PTR: *type = "ptr"; - *data = rec->data.ptr; + *data = b9_format_fqdn(mem_ctx, rec->data.ptr); break; case DNS_TYPE_SRV: *type = "srv"; + fqdn = b9_format_fqdn(mem_ctx, rec->data.srv.nameTarget); + if (fqdn == NULL) { + return false; + } *data = talloc_asprintf(mem_ctx, "%u %u %u %s", rec->data.srv.wPriority, rec->data.srv.wWeight, rec->data.srv.wPort, - rec->data.srv.nameTarget); + fqdn); break; case DNS_TYPE_MX: *type = "mx"; + fqdn = b9_format_fqdn(mem_ctx, rec->data.mx.nameTarget); + if (fqdn == NULL) { + return false; + } *data = talloc_asprintf(mem_ctx, "%u %s", - rec->data.mx.wPriority, - rec->data.mx.nameTarget); + rec->data.mx.wPriority, fqdn); break; case DNS_TYPE_HINFO: @@ -168,7 +197,7 @@ static bool b9_format(struct dlz_bind9_data *state, case DNS_TYPE_NS: *type = "ns"; - *data = rec->data.ns; + *data = b9_format_fqdn(mem_ctx, rec->data.ns); break; case DNS_TYPE_SOA: { @@ -179,8 +208,9 @@ static bool b9_format(struct dlz_bind9_data *state, * point at ourselves. This is how AD DNS servers * force clients to send updates to the right local DC */ - mname = talloc_asprintf(mem_ctx, "%s.%s", - lpcfg_netbios_name(state->lp), lpcfg_dnsdomain(state->lp)); + mname = talloc_asprintf(mem_ctx, "%s.%s.", + lpcfg_netbios_name(state->lp), + lpcfg_dnsdomain(state->lp)); if (mname == NULL) { return false; } @@ -189,11 +219,15 @@ static bool b9_format(struct dlz_bind9_data *state, return false; } + fqdn = b9_format_fqdn(mem_ctx, rec->data.soa.rname); + if (fqdn == NULL) { + return false; + } + state->soa_serial = rec->data.soa.serial; *data = talloc_asprintf(mem_ctx, "%s %s %u %u %u %u %u", - mname, - rec->data.soa.rname, + mname, fqdn, rec->data.soa.serial, rec->data.soa.refresh, rec->data.soa.retry, @@ -785,7 +819,13 @@ static isc_result_t b9_find_name_dn(struct dlz_bind9_data *state, const char *na /* see if we handle a given zone */ +#if DLZ_DLOPEN_VERSION < 3 _PUBLIC_ isc_result_t dlz_findzonedb(void *dbdata, const char *name) +#else +_PUBLIC_ isc_result_t dlz_findzonedb(void *dbdata, const char *name, + dns_clientinfomethods_t *methods, + dns_clientinfo_t *clientinfo) +#endif { struct dlz_bind9_data *state = talloc_get_type_abort(dbdata, struct dlz_bind9_data); return b9_find_zone_dn(state, name, NULL, NULL); @@ -846,7 +886,7 @@ static isc_result_t dlz_lookup_types(struct dlz_bind9_data *state, /* lookup one record */ -#ifdef BIND_VERSION_9_8 +#if DLZ_DLOPEN_VERSION == 1 _PUBLIC_ isc_result_t dlz_lookup(const char *zone, const char *name, void *dbdata, dns_sdlzlookup_t *lookup) #else @@ -867,7 +907,9 @@ _PUBLIC_ isc_result_t dlz_lookup(const char *zone, const char *name, _PUBLIC_ isc_result_t dlz_allowzonexfr(void *dbdata, const char *name, const char *client) { /* just say yes for all our zones for now */ - return dlz_findzonedb(dbdata, name); + struct dlz_bind9_data *state = talloc_get_type( + dbdata, struct dlz_bind9_data); + return b9_find_zone_dn(state, name, NULL, NULL); } /* @@ -942,6 +984,7 @@ _PUBLIC_ isc_result_t dlz_allnodes(const char *zone, void *dbdata, } else { name = talloc_asprintf(el_ctx, "%s.%s", rdn, zone); } + name = b9_format_fqdn(el_ctx, name); if (name == NULL) { talloc_free(tmp_ctx); return ISC_R_NOMEMORY; @@ -1073,7 +1116,12 @@ static bool b9_has_soa(struct dlz_bind9_data *state, struct ldb_dn *dn, const ch /* configure a writeable zone */ +#if DLZ_DLOPEN_VERSION < 3 _PUBLIC_ isc_result_t dlz_configure(dns_view_t *view, void *dbdata) +#else +_PUBLIC_ isc_result_t dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, + void *dbdata) +#endif { struct dlz_bind9_data *state = talloc_get_type_abort(dbdata, struct dlz_bind9_data); TALLOC_CTX *tmp_ctx; @@ -1132,7 +1180,12 @@ _PUBLIC_ isc_result_t dlz_configure(dns_view_t *view, void *dbdata) if (!b9_has_soa(state, zone_dn, zone)) { continue; } + +#if DLZ_DLOPEN_VERSION < 3 result = state->writeable_zone(view, zone); +#else + result = state->writeable_zone(view, dlzdb, zone); +#endif if (result != ISC_R_SUCCESS) { state->log(ISC_LOG_ERROR, "samba_dlz: Failed to configure zone '%s'", zone); diff --git a/source4/dns_server/dlz_minimal.h b/source4/dns_server/dlz_minimal.h index 98fb34e..11187f7 100644 --- a/source4/dns_server/dlz_minimal.h +++ b/source4/dns_server/dlz_minimal.h @@ -16,36 +16,49 @@ * USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* - This header provides a minimal set of defines and typedefs needed - for building an external DLZ module for bind9. When creating a new - external DLZ driver, please copy this header into your own source - tree. +/* This header is updated based on BIND 9.10.1 source. + * contrib/dlz/modules/include/dlz_minimal.h */ -typedef unsigned int isc_result_t; + +#ifndef DLZ_MINIMAL_H +#define DLZ_MINIMAL_H 1 + #ifdef BIND_VERSION_9_8 -typedef bool isc_boolean_t; +#define DLZ_DLOPEN_VERSION 1 +#elif BIND_VERSION_9_9 +#define DLZ_DLOPEN_VERSION 2 +#elif BIND_VERSION_9_10 +#define DLZ_DLOPEN_VERSION 3 +#define DLZ_DLOPEN_AGE 0 #else -typedef int isc_boolean_t; +#error Unsupported BIND version #endif -typedef uint32_t dns_ttl_t; -#ifdef BIND_VERSION_9_8 -#define DLZ_DLOPEN_VERSION 1 +typedef unsigned int isc_result_t; +#if DLZ_DLOPEN_VERSION == 1 +typedef bool isc_boolean_t; #else -#define DLZ_DLOPEN_VERSION 2 +typedef int isc_boolean_t; #endif +typedef uint32_t dns_ttl_t; -/* return this in flags to dlz_version() if thread safe */ +/* return these in flags from dlz_version() */ #define DNS_SDLZFLAG_THREADSAFE 0x00000001U +#define DNS_SDLZFLAG_RELATIVEOWNER 0x00000002U +#define DNS_SDLZFLAG_RELATIVERDATA 0x00000004U /* result codes */ #define ISC_R_SUCCESS 0 #define ISC_R_NOMEMORY 1 #define ISC_R_NOPERM 6 +#define ISC_R_NOSPACE 19 #define ISC_R_NOTFOUND 23 #define ISC_R_FAILURE 25 +#define ISC_R_NOTIMPLEMENTED 27 #define ISC_R_NOMORE 29 +#define ISC_R_INVALIDFILE 30 +#define ISC_R_UNEXPECTED 34 +#define ISC_R_FILENOTFOUND 38 /* boolean values */ #define ISC_TRUE 1 @@ -57,16 +70,51 @@ typedef uint32_t dns_ttl_t; #define ISC_LOG_WARNING (-3) #define ISC_LOG_ERROR (-4) #define ISC_LOG_CRITICAL (-5) +#define ISC_LOG_DEBUG(level) (level) -/* some opaque structures */ +/* opaque structures */ typedef void *dns_sdlzlookup_t; typedef void *dns_sdlzallnodes_t; typedef void *dns_view_t; -typedef void *dns_clientinfomethods_t; -typedef void *dns_clientinfo_t; +typedef void *dns_dlzdb_t; + +#if DLZ_DLOPEN_VERSION > 1 +/* + * Method and type definitions needed for retrieval of client info + * from the caller. + */ +typedef struct isc_sockaddr { + union { + struct sockaddr sa; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; + struct sockaddr_un sunix; + } type; + unsigned int length; + void * link; +} isc_sockaddr_t; + +#define DNS_CLIENTINFO_VERSION 1 +typedef struct dns_clientinfo { + uint16_t version; + void *data; +} dns_clientinfo_t; + +typedef isc_result_t (*dns_clientinfo_sourceip_t)(dns_clientinfo_t *client, + isc_sockaddr_t **addrp); + +#define DNS_CLIENTINFOMETHODS_VERSION 1 +#define DNS_CLIENTINFOMETHODS_AGE 0 + +typedef struct dns_clientinfomethods { + uint16_t version; + uint16_t age; + dns_clientinfo_sourceip_t sourceip; +} dns_clientinfomethods_t; +#endif /* DLZ_DLOPEN_VERSION > 1 */ /* - * method definitions for callbacks provided by dlopen driver -- Samba Shared Repository