The branch, master has been updated
       via  06a0101 s4-provision: Update configuration lines for dlz_bind9
       via  bbc98df dlz_bind9: Build shared libraries for both BIND versions 
9.8 and 9.9
       via  07677b2 dlz_bind9: changes to make dlz_bind9 work with BIND 9.9.0
      from  89e9984 waf: samba-specific methods should have capitalized names, 
change process_separate_rule to follow

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 06a010108251ac58010e65ffea97b307551d6122
Author: Amitay Isaacs <[email protected]>
Date:   Thu Apr 5 16:51:24 2012 +1000

    s4-provision: Update configuration lines for dlz_bind9
    
    This adds configuration lines for BIND versions 9.8.x and 9.9.x.
    
    Autobuild-User: Amitay Isaacs <[email protected]>
    Autobuild-Date: Mon Apr 16 03:52:14 CEST 2012 on sn-devel-104

commit bbc98df743fb81b560bbb0d1e2a3db6425720fac
Author: Amitay Isaacs <[email protected]>
Date:   Thu Apr 5 16:45:01 2012 +1000

    dlz_bind9: Build shared libraries for both BIND versions 9.8 and 9.9
    
    This adds #define BIND_VERSION_9_8 and keeps the current version as 9.9, so
    shared libraries can be built for both BIND versions.

commit 07677b2e433e4dc1aa956b2fda0e477a9c7b88b5
Author: Amitay Isaacs <[email protected]>
Date:   Thu Mar 8 18:34:04 2012 +1100

    dlz_bind9: changes to make dlz_bind9 work with BIND 9.9.0
    
    The main changes are:
      DLZ_DLOPEN_VERSION changed from 1 to 2
      isc_boolean_t changed from bool to int
      dlz_lookup() now takes 2 additional arguments

-----------------------------------------------------------------------

Summary of changes:
 source4/dns_server/dlz_bind9.c                     |   41 ++++++++++--------
 source4/dns_server/dlz_minimal.h                   |   44 ++++++++++++++++++++
 source4/dns_server/wscript_build                   |   10 ++++
 .../scripting/python/samba/provision/sambadns.py   |    4 +-
 source4/setup/named.conf.dlz                       |    7 +++-
 5 files changed, 84 insertions(+), 22 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dns_server/dlz_bind9.c b/source4/dns_server/dlz_bind9.c
index 6aa0aad..224f242 100644
--- a/source4/dns_server/dlz_bind9.c
+++ b/source4/dns_server/dlz_bind9.c
@@ -59,12 +59,10 @@ struct dlz_bind9_data {
        char *update_name;
 
        /* helper functions from the dlz_dlopen driver */
-       void (*log)(int level, const char *fmt, ...);
-       isc_result_t (*putrr)(dns_sdlzlookup_t *handle, const char *type,
-                             dns_ttl_t ttl, const char *data);
-       isc_result_t (*putnamedrr)(dns_sdlzlookup_t *handle, const char *name,
-                                  const char *type, dns_ttl_t ttl, const char 
*data);
-       isc_result_t (*writeable_zone)(dns_view_t *view, const char *zone_name);
+       log_t *log;
+       dns_sdlz_putrr_t *putrr;
+       dns_sdlz_putnamedrr_t *putnamedrr;
+       dns_dlz_writeablezone_t *writeable_zone;
 };
 
 
@@ -848,8 +846,15 @@ static isc_result_t dlz_lookup_types(struct dlz_bind9_data 
*state,
 /*
   lookup one record
  */
+#ifdef BIND_VERSION_9_8
 _PUBLIC_ isc_result_t dlz_lookup(const char *zone, const char *name,
                                 void *dbdata, dns_sdlzlookup_t *lookup)
+#else
+_PUBLIC_ 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
 {
        struct dlz_bind9_data *state = talloc_get_type_abort(dbdata, struct 
dlz_bind9_data);
        return dlz_lookup_types(state, zone, name, lookup, NULL);
@@ -1184,7 +1189,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        tmp_ctx = talloc_new(NULL);
        if (tmp_ctx == NULL) {
                state->log(ISC_LOG_ERROR, "samba_dlz: no memory");
-               return false;
+               return ISC_FALSE;
        }
 
        ap_req = data_blob_const(keydata, keydatalen);
@@ -1192,7 +1197,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        if (!server_credentials) {
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to init server 
credentials");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        cli_credentials_set_krb5_context(server_credentials, 
state->smb_krb5_ctx);
@@ -1206,7 +1211,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to obtain server 
credentials from %s",
                           keytab_name);
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
        talloc_free(keytab_name);
 
@@ -1216,7 +1221,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        if (!NT_STATUS_IS_OK(nt_status)) {
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to start gensec 
server");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        gensec_set_credentials(gensec_ctx, server_credentials);
@@ -1225,21 +1230,21 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        if (!NT_STATUS_IS_OK(nt_status)) {
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to start spnego");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        nt_status = gensec_update(gensec_ctx, tmp_ctx, state->ev_ctx, ap_req, 
&ap_req);
        if (!NT_STATUS_IS_OK(nt_status)) {
                state->log(ISC_LOG_ERROR, "samba_dlz: spnego update failed");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        nt_status = gensec_session_info(gensec_ctx, tmp_ctx, &session_info);
        if (!NT_STATUS_IS_OK(nt_status)) {
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to create session 
info");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        /* Get the DN from name */
@@ -1247,7 +1252,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        if (result != ISC_R_SUCCESS) {
                state->log(ISC_LOG_ERROR, "samba_dlz: failed to find name %s", 
name);
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        /* make sure the dn exists, or find parent dn in case new object is 
being added */
@@ -1262,7 +1267,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
                talloc_free(res);
        } else {
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        /* Do ACL check */
@@ -1274,7 +1279,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
                        "samba_dlz: disallowing update of signer=%s name=%s 
type=%s error=%s",
                        signer, name, type, ldb_strerror(ldb_ret));
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
 
        /* Cache session_info, so it can be used in the actual add/delete 
operation */
@@ -1282,7 +1287,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
        if (state->update_name == NULL) {
                state->log(ISC_LOG_ERROR, "samba_dlz: memory allocation error");
                talloc_free(tmp_ctx);
-               return false;
+               return ISC_FALSE;
        }
        state->session_info = talloc_steal(state, session_info);
 
@@ -1290,7 +1295,7 @@ _PUBLIC_ isc_boolean_t dlz_ssumatch(const char *signer, 
const char *name, const
                   signer, name, tcpaddr, type, key);
 
        talloc_free(tmp_ctx);
-       return true;
+       return ISC_TRUE;
 }
 
 
diff --git a/source4/dns_server/dlz_minimal.h b/source4/dns_server/dlz_minimal.h
index 9aae776..5262cbd 100644
--- a/source4/dns_server/dlz_minimal.h
+++ b/source4/dns_server/dlz_minimal.h
@@ -23,10 +23,18 @@
   tree.
  */
 typedef unsigned int isc_result_t;
+#ifdef BIND_VERSION_9_8
 typedef bool isc_boolean_t;
+#else
+typedef int isc_boolean_t;
+#endif
 typedef uint32_t dns_ttl_t;
 
+#ifdef BIND_VERSION_9_8
 #define DLZ_DLOPEN_VERSION 1
+#else
+#define DLZ_DLOPEN_VERSION 2
+#endif
 
 /* return this in flags to dlz_version() if thread safe */
 #define DNS_SDLZFLAG_THREADSAFE                0x00000001U
@@ -34,8 +42,14 @@ typedef uint32_t dns_ttl_t;
 /* result codes */
 #define ISC_R_SUCCESS                  0
 #define ISC_R_NOMEMORY                 1
+#define ISC_R_NOPERM                   6
 #define ISC_R_NOTFOUND                 23
 #define ISC_R_FAILURE                  25
+#define ISC_R_NOMORE                   29
+
+/* boolean values */
+#define ISC_TRUE       1
+#define ISC_FALSE      0
 
 /* log levels */
 #define ISC_LOG_INFO           (-1)
@@ -48,6 +62,29 @@ typedef uint32_t dns_ttl_t;
 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;
+
+/*
+ * method definitions for callbacks provided by dlopen driver
+ */
+
+typedef void log_t(int level, const char *fmt, ...);
+
+typedef isc_result_t dns_sdlz_putrr_t(dns_sdlzlookup_t *lookup,
+                                     const char *type,
+                                     dns_ttl_t ttl,
+                                     const char *data);
+
+typedef isc_result_t dns_sdlz_putnamedrr_t(dns_sdlzallnodes_t *allnodes,
+                                          const char *name,
+                                          const char *type,
+                                          dns_ttl_t ttl,
+                                          const char *data);
+
+typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
+                                            const char *zone_name);
+
 
 /*
  * prototypes for the functions you can include in your driver
@@ -79,8 +116,15 @@ isc_result_t dlz_findzonedb(void *dbdata, const char *name);
 /*
   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
 
 /*
   dlz_allowzonexfr() is optional, and should be supplied if you want
diff --git a/source4/dns_server/wscript_build b/source4/dns_server/wscript_build
index 29895b2..e508fcd 100644
--- a/source4/dns_server/wscript_build
+++ b/source4/dns_server/wscript_build
@@ -12,8 +12,18 @@ bld.SAMBA_MODULE('service_dns',
 # a bind9 dlz module giving access to the Samba DNS SAM
 bld.SAMBA_LIBRARY('dlz_bind9',
                   source='dlz_bind9.c',
+                  cflags='-DBIND_VERSION_9_8',
                   private_library=True,
                   link_name='modules/bind9/dlz_bind9.so',
                   realname='dlz_bind9.so',
                   install_path='${MODULESDIR}/bind9',
                   deps='samba-hostconfig samdb gensec popt')
+
+bld.SAMBA_LIBRARY('dlz_bind9_9',
+                  source='dlz_bind9.c',
+                  cflags='-DBIND_VERSION_9_9',
+                  private_library=True,
+                  link_name='modules/bind9/dlz_bind9_9.so',
+                  realname='dlz_bind9.so',
+                  install_path='${MODULESDIR}/bind9',
+                  deps='samba-hostconfig samdb gensec popt')
diff --git a/source4/scripting/python/samba/provision/sambadns.py 
b/source4/scripting/python/samba/provision/sambadns.py
index f24284a..5c3e6ba 100644
--- a/source4/scripting/python/samba/provision/sambadns.py
+++ b/source4/scripting/python/samba/provision/sambadns.py
@@ -814,11 +814,9 @@ def create_named_conf(paths, realm, dnsdomain, 
dns_backend):
         setup_file(setup_path("named.conf.update"), paths.namedconf_update)
 
     elif dns_backend == "BIND9_DLZ":
-        dlz_module_path = os.path.join(samba.param.modules_dir(),
-                                        "bind9/dlz_bind9.so")
         setup_file(setup_path("named.conf.dlz"), paths.namedconf, {
                     "NAMED_CONF": paths.namedconf,
-                    "BIND9_DLZ_MODULE": dlz_module_path,
+                    "MODULESDIR" : samba.param.modules_dir(),
                     })
 
 
diff --git a/source4/setup/named.conf.dlz b/source4/setup/named.conf.dlz
index c90020f..be20a57 100644
--- a/source4/setup/named.conf.dlz
+++ b/source4/setup/named.conf.dlz
@@ -7,8 +7,13 @@
 
 #
 # This configures dynamically loadable zones (DLZ) from AD schema
+# Uncomment only single database line, depending on your BIND version
 #
 dlz "AD DNS Zone" {
-    database "dlopen ${BIND9_DLZ_MODULE}";
+    # For BIND 9.8.0
+    database "dlopen ${MODULESDIR}/bind9/dlz_bind9.so";
+
+    # For BIND 9.9.0
+    # database "dlopen ${MODULESDIR}/bind9/dlz_bind9_9.so";
 };
 


-- 
Samba Shared Repository

Reply via email to