summaryrefslogtreecommitdiff
path: root/source3/lib/dbwrap/dbwrap_tdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/dbwrap/dbwrap_tdb.c')
-rw-r--r--source3/lib/dbwrap/dbwrap_tdb.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/source3/lib/dbwrap/dbwrap_tdb.c b/source3/lib/dbwrap/dbwrap_tdb.c
index 59ed7910f7..e1b26e4e09 100644
--- a/source3/lib/dbwrap/dbwrap_tdb.c
+++ b/source3/lib/dbwrap/dbwrap_tdb.c
@@ -23,9 +23,15 @@
#include "dbwrap/dbwrap_tdb.h"
#include "lib/tdb_wrap/tdb_wrap.h"
#include "util_tdb.h"
+#include "system/filesys.h"
struct db_tdb_ctx {
struct tdb_wrap *wtdb;
+
+ struct {
+ dev_t dev;
+ ino_t ino;
+ } id;
};
static NTSTATUS db_tdb_store(struct db_record *rec, TDB_DATA data, int flag);
@@ -366,6 +372,14 @@ static int db_tdb_transaction_cancel(struct db_context *db)
return 0;
}
+static void db_tdb_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+{
+ struct db_tdb_ctx *db_ctx =
+ talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
+ *id = (uint8_t *)&db_ctx->id;
+ *idlen = sizeof(db_ctx->id);
+}
+
struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
struct loadparm_context *lp_ctx,
const char *name,
@@ -375,6 +389,7 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
{
struct db_context *result = NULL;
struct db_tdb_ctx *db_tdb;
+ struct stat st;
result = talloc_zero(mem_ctx, struct db_context);
if (result == NULL) {
@@ -396,6 +411,15 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
goto fail;
}
+ ZERO_STRUCT(db_tdb->id);
+
+ if (fstat(tdb_fd(db_tdb->wtdb->tdb), &st) == -1) {
+ DEBUG(3, ("fstat failed: %s\n", strerror(errno)));
+ goto fail;
+ }
+ db_tdb->id.dev = st.st_dev;
+ db_tdb->id.ino = st.st_ino;
+
result->fetch_locked = db_tdb_fetch_locked;
result->try_fetch_locked = db_tdb_try_fetch_locked;
result->traverse = db_tdb_traverse;
@@ -409,6 +433,7 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
result->transaction_cancel = db_tdb_transaction_cancel;
result->exists = db_tdb_exists;
result->wipe = db_tdb_wipe;
+ result->id = db_tdb_id;
return result;
fail: