diff options
-rw-r--r-- | source3/include/g_lock.h | 2 | ||||
-rw-r--r-- | source3/lib/g_lock.c | 13 | ||||
-rw-r--r-- | source3/smbd/server.c | 3 | ||||
-rw-r--r-- | source3/torture/test_g_lock.c | 6 |
4 files changed, 15 insertions, 9 deletions
diff --git a/source3/include/g_lock.h b/source3/include/g_lock.h index a1d845f3074..20cee4c1a43 100644 --- a/source3/include/g_lock.h +++ b/source3/include/g_lock.h @@ -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, diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c index 653ec34bb7f..45a90a20df8 100644 --- a/source3/lib/g_lock.c +++ b/source3/lib/g_lock.c @@ -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", diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 1d0e317b5c8..df92bd4f356 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -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", diff --git a/source3/torture/test_g_lock.c b/source3/torture/test_g_lock.c index 1d3be9cbad0..5e12167cdb5 100644 --- a/source3/torture/test_g_lock.c +++ b/source3/torture/test_g_lock.c @@ -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)); |