*/
#include "includes.h"
+#include "system/filesys.h"
#include "serverid.h"
+#include "dbwrap.h"
struct serverid_key {
pid_t pid;
-#ifdef CLUSTER_SUPPORT
uint32_t vnn;
-#endif
};
-bool serverid_parent_init(void)
+struct serverid_data {
+ uint64_t unique_id;
+ uint32_t msg_flags;
+};
+
+bool serverid_parent_init(TALLOC_CTX *mem_ctx)
{
struct tdb_wrap *db;
* work.
*/
- db = tdb_wrap_open(talloc_autofree_context(),
- lock_path("serverid.tdb"),
- 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT,
+ db = tdb_wrap_open(mem_ctx, lock_path("serverid.tdb"),
+ 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH, O_RDWR|O_CREAT,
0644);
if (db == NULL) {
DEBUG(1, ("could not open serverid.tdb: %s\n",
return true;
}
-struct serverid_data {
- uint64_t unique_id;
- uint32_t msg_flags;
-};
-
static struct db_context *serverid_db(void)
{
static struct db_context *db;
if (db != NULL) {
return db;
}
- db = db_open(talloc_autofree_context(), lock_path("serverid.tdb"),
- 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT, 0644);
+ db = db_open(NULL, lock_path("serverid.tdb"), 0,
+ TDB_DEFAULT|TDB_CLEAR_IF_FIRST|TDB_INCOMPATIBLE_HASH, O_RDWR|O_CREAT, 0644);
return db;
}
{
ZERO_STRUCTP(key);
key->pid = id->pid;
-#ifdef CLUSTER_SUPPORT
key->vnn = id->vnn;
-#endif
}
bool serverid_register(const struct server_id id, uint32_t msg_flags)
struct serverid_key key;
struct serverid_data *data;
struct db_record *rec;
- TDB_DATA tdbkey, tdbdata;
+ TDB_DATA tdbkey;
NTSTATUS status;
bool ret = false;
if (rec->value.dsize != sizeof(struct serverid_data)) {
DEBUG(1, ("serverid record has unexpected size %d "
"(wanted %d)\n", (int)rec->value.dsize,
- sizeof(struct serverid_data)));
+ (int)sizeof(struct serverid_data)));
goto done;
}
data->msg_flags &= ~msg_flags;
}
- status = rec->store(rec, tdbdata, 0);
+ status = rec->store(rec, rec->value, 0);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("Storing serverid.tdb record failed: %s\n",
nt_errstr(status)));
struct serverid_key key;
TDB_DATA tdbkey;
+ if (lp_clustering() && !process_exists(*id)) {
+ return false;
+ }
+
db = serverid_db();
if (db == NULL) {
return false;
memcpy(&data, rec->value.dptr, sizeof(data));
id->pid = key.pid;
-#ifdef CLUSTER_SUPPORT
id->vnn = key.vnn;
-#endif
id->unique_id = data.unique_id;
*msg_flags = data.msg_flags;
return true;