1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-27 14:04:05 +03:00

s3/torture: test rbtree TDB_INSERT and TDB_MODIFY flags

Confirm that record overwrite with TDB_INSERT and record insert with
TDB_MODIFY both fail with appropriate error values.

Signed-off-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>

Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Jun 10 20:28:45 UTC 2020 on sn-devel-184
This commit is contained in:
David Disseldorp 2020-06-09 18:21:11 +02:00 committed by Jeremy Allison
parent 00a0da0503
commit 787092b50a

View File

@ -12880,6 +12880,54 @@ static bool run_local_gencache(int dummy)
return True;
}
static bool rbt_testflags(struct db_context *db, const char *key,
const char *value)
{
bool ret = false;
NTSTATUS status;
struct db_record *rec;
rec = dbwrap_fetch_locked(db, db, string_tdb_data(key));
if (rec == NULL) {
d_fprintf(stderr, "fetch_locked failed\n");
goto done;
}
status = dbwrap_record_store(rec, string_tdb_data(value), TDB_MODIFY);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND)) {
d_fprintf(stderr, "store TDB_MODIFY unexpected status: %s\n",
nt_errstr(status));
goto done;
}
status = dbwrap_record_store(rec, string_tdb_data("overwriteme"),
TDB_INSERT);
if (!NT_STATUS_IS_OK(status)) {
d_fprintf(stderr, "store TDB_INSERT failed: %s\n",
nt_errstr(status));
goto done;
}
status = dbwrap_record_store(rec, string_tdb_data(value), TDB_INSERT);
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
d_fprintf(stderr, "store TDB_INSERT unexpected status: %s\n",
nt_errstr(status));
goto done;
}
status = dbwrap_record_store(rec, string_tdb_data(value), TDB_MODIFY);
if (!NT_STATUS_IS_OK(status)) {
d_fprintf(stderr, "store TDB_MODIFY failed: %s\n",
nt_errstr(status));
goto done;
}
ret = true;
done:
TALLOC_FREE(rec);
return ret;
}
static bool rbt_testval(struct db_context *db, const char *key,
const char *value)
{
@ -12951,7 +12999,11 @@ static bool run_local_rbtree(int dummy)
return false;
}
for (i=0; i<1000; i++) {
if (!rbt_testflags(db, "firstkey", "firstval")) {
goto done;
}
for (i = 0; i < 999; i++) {
char key[sizeof("key-9223372036854775807")];
char value[sizeof("value-9223372036854775807")];