mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
torture3: Make sure dbwrap_parse_record returns NOT_FOUND for invalid watchers data
Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Volker Lendecke <vl@samba.org> Autobuild-Date(master): Mon May 1 14:39:41 CEST 2017 on sn-devel-144
This commit is contained in:
parent
6f81f07303
commit
2951c592f7
@ -147,6 +147,7 @@ local_tests = [
|
||||
"LOCAL-PTHREADPOOL-TEVENT",
|
||||
"LOCAL-CANONICALIZE-PATH",
|
||||
"LOCAL-DBWRAP-WATCH1",
|
||||
"LOCAL-DBWRAP-WATCH2",
|
||||
"LOCAL-hex_encode_buf",
|
||||
"LOCAL-remove_duplicate_addrs2"]
|
||||
|
||||
|
@ -109,6 +109,7 @@ bool run_cleanup4(int dummy);
|
||||
bool run_notify_bench2(int dummy);
|
||||
bool run_notify_bench3(int dummy);
|
||||
bool run_dbwrap_watch1(int dummy);
|
||||
bool run_dbwrap_watch2(int dummy);
|
||||
bool run_idmap_tdb_common_test(int dummy);
|
||||
bool run_local_dbwrap_ctdb(int dummy);
|
||||
bool run_qpathinfo_bufsize(int dummy);
|
||||
|
@ -108,3 +108,71 @@ fail:
|
||||
TALLOC_FREE(ev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure dbwrap_parse_record does not return NT_STATUS_OK on
|
||||
* invalid data
|
||||
*/
|
||||
|
||||
bool run_dbwrap_watch2(int dummy)
|
||||
{
|
||||
struct tevent_context *ev = NULL;
|
||||
struct messaging_context *msg = NULL;
|
||||
struct db_context *backend = NULL;
|
||||
struct db_context *db = NULL;
|
||||
const char *keystr = "key";
|
||||
TDB_DATA key = string_term_tdb_data(keystr);
|
||||
NTSTATUS status;
|
||||
bool ret = false;
|
||||
|
||||
ev = samba_tevent_context_init(talloc_tos());
|
||||
if (ev == NULL) {
|
||||
fprintf(stderr, "tevent_context_init failed\n");
|
||||
goto fail;
|
||||
}
|
||||
msg = messaging_init(ev, ev);
|
||||
if (msg == NULL) {
|
||||
fprintf(stderr, "messaging_init failed\n");
|
||||
goto fail;
|
||||
}
|
||||
backend = db_open(msg, "test_watch.tdb", 0, TDB_CLEAR_IF_FIRST,
|
||||
O_CREAT|O_RDWR, 0644, DBWRAP_LOCK_ORDER_1,
|
||||
DBWRAP_FLAG_NONE);
|
||||
if (backend == NULL) {
|
||||
fprintf(stderr, "db_open failed: %s\n", strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* Store invalid data (from the dbwrap_watch point of view)
|
||||
* directly into the backend database
|
||||
*/
|
||||
status = dbwrap_store_uint32_bystring(backend, keystr, UINT32_MAX);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
fprintf(stderr, "dbwrap_store_uint32_bystring failed: %s\n",
|
||||
nt_errstr(status));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
db = db_open_watched(ev, backend, msg);
|
||||
if (db == NULL) {
|
||||
fprintf(stderr, "db_open_watched failed\n");
|
||||
goto fail;
|
||||
}
|
||||
backend = NULL; /* open_watch talloc_moves backend */
|
||||
|
||||
status = dbwrap_parse_record(db, key, NULL, NULL);
|
||||
if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
|
||||
fprintf(stderr, "dbwrap_parse_record returned %s, expected "
|
||||
"NT_STATUS_NOT_FOUND\n", nt_errstr(status));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
(void)unlink("test_watch.tdb");
|
||||
ret = true;
|
||||
fail:
|
||||
TALLOC_FREE(db);
|
||||
TALLOC_FREE(msg);
|
||||
TALLOC_FREE(ev);
|
||||
return ret;
|
||||
}
|
||||
|
@ -11448,6 +11448,7 @@ static struct {
|
||||
{ "LOCAL-GENCACHE", run_local_gencache, 0},
|
||||
{ "LOCAL-TALLOC-DICT", run_local_talloc_dict, 0},
|
||||
{ "LOCAL-DBWRAP-WATCH1", run_dbwrap_watch1, 0 },
|
||||
{ "LOCAL-DBWRAP-WATCH2", run_dbwrap_watch2, 0 },
|
||||
{ "LOCAL-MESSAGING-READ1", run_messaging_read1, 0 },
|
||||
{ "LOCAL-MESSAGING-READ2", run_messaging_read2, 0 },
|
||||
{ "LOCAL-MESSAGING-READ3", run_messaging_read3, 0 },
|
||||
|
Loading…
Reference in New Issue
Block a user