]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
dsdb: pass the remote address to samdb connect
authorGary Lockyer <gary@catalyst.net.nz>
Wed, 4 Apr 2018 00:39:55 +0000 (12:39 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 10 May 2018 18:02:23 +0000 (20:02 +0200)
Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/passdb/pdb_samba_dsdb.c
source4/dns_server/dlz_bind9.c
source4/dsdb/samdb/samdb.c
source4/dsdb/samdb/samdb.h
source4/ldap_server/ldap_backend.c
source4/torture/dns/dlz_bind9.c

index 05052a6636190fa6a1340b31c8ec3704c41c7d73..f48f1fd10696d4afda2ae9aca4148d64395ddc73 100644 (file)
@@ -3893,7 +3893,7 @@ static NTSTATUS pdb_init_samba_dsdb(struct pdb_methods **pdb_method,
                                state->lp_ctx,
                                system_session(state->lp_ctx),
                                0, location,
-                               &state->ldb, &errstring);
+                               NULL, &state->ldb, &errstring);
 
        if (!state->ldb) {
                DEBUG(0, ("samdb_connect failed: %s: %s\n",
index cf171cb66086de1b71bd8fa66d04c8c6f253bf1e..17afd1fa8509343d3d0f7d2b58eb0e975694d764 100644 (file)
@@ -706,7 +706,7 @@ _PUBLIC_ isc_result_t dlz_create(const char *dlzname,
        ret = samdb_connect_url(state, state->ev_ctx, state->lp,
                                system_session(state->lp), 0,
                                state->options.url,
-                               &state->samdb, &errstring);
+                               NULL, &state->samdb, &errstring);
        if (ret != LDB_SUCCESS) {
                state->log(ISC_LOG_ERROR,
                           "samba_dlz: Failed to connect to %s: %s",
index 1f80267e3e098aeeb35df11e5210f9c6ac7a76ad..7a1bb79b63652c1620bbc75b3c6e22b7b8826894 100644 (file)
@@ -42,6 +42,7 @@
 #include "auth/credentials/credentials.h"
 #include "param/secrets.h"
 #include "auth/auth.h"
+#include "lib/tsocket/tsocket.h"
 
 /*
   connect to the SAM database specified by URL
@@ -51,7 +52,9 @@ int samdb_connect_url(TALLOC_CTX *mem_ctx,
                      struct tevent_context *ev_ctx,
                      struct loadparm_context *lp_ctx,
                      struct auth_session_info *session_info,
-                     unsigned int flags, const char *url,
+                     unsigned int flags,
+                     const char *url,
+                     struct tsocket_address *remote_address,
                      struct ldb_context **ldb_ret,
                      char **errstring)
 {
@@ -59,13 +62,17 @@ int samdb_connect_url(TALLOC_CTX *mem_ctx,
        int ret;
        *ldb_ret = NULL;
        *errstring = NULL;
-       ldb = ldb_wrap_find(url, ev_ctx, lp_ctx, session_info, NULL, flags);
-       if (ldb != NULL) {
-               *ldb_ret = talloc_reference(mem_ctx, ldb);
-               if (*ldb_ret == NULL) {
-                       return LDB_ERR_OPERATIONS_ERROR;
+
+       if (remote_address == NULL) {
+               ldb = ldb_wrap_find(url, ev_ctx, lp_ctx,
+                                   session_info, NULL, flags);
+               if (ldb != NULL) {
+                       *ldb_ret = talloc_reference(mem_ctx, ldb);
+                       if (*ldb_ret == NULL) {
+                               return LDB_ERR_OPERATIONS_ERROR;
+                       }
+                       return LDB_SUCCESS;
                }
-               return LDB_SUCCESS;
        }
 
        ldb = samba_ldb_init(mem_ctx, ev_ctx, lp_ctx, session_info, NULL);
@@ -91,6 +98,20 @@ int samdb_connect_url(TALLOC_CTX *mem_ctx,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
+       /*
+        * If a remote_address was specified, then set it on the DB
+        * and do not add to the wrap list (as we need to keep the LDB
+        * pointer unique for the address).
+        *
+        * We use this for audit logging and for the "netlogon" attribute
+        */
+       if (remote_address != NULL) {
+               ldb_set_opaque(ldb, "remoteAddress",
+                              remote_address);
+               *ldb_ret = ldb;
+               return LDB_SUCCESS;
+       }
+               
        if (!ldb_wrap_add(url, ev_ctx, lp_ctx, session_info, NULL, flags, ldb)) {
                *errstring = talloc_asprintf(mem_ctx,
                                             "Failed to add cached DB reference"
@@ -118,7 +139,7 @@ struct ldb_context *samdb_connect(TALLOC_CTX *mem_ctx,
        char *errstring;
        struct ldb_context *ldb;
        int ret = samdb_connect_url(mem_ctx, ev_ctx, lp_ctx, session_info, flags,
-                                   "sam.ldb", &ldb, &errstring);
+                                   "sam.ldb", NULL, &ldb, &errstring);
        if (ret == LDB_SUCCESS) {
                return ldb;
        }
index a095858d572fa1d2970e059391be272bae861ab9..d2686af30f7a456767545f5910f9659a6b444eaa 100644 (file)
@@ -28,7 +28,7 @@ struct dsdb_extended_replicated_object;
 struct dsdb_extended_replicated_objects;
 struct loadparm_context;
 struct tevent_context;
-
+struct tsocket_address;
 struct dsdb_trust_routing_table;
 
 #include "librpc/gen_ndr/security.h"
index 95c7ee7a7f1e778c8b546556d2812aed67882bc4..39f1aa2a2a6248af2175adcacd510b577d6e3fbd 100644 (file)
@@ -31,6 +31,7 @@
 #include <ldb_errors.h>
 #include <ldb_module.h>
 #include "ldb_wrap.h"
+#include "lib/tsocket/tsocket.h"
 
 static int map_ldb_error(TALLOC_CTX *mem_ctx, int ldb_err,
        const char *add_err_string, const char **errstring)
@@ -188,7 +189,10 @@ int ldapsrv_backend_Init(struct ldapsrv_connection *conn,
                                    conn->lp_ctx,
                                    conn->session_info,
                                    conn->global_catalog ? LDB_FLG_RDONLY : 0,
-                                   "sam.ldb", &conn->ldb, errstring);
+                                   "sam.ldb",
+                                   conn->connection->remote_address,
+                                   &conn->ldb,
+                                   errstring);
        if (ret != LDB_SUCCESS) {
                return ret;
        }
@@ -229,9 +233,6 @@ int ldapsrv_backend_Init(struct ldapsrv_connection *conn,
                ldb_set_opaque(conn->ldb, "supportedSASLMechanisms", sasl_mechs);
        }
 
-       ldb_set_opaque(conn->ldb, "remoteAddress",
-                      conn->connection->remote_address);
-
        return LDB_SUCCESS;
 }
 
index 42b104e070ccb819f90c5bf21fe2f21adca6c6ff..d94848728fcf3d521d4741e11b765f542f15fdbf 100644 (file)
@@ -92,7 +92,9 @@ static isc_result_t dlz_bind9_writeable_zone_hook(dns_view_t *view,
                                    system_session(tctx->lp_ctx),
                                    0,
                                    test_dlz_bind9_binddns_dir(tctx, "dns/sam.ldb"),
-                                   &samdb, &errstring);
+                                   NULL,
+                                   &samdb,
+                                   &errstring);
        struct ldb_message *msg;
        const char *attrs[] = {
                NULL