[SCM] Samba Shared Repository - branch master updated
Amitay Isaacs
amitay at samba.org
Fri Oct 24 21:43:02 MDT 2014
The branch, master has been updated
via faa3423 s4-dns: Add support for BIND 9.10
via aeb6ad8 s4-dns: Update dlz_minimal.h based on BIND release 9.10
via 1e5c145 s4-dns: Check DLZ_DLOPEN_VERSION for different BIND versions
via 58334eb s4-dns: Update template variables, change BIND98 --> BIND9_8
from bb44710 s4-libnet: make it possible to join "off-site".
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit faa3423d1a26eb6103389b234add0f1e8d0dfc08
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Oct 20 16:32:42 2014 +1100
s4-dns: Add support for BIND 9.10
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Matthieu Patou <mat at matws.net>
Autobuild-User(master): Amitay Isaacs <amitay at samba.org>
Autobuild-Date(master): Sat Oct 25 05:42:19 CEST 2014 on sn-devel-104
commit aeb6ad8a9c2713c6c71a2ac4cd355dd1bda6cc51
Author: Amitay Isaacs <amitay at 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 <amitay at gmail.com>
Reviewed-by: Matthieu Patou <mat at matws.net>
commit 1e5c14548c8d03f66aaa908654c94f36a94455f2
Author: Amitay Isaacs <amitay at 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 <amitay at gmail.com>
Reviewed-by: Matthieu Patou <mat at matws.net>
commit 58334eb58ed2f11c6f212481b6be772d9f182810
Author: Amitay Isaacs <amitay at 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 <amitay at gmail.com>
Reviewed-by: Matthieu Patou <mat at matws.net>
-----------------------------------------------------------------------
Summary of changes:
python/samba/provision/sambadns.py | 16 ++-
source4/dns_server/dlz_bind9.c | 21 +++-
source4/dns_server/dlz_minimal.h | 227 +++++++++++++++++++++++++-----------
source4/dns_server/wscript_build | 10 ++
source4/setup/named.conf.dlz | 11 +-
5 files changed, 207 insertions(+), 78 deletions(-)
Changeset truncated at 500 lines:
diff --git a/python/samba/provision/sambadns.py b/python/samba/provision/sambadns.py
index 29224c8..b563932 100644
--- a/python/samba/provision/sambadns.py
+++ b/python/samba/provision/sambadns.py
@@ -919,12 +919,15 @@ def create_named_conf(paths, realm, dnsdomain, dns_backend, logger):
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
cwd='.').communicate()[0]
- bind98 = '#'
- bind99 = '#'
+ bind9_8 = '#'
+ bind9_9 = '#'
+ bind9_10 = '#'
if bind_info.upper().find('BIND 9.8') != -1:
- bind98 = ''
+ bind9_8 = ''
elif bind_info.upper().find('BIND 9.9') != -1:
- bind99 = ''
+ bind9_9 = ''
+ elif bind_info.upper().find('BIND 9.10') != -1:
+ bind9_10 = ''
elif bind_info.upper().find('BIND 9.7') != -1:
raise ProvisioningError("DLZ option incompatible with BIND 9.7.")
else:
@@ -932,8 +935,9 @@ def create_named_conf(paths, realm, dnsdomain, dns_backend, logger):
setup_file(setup_path("named.conf.dlz"), paths.namedconf, {
"NAMED_CONF": paths.namedconf,
"MODULESDIR" : samba.param.modules_dir(),
- "BIND98" : bind98,
- "BIND99" : bind99
+ "BIND9_8" : bind9_8,
+ "BIND9_9" : bind9_9,
+ "BIND9_10" : bind9_10
})
diff --git a/source4/dns_server/dlz_bind9.c b/source4/dns_server/dlz_bind9.c
index f663a2c..d43b404 100644
--- a/source4/dns_server/dlz_bind9.c
+++ b/source4/dns_server/dlz_bind9.c
@@ -792,7 +792,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);
@@ -853,7 +859,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
@@ -874,7 +880,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);
}
/*
@@ -1116,7 +1124,12 @@ static bool b9_zone_exists(struct dlz_bind9_data *state, const char *name)
/*
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;
@@ -1187,7 +1200,11 @@ _PUBLIC_ isc_result_t dlz_configure(dns_view_t *view, void *dbdata)
return ISC_R_NOMEMORY;
}
+#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
+ * Method definitions for callbacks provided by the dlopen driver
*/
typedef void log_t(int level, const char *fmt, ...);
@@ -82,103 +130,150 @@ typedef isc_result_t dns_sdlz_putnamedrr_t(dns_sdlzallnodes_t *allnodes,
dns_ttl_t ttl,
const char *data);
+#if DLZ_DLOPEN_VERSION < 3
typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
const char *zone_name);
-
+#else /* DLZ_DLOPEN_VERSION >= 3 */
+typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
+ dns_dlzdb_t *dlzdb,
+ const char *zone_name);
+#endif /* DLZ_DLOPEN_VERSION */
/*
- * prototypes for the functions you can include in your driver
+ * prototypes for the functions you can include in your module
*/
-
/*
* dlz_version() is required for all DLZ external drivers. It should
- * return DLZ_DLOPEN_VERSION
+ * return DLZ_DLOPEN_VERSION. 'flags' is updated to indicate capabilities
+ * of the module. In particular, if the module is thread-safe then it
+ * sets 'flags' to include DNS_SDLZFLAG_THREADSAFE. Other capability
+ * flags may be added in the future.
*/
-int dlz_version(unsigned int *flags);
+int
+dlz_version(unsigned int *flags);
/*
* dlz_create() is required for all DLZ external drivers.
*/
-isc_result_t dlz_create(const char *dlzname, unsigned int argc, const char **argv, void **dbdata, ...);
+isc_result_t
+dlz_create(const char *dlzname, unsigned int argc, const char *argv[],
+ void **dbdata, ...);
/*
* dlz_destroy() is optional, and will be called when the driver is
* unloaded if supplied
*/
-void dlz_destroy(void *dbdata);
+void
+dlz_destroy(void *dbdata);
/*
- dlz_findzonedb is required for all DLZ external drivers
+ * dlz_findzonedb is required for all DLZ external drivers
*/
-isc_result_t dlz_findzonedb(void *dbdata, const char *name);
+#if DLZ_DLOPEN_VERSION < 3
+isc_result_t
+dlz_findzonedb(void *dbdata, const char *name);
+#else /* DLZ_DLOPEN_VERSION >= 3 */
+isc_result_t
+dlz_findzonedb(void *dbdata, const char *name,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
+#endif /* DLZ_DLOPEN_VERSION */
/*
- dlz_lookup is required for all DLZ external drivers
+ * dlz_lookup is required for all DLZ external drivers
*/
-#ifdef BIND_VERSION_9_8
-isc_result_t dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup);
-#else
-isc_result_t dlz_lookup(const char *zone, const char *name,
- void *dbdata, dns_sdlzlookup_t *lookup,
- dns_clientinfomethods_t *methods,
- dns_clientinfo_t *clientinfo);
-#endif
+#if DLZ_DLOPEN_VERSION == 1
+isc_result_t
+dlz_lookup(const char *zone, const char *name, void *dbdata,
+ dns_sdlzlookup_t *lookup);
+#else /* DLZ_DLOPEN_VERSION > 1 */
+isc_result_t
+dlz_lookup(const char *zone, const char *name, void *dbdata,
+ dns_sdlzlookup_t *lookup,
+ dns_clientinfomethods_t *methods,
+ dns_clientinfo_t *clientinfo);
+#endif /* DLZ_DLOPEN_VERSION */
/*
- dlz_allowzonexfr() is optional, and should be supplied if you want
- to support zone transfers
+ * dlz_authority() is optional if dlz_lookup() supplies
+ * authority information (i.e., SOA, NS) for the dns record
*/
-isc_result_t dlz_allowzonexfr(void *dbdata, const char *name, const char *client);
-
+isc_result_t
+dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup);
/*
- dlz_allnodes() is optional, but must be supplied if supply a
- dlz_allowzonexfr() function
+ * dlz_allowzonexfr() is optional, and should be supplied if you want to
+ * support zone transfers
*/
-isc_result_t dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes);
+isc_result_t
+dlz_allowzonexfr(void *dbdata, const char *name, const char *client);
/*
- dlz_newversion() is optional. It should be supplied if you want to
- support dynamic updates.
+ * dlz_allnodes() is optional, but must be supplied if supply a
+ * dlz_allowzonexfr() function
*/
-isc_result_t dlz_newversion(const char *zone, void *dbdata, void **versionp);
+isc_result_t
+dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes);
/*
- dlz_closeversion() is optional, but must be supplied if you supply
- a dlz_newversion() function
+ * dlz_newversion() is optional. It should be supplied if you want to
+ * support dynamic updates.
+ */
+isc_result_t
+dlz_newversion(const char *zone, void *dbdata, void **versionp);
+
+/*
+ * dlz_closeversion() is optional, but must be supplied if you supply a
+ * dlz_newversion() function
*/
-void dlz_closeversion(const char *zone, isc_boolean_t commit, void *dbdata, void **versionp);
+void
+dlz_closeversion(const char *zone, isc_boolean_t commit, void *dbdata,
+ void **versionp);
/*
- dlz_configure() is optional, but must be supplied if you want to
- support dynamic updates
+ * dlz_configure() is optional, but must be supplied if you want to support
+ * dynamic updates
*/
-isc_result_t dlz_configure(dns_view_t *view, void *dbdata);
+#if DLZ_DLOPEN_VERSION < 3
+isc_result_t
+dlz_configure(dns_view_t *view, void *dbdata);
+#else /* DLZ_DLOPEN_VERSION >= 3 */
+isc_result_t
+dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata);
+#endif /* DLZ_DLOPEN_VERSION */
/*
- dlz_ssumatch() is optional, but must be supplied if you want to
- support dynamic updates
+ * dlz_ssumatch() is optional, but must be supplied if you want to support
+ * dynamic updates
*/
-isc_boolean_t dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
- const char *type, const char *key, uint32_t keydatalen, uint8_t *keydata,
- void *dbdata);
+isc_boolean_t
+dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
+ const char *type, const char *key, uint32_t keydatalen,
+ uint8_t *keydata, void *dbdata);
/*
- dlz_addrdataset() is optional, but must be supplied if you want to
- support dynamic updates
+ * dlz_addrdataset() is optional, but must be supplied if you want to
+ * support dynamic updates
*/
-isc_result_t dlz_addrdataset(const char *name, const char *rdatastr, void *dbdata, void *version);
+isc_result_t
+dlz_addrdataset(const char *name, const char *rdatastr, void *dbdata,
+ void *version);
/*
- dlz_subrdataset() is optional, but must be supplied if you want to
- support dynamic updates
+ * dlz_subrdataset() is optional, but must be supplied if you want to
+ * support dynamic updates
*/
-isc_result_t dlz_subrdataset(const char *name, const char *rdatastr, void *dbdata, void *version);
+isc_result_t
+dlz_subrdataset(const char *name, const char *rdatastr, void *dbdata,
+ void *version);
/*
- dlz_delrdataset() is optional, but must be supplied if you want to
- support dynamic updates
+ * dlz_delrdataset() is optional, but must be supplied if you want to
+ * support dynamic updates
*/
-isc_result_t dlz_delrdataset(const char *name, const char *type, void *dbdata, void *version);
+isc_result_t
+dlz_delrdataset(const char *name, const char *type, void *dbdata,
+ void *version);
+
+#endif /* DLZ_MINIMAL_H */
diff --git a/source4/dns_server/wscript_build b/source4/dns_server/wscript_build
index a92ab67..803ca62 100644
--- a/source4/dns_server/wscript_build
+++ b/source4/dns_server/wscript_build
@@ -37,6 +37,16 @@ bld.SAMBA_LIBRARY('dlz_bind9_9',
deps='samba-hostconfig samdb-common gensec popt dnsserver_common',
enabled=bld.AD_DC_BUILD_IS_ENABLED())
+bld.SAMBA_LIBRARY('dlz_bind9_10',
+ source='dlz_bind9.c',
+ cflags='-DBIND_VERSION_9_10',
+ private_library=True,
+ link_name='modules/bind9/dlz_bind9_10.so',
+ realname='dlz_bind9_10.so',
+ install_path='${MODULESDIR}/bind9',
+ deps='samba-hostconfig samdb-common gensec popt dnsserver_common',
+ enabled=bld.AD_DC_BUILD_IS_ENABLED())
+
bld.SAMBA_LIBRARY('dlz_bind9_for_torture',
source='dlz_bind9.c',
cflags='-DBIND_VERSION_9_8',
diff --git a/source4/setup/named.conf.dlz b/source4/setup/named.conf.dlz
index d91a020..460d2ca 100644
--- a/source4/setup/named.conf.dlz
+++ b/source4/setup/named.conf.dlz
@@ -10,10 +10,13 @@
# Uncomment only single database line, depending on your BIND version
#
dlz "AD DNS Zone" {
- # For BIND 9.8.0
- ${BIND98} database "dlopen ${MODULESDIR}/bind9/dlz_bind9.so";
+ # For BIND 9.8.x
+ ${BIND9_8} database "dlopen ${MODULESDIR}/bind9/dlz_bind9.so";
- # For BIND 9.9.0
- ${BIND99} database "dlopen ${MODULESDIR}/bind9/dlz_bind9_9.so";
+ # For BIND 9.9.x
+ ${BIND9_9} database "dlopen ${MODULESDIR}/bind9/dlz_bind9_9.so";
+
+ # For BIND 9.10.x
+ ${BIND9_10} database "dlopen ${MODULESDIR}/bind9/dlz_bind9_10.so";
};
--
Samba Shared Repository
More information about the samba-cvs
mailing list