In the child, we fully re-open serverid.tdb, which leads to one fcntl lock for
CLEAR_IF_FIRST detection per smbd. This opens the tdb in the parent and holds
it, so that tdb_reopen_all correctly catches the CLEAR_IF_FIRST bit.
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
#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;
exit(1);
}
+ if (!serverid_parent_init()) {
+ exit(1);
+ }
+
namecache_enable();
if (!W_ERROR_IS_OK(registry_init_full()))