lib: Make g_lock_write_data use TDB_DATA
authorVolker Lendecke <vl@samba.org>
Sun, 3 Dec 2017 19:47:02 +0000 (20:47 +0100)
committerRalph Boehme <slow@samba.org>
Thu, 8 Feb 2018 09:01:50 +0000 (10:01 +0100)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/include/g_lock.h
source3/lib/g_lock.c
source3/smbd/server.c
source3/torture/test_g_lock.c

index a1d845f307439ce427f06e3fc7292a9af7bccbcb..20cee4c1a431e953c54c7c9c1bb22fba1d2b51dc 100644 (file)
@@ -48,7 +48,7 @@ NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, TDB_DATA key,
                     enum g_lock_type lock_type, struct timeval timeout);
 NTSTATUS g_lock_unlock(struct g_lock_ctx *ctx, TDB_DATA key);
 
-NTSTATUS g_lock_write_data(struct g_lock_ctx *ctx, const char *name,
+NTSTATUS g_lock_write_data(struct g_lock_ctx *ctx, TDB_DATA key,
                           const uint8_t *buf, size_t buflen);
 
 NTSTATUS g_lock_do(const char *name, enum g_lock_type lock_type,
index 653ec34bb7f95c4ade1592773606c8bf1c1e0524..45a90a20df85534741927f5c245697dfbd7a6660 100644 (file)
@@ -553,7 +553,7 @@ NTSTATUS g_lock_unlock(struct g_lock_ctx *ctx, TDB_DATA key)
 }
 
 struct g_lock_write_data_state {
-       const char *name;
+       TDB_DATA key;
        struct server_id self;
        const uint8_t *data;
        size_t datalen;
@@ -573,7 +573,10 @@ static void g_lock_write_data_fn(struct db_record *rec,
 
        ok = g_lock_parse(value.dptr, value.dsize, &lck);
        if (!ok) {
-               DBG_DEBUG("g_lock_parse for %s failed\n", state->name);
+               DBG_DEBUG("g_lock_parse for %s failed\n",
+                         hex_encode_talloc(talloc_tos(),
+                                           state->key.dptr,
+                                           state->key.dsize));
                state->status = NT_STATUS_INTERNAL_DB_CORRUPTION;
                return;
        }
@@ -596,16 +599,16 @@ static void g_lock_write_data_fn(struct db_record *rec,
        state->status = g_lock_store(rec, &lck, NULL);
 }
 
-NTSTATUS g_lock_write_data(struct g_lock_ctx *ctx, const char *name,
+NTSTATUS g_lock_write_data(struct g_lock_ctx *ctx, TDB_DATA key,
                           const uint8_t *buf, size_t buflen)
 {
        struct g_lock_write_data_state state = {
-               .name = name, .self = messaging_server_id(ctx->msg),
+               .key = key, .self = messaging_server_id(ctx->msg),
                .data = buf, .datalen = buflen
        };
        NTSTATUS status;
 
-       status = dbwrap_do_locked(ctx->db, string_term_tdb_data(name),
+       status = dbwrap_do_locked(ctx->db, key,
                                  g_lock_write_data_fn, &state);
        if (!NT_STATUS_IS_OK(status)) {
                DBG_WARNING("dbwrap_do_locked failed: %s\n",
index 1d0e317b5c8180d0c7a16cafabdebb967ec0265f..df92bd4f35615676fd8d8bb3af6a79a5066f48b0 100644 (file)
@@ -1520,7 +1520,8 @@ static NTSTATUS smbd_claim_version(struct messaging_context *msg,
                return NT_STATUS_SXS_VERSION_CONFLICT;
        }
 
-       status = g_lock_write_data(ctx, name, (const uint8_t *)version,
+       status = g_lock_write_data(ctx, string_term_tdb_data(name),
+                                  (const uint8_t *)version,
                                   strlen(version)+1);
        if (!NT_STATUS_IS_OK(status)) {
                DBG_WARNING("g_lock_write_data failed: %s\n",
index 1d3be9cbad07b63154deb4dae1a88add198dbd17..5e12167cdb5c3366f7c2e5c43899825b6522a139 100644 (file)
@@ -148,7 +148,8 @@ bool run_g_lock2(int dummy)
                goto fail;
        }
 
-       status = g_lock_write_data(ctx, lockname, &data, sizeof(data));
+       status = g_lock_write_data(ctx, string_term_tdb_data(lockname),
+                                  &data, sizeof(data));
        if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_LOCKED)) {
                fprintf(stderr, "unlocked g_lock_write_data returned %s\n",
                        nt_errstr(status));
@@ -163,7 +164,8 @@ bool run_g_lock2(int dummy)
                goto fail;
        }
 
-       status = g_lock_write_data(ctx, lockname, &data, sizeof(data));
+       status = g_lock_write_data(ctx, string_term_tdb_data(lockname),
+                                  &data, sizeof(data));
        if (!NT_STATUS_IS_OK(status)) {
                fprintf(stderr, "g_lock_write_data failed: %s\n",
                        nt_errstr(status));