s3-dbwrap: push lp_ctx up another layer in the stack
authorAndrew Bartlett <abartlet@samba.org>
Mon, 16 Apr 2012 03:37:39 +0000 (13:37 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Wed, 18 Apr 2012 02:04:59 +0000 (12:04 +1000)
This will allow db_open_tdb() to be called from common code, which may
already have a loadparm context loaded.

It also slowly moves the lp_ctx up the stack, as required to remove
the library loop between smbconf and the registry.

Andrew Bartlett

source3/lib/dbwrap/dbwrap_open.c
source3/lib/dbwrap/dbwrap_tdb.c
source3/lib/dbwrap/dbwrap_tdb.h
source3/smbd/notify_internal.c

index 5491a1f56bd9b8b3865c136b43fe7c8435397b58..b7e6bd586fbdfa8d87ee361eea0d625e66ee8e9c 100644 (file)
@@ -24,6 +24,7 @@
 #include "dbwrap/dbwrap_open.h"
 #include "dbwrap/dbwrap_tdb.h"
 #include "dbwrap/dbwrap_ctdb.h"
+#include "lib/param/param.h"
 #include "util_tdb.h"
 #ifdef CLUSTER_SUPPORT
 #include "ctdb_private.h"
@@ -117,9 +118,11 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
 #endif
 
        if (result == NULL) {
-               result = db_open_tdb(mem_ctx, name, hash_size,
+               struct loadparm_context *lp_ctx = loadparm_init_s3(mem_ctx, loadparm_s3_context());
+               result = db_open_tdb(mem_ctx, lp_ctx, name, hash_size,
                                     tdb_flags, open_flags, mode,
                                     lock_order);
+               talloc_unlink(mem_ctx, lp_ctx);
        }
        return result;
 }
index ffad39bed8bfb0f78765a12a029d3cce6031f240..2041613be2dc913e8d76b070f8f675685ecc1657 100644 (file)
@@ -22,7 +22,6 @@
 #include "dbwrap/dbwrap_private.h"
 #include "dbwrap/dbwrap_tdb.h"
 #include "lib/tdb_wrap/tdb_wrap.h"
-#include "lib/param/param.h"
 #include "util_tdb.h"
 
 struct db_tdb_ctx {
@@ -363,6 +362,7 @@ static int db_tdb_transaction_cancel(struct db_context *db)
 }
 
 struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
+                              struct loadparm_context *lp_ctx,
                               const char *name,
                               int hash_size, int tdb_flags,
                               int open_flags, mode_t mode,
@@ -370,14 +370,12 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
 {
        struct db_context *result = NULL;
        struct db_tdb_ctx *db_tdb;
-       struct loadparm_context *lp_ctx;
 
        result = talloc_zero(mem_ctx, struct db_context);
        if (result == NULL) {
                DEBUG(0, ("talloc failed\n"));
                goto fail;
        }
-       lp_ctx = loadparm_init_s3(result, loadparm_s3_context());
 
        result->private_data = db_tdb = talloc(result, struct db_tdb_ctx);
        if (db_tdb == NULL) {
@@ -388,7 +386,6 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
 
        db_tdb->wtdb = tdb_wrap_open(db_tdb, name, hash_size, tdb_flags,
                                     open_flags, mode, lp_ctx);
-       talloc_unlink(result, lp_ctx);
        if (db_tdb->wtdb == NULL) {
                DEBUG(3, ("Could not open tdb: %s\n", strerror(errno)));
                goto fail;
index 1f7a223c7027a91dd7aeddf0777e0a78f5220496..6a6da45a084f645d9ce37a5fe2b35aca61d65255 100644 (file)
@@ -25,6 +25,7 @@
 struct db_context;
 
 struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
+                              struct loadparm_context *lp_ctx,
                               const char *name,
                               int hash_size, int tdb_flags,
                               int open_flags, mode_t mode,
index 6e6bdf7b0368294c9c60397c9976bb1ac34b6f14..4d787436871dc22d6bd0fe70f3f1dbb9a56a77f8 100644 (file)
@@ -123,6 +123,7 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
                                   struct messaging_context *msg,
                                   struct event_context *ev)
 {
+       struct loadparm_context *lp_ctx;
        struct notify_context *notify;
 
        notify = talloc(mem_ctx, struct notify_context);
@@ -132,10 +133,12 @@ struct notify_context *notify_init(TALLOC_CTX *mem_ctx,
        notify->msg = msg;
        notify->list = NULL;
 
+       lp_ctx = loadparm_init_s3(notify, loadparm_s3_context());
        notify->db_notify = db_open_tdb(
-               notify, lock_path("notify.tdb"),
+               notify, lp_ctx, lock_path("notify.tdb"),
                0, TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH,
                O_RDWR|O_CREAT, 0644, DBWRAP_LOCK_ORDER_2);
+               talloc_unlink(notify, lp_ctx);
        if (notify->db_notify == NULL) {
                goto fail;
        }