s4:lib/messaging: use correct path for names.tdb
authorRalph Boehme <slow@samba.org>
Wed, 14 Oct 2015 10:40:03 +0000 (12:40 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 20 Oct 2015 09:51:16 +0000 (11:51 +0200)
source3 messaging_init() calls server_id_db_init() (where names.tdb is
created) with lock_path. source4 imessaging_init() otoh wrongly used the
special lock_path subdirectory "msg.lock":

> find /opt/samba/ -name names.tdb
/opt/samba/var/lock/msg.lock/names.tdb
/opt/samba/var/lock/names.tdb

> tdbdump /opt/samba/var/lock/names.tdb
{
key(14) = "notify-daemon\00"
data(27) = "28609/12756565486113779780\00"
}

> tdbdump /opt/samba/var/lock/msg.lock/names.tdb
{
key(15) = "winbind_server\00"
data(8) = "28593/0\00"
}

With this patch both source3 and source4 messaging now use the same
names.tdb which is what we want:

> find /opt/samba/ -name names.tdb
/opt/samba/var/lock/names.tdb

> tdbdump /opt/samba/var/lock/names.tdb
{
key(15) = "winbind_server\00"
data(8) = "26434/0\00"
}
{
key(14) = "notify-daemon\00"
data(26) = "26452/3454520012124001687\00"
}

Bug: https://bugzilla.samba.org/show_bug.cgi?id=11562

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/lib/messaging/messaging.c

index bbc22ec0e2844edab10f3d1f0d267be88bf37339..6d891e56e672299515a2dd26981925d3d019578b 100644 (file)
@@ -311,6 +311,7 @@ struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
        struct imessaging_context *msg;
        bool ok;
        int ret;
+       const char *lock_dir = NULL;
 
        if (ev == NULL) {
                return NULL;
@@ -323,6 +324,11 @@ struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
 
        /* create the messaging directory if needed */
 
+       lock_dir = lpcfg_lock_directory(lp_ctx);
+       if (lock_dir == NULL) {
+               goto fail;
+       }
+
        msg->sock_dir = lpcfg_private_path(msg, lp_ctx, "msg.sock");
        if (msg->sock_dir == NULL) {
                goto fail;
@@ -363,7 +369,7 @@ struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
        msg->start_time    = timeval_current();
 
        msg->names = server_id_db_init(
-               msg, server_id, msg->lock_dir, 0,
+               msg, server_id, lock_dir, 0,
                TDB_INCOMPATIBLE_HASH|TDB_CLEAR_IF_FIRST|
                lpcfg_tdb_flags(lp_ctx, 0));
        if (msg->names == NULL) {