diff options
-rw-r--r-- | source3/include/serverid.h | 5 | ||||
-rw-r--r-- | source3/lib/serverid.c | 16 | ||||
-rw-r--r-- | source3/smbd/server.c | 4 |
3 files changed, 25 insertions, 0 deletions
diff --git a/source3/include/serverid.h b/source3/include/serverid.h index 9ef778cdc0..e60fc47afe 100644 --- a/source3/include/serverid.h +++ b/source3/include/serverid.h @@ -63,4 +63,9 @@ bool serverid_traverse_read(int (*fn)(const struct server_id *id, uint32_t msg_flags, void *private_data), void *private_data); +/* + * Ensure CLEAR_IF_FIRST works fine, to be called from the parent smbd + */ +bool serverid_parent_init(void); + #endif diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c index 9842ead103..5401eed974 100644 --- a/source3/lib/serverid.c +++ b/source3/lib/serverid.c @@ -27,6 +27,22 @@ struct serverid_key { #endif }; +bool serverid_parent_init(void) +{ + struct tdb_wrap *db; + + db = tdb_wrap_open(talloc_autofree_context(), + lock_path("serverid.tdb"), + 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT, + 0644); + if (db == NULL) { + DEBUG(1, ("could not open serverid.tdb: %s\n", + strerror(errno))); + return false; + } + return true; +} + struct serverid_data { uint64_t unique_id; uint32_t msg_flags; diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 145dd5f5d5..e5cfc27794 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -1304,6 +1304,10 @@ extern void build_options(bool screen); exit(1); } + if (!serverid_parent_init()) { + exit(1); + } + namecache_enable(); if (!W_ERROR_IS_OK(registry_init_full())) |