⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 registry.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
				 &num_values, NULL, NULL, NULL, NULL);	torture_assert_werr_ok(tctx, error, "get info key");	torture_assert_int_equal(tctx, num_subkeys, 1, "num subkeys");	torture_assert_int_equal(tctx, num_values, 1, "num values");	return true;}/** * Test that the subkeys of a key can be enumerated, that * the returned parameters for get_subkey_by_index are optional and * that enumerating the parents of a non-top-level node works. */static bool test_list_subkeys(struct torture_context *tctx, void *_data){	struct registry_context *rctx = (struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	NTTIME last_mod_time;	const char *classname, *name;	if (!create_test_key(tctx, rctx, "Goettingen", &root, &subkey))		return false;	error = reg_key_get_subkey_by_index(tctx, root, 0, &name, &classname,					    &last_mod_time);	torture_assert_werr_ok(tctx, error, "Enum keys return code");	torture_assert_str_equal(tctx, name, "Goettingen", "Enum keys data");	error = reg_key_get_subkey_by_index(tctx, root, 0, NULL, NULL, NULL);	torture_assert_werr_ok(tctx, error,			       "Enum keys with NULL arguments return code");	error = reg_key_get_subkey_by_index(tctx, root, 1, NULL, NULL, NULL);	torture_assert_werr_equal(tctx, error, WERR_NO_MORE_ITEMS,				  "Invalid error for no more items");	error = reg_key_get_subkey_by_index(tctx, subkey, 0, NULL, NULL, NULL);	torture_assert_werr_equal(tctx, error, WERR_NO_MORE_ITEMS,				  "Invalid error for no more items");	return true;}/** * Test setting a value */static bool test_set_value(struct torture_context *tctx, void *_data){	struct registry_context *rctx = (struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	char data[4];	SIVAL(data, 0, 42);	if (!create_test_key(tctx, rctx, "Dusseldorf", &root, &subkey))		return false;	error = reg_val_set(subkey, "Answer", REG_DWORD,			    data_blob_talloc(tctx, data, sizeof(data)));	torture_assert_werr_ok (tctx, error, "setting value");	return true;}/** * Test getting/setting security descriptors */static bool test_security(struct torture_context *tctx, void *_data){	struct registry_context *rctx =	(struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	struct security_descriptor *osd, *nsd;	if (!create_test_key(tctx, rctx, "Düsseldorf", &root, &subkey))		return false;	osd = security_descriptor_dacl_create(tctx,					 0,					 NULL, NULL,					 SID_NT_AUTHENTICATED_USERS,					 SEC_ACE_TYPE_ACCESS_ALLOWED,					 SEC_GENERIC_ALL,					 SEC_ACE_FLAG_OBJECT_INHERIT,					 NULL);	error = reg_set_sec_desc(subkey, osd);	torture_assert_werr_ok(tctx, error, "setting security descriptor");	error = reg_get_sec_desc(tctx, subkey, &nsd);	torture_assert_werr_ok (tctx, error, "getting security descriptor");	torture_assert(tctx, security_descriptor_equal(osd, nsd),		       "security descriptor changed!");	return true;}/** * Test getting a value */static bool test_get_value(struct torture_context *tctx, void *_data){	struct registry_context *rctx =	(struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	DATA_BLOB data;	char value[4];	uint32_t type;	SIVAL(value, 0, 42);	if (!create_test_key(tctx, rctx, "Duisburg", &root, &subkey))		return false;	error = reg_key_get_value_by_name(tctx, subkey, __FUNCTION__, &type,					  &data);	torture_assert_werr_equal(tctx, error, WERR_BADFILE,				  "getting missing value");	error = reg_val_set(subkey, __FUNCTION__, REG_DWORD,			    data_blob_talloc(tctx, value, sizeof(value)));	torture_assert_werr_ok(tctx, error, "setting value");	error = reg_key_get_value_by_name(tctx, subkey, __FUNCTION__, &type,					  &data);	torture_assert_werr_ok(tctx, error, "getting value");	torture_assert_int_equal(tctx, sizeof(value), data.length, "value length ok");	torture_assert_mem_equal(tctx, data.data, value, sizeof(value),				 "value content ok");	torture_assert_int_equal(tctx, REG_DWORD, type, "value type");	return true;}/** * Test unsetting a value */static bool test_del_value(struct torture_context *tctx, void *_data){	struct registry_context *rctx =(struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	DATA_BLOB data;	uint32_t type;	char value[4];	SIVAL(value, 0, 42);	if (!create_test_key(tctx, rctx, "Warschau", &root, &subkey))		return false;	error = reg_key_get_value_by_name(tctx, subkey, __FUNCTION__, &type,					  &data);	torture_assert_werr_equal(tctx, error, WERR_BADFILE,				  "getting missing value");	error = reg_val_set(subkey, __FUNCTION__, REG_DWORD,			    data_blob_talloc(tctx, value, sizeof(value)));	torture_assert_werr_ok (tctx, error, "setting value");	error = reg_del_value(subkey, __FUNCTION__);	torture_assert_werr_ok (tctx, error, "unsetting value");	error = reg_key_get_value_by_name(tctx, subkey, __FUNCTION__,					  &type, &data);	torture_assert_werr_equal(tctx, error, WERR_BADFILE,				  "getting missing value");	return true;}/** * Test listing values */static bool test_list_values(struct torture_context *tctx, void *_data){	struct registry_context *rctx = (struct registry_context *)_data;	struct registry_key *subkey = NULL, *root;	WERROR error;	DATA_BLOB data;	uint32_t type;	const char *name;	char value[4];	SIVAL(value, 0, 42);	if (!create_test_key(tctx, rctx, "Bonn", &root, &subkey))		return false;	error = reg_val_set(subkey, "bar", REG_DWORD,			    data_blob_talloc(tctx, value, sizeof(value)));	torture_assert_werr_ok (tctx, error, "setting value");	error = reg_key_get_value_by_index(tctx, subkey, 0, &name,					   &type, &data);	torture_assert_werr_ok(tctx, error, "getting value");	torture_assert_str_equal(tctx, name, "bar", "value name");	torture_assert_int_equal(tctx, sizeof(value), data.length, "value length");	torture_assert_mem_equal(tctx, data.data, value, sizeof(value),		       "value content");	torture_assert_int_equal(tctx, REG_DWORD, type, "value type");	error = reg_key_get_value_by_index(tctx, subkey, 1, &name,					   &type, &data);	torture_assert_werr_equal(tctx, error, WERR_NO_MORE_ITEMS,				  "getting missing value");	return true;}static bool setup_local_registry(struct torture_context *tctx, void **data){	struct registry_context *rctx;	WERROR error;	char *tempdir;	NTSTATUS status;	struct hive_key *hive_key;	const char *filename;	error = reg_open_local(tctx, &rctx);	torture_assert_werr_ok(tctx, error, "Opening local registry failed");	status = torture_temp_dir(tctx, "registry-local", &tempdir);	torture_assert_ntstatus_ok(tctx, status, "Creating temp dir failed");	filename = talloc_asprintf(tctx, "%s/classes_root.ldb", tempdir);	error = reg_open_ldb_file(tctx, filename, NULL, NULL, tctx->ev, tctx->lp_ctx, &hive_key);	torture_assert_werr_ok(tctx, error, "Opening classes_root file failed");	error = reg_mount_hive(rctx, hive_key, HKEY_CLASSES_ROOT, NULL);	torture_assert_werr_ok(tctx, error, "Mounting hive failed");	*data = rctx;	return true;}static void tcase_add_tests(struct torture_tcase *tcase){	torture_tcase_add_simple_test(tcase, "list_subkeys",					test_list_subkeys);	torture_tcase_add_simple_test(tcase, "get_predefined_key",					test_get_predefined);	torture_tcase_add_simple_test(tcase, "get_predefined_key",					test_get_predefined_unknown);	torture_tcase_add_simple_test(tcase, "create_key",					test_create_subkey);	torture_tcase_add_simple_test(tcase, "create_key",					test_create_nested_subkey);	torture_tcase_add_simple_test(tcase, "key_add_abs",					test_key_add_abs);	torture_tcase_add_simple_test(tcase, "key_add_abs_top",					test_key_add_abs_top);	torture_tcase_add_simple_test(tcase, "set_value",					test_set_value);	torture_tcase_add_simple_test(tcase, "get_value",					test_get_value);	torture_tcase_add_simple_test(tcase, "list_values",					test_list_values);	torture_tcase_add_simple_test(tcase, "del_key",					test_del_key);	torture_tcase_add_simple_test(tcase, "del_value",					test_del_value);	torture_tcase_add_simple_test(tcase, "flush_key",					test_flush_key);	torture_tcase_add_simple_test(tcase, "query_key",					test_query_key);	torture_tcase_add_simple_test(tcase, "query_key_nums",					test_query_key_nums);	torture_tcase_add_simple_test(tcase, "test_predef_key_by_name",					test_predef_key_by_name);	torture_tcase_add_simple_test(tcase, "security",					test_security);	torture_tcase_add_simple_test(tcase,"test_predef_key_by_name_invalid",					test_predef_key_by_name_invalid);}struct torture_suite *torture_registry_registry(TALLOC_CTX *mem_ctx){	struct torture_tcase *tcase;	struct torture_suite *suite = torture_suite_create(mem_ctx, "REGISTRY");	tcase = torture_suite_add_tcase(suite, "local");	torture_tcase_set_fixture(tcase, setup_local_registry, NULL);	tcase_add_tests(tcase);	return suite;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -