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

📄 handles.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
				      "QuerySecurity handle on p3 after p1 was disconnected");	/*	 * now open p4	 * and use the handle on it	 */	torture_comment(torture, "connect lsa pipe4 and use policy handle\n");	status = torture_rpc_connection_transport(torture, &p4, &ndr_table_lsarpc,						  transport,						  assoc_group_id);	torture_assert_ntstatus_ok(torture, status, "opening lsa pipe4");	status = dcerpc_lsa_QuerySecurity(p4, mem_ctx, &qsec);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 				      "using policy handle on p4");	/*	 * now close p2,p3,p4	 * without closing the policy handle	 */	torture_comment(torture, "disconnect p2,p3,p4\n");	talloc_free(p2);	talloc_free(p3);	talloc_free(p4);	msleep(10);	/*	 * now open p5	 */	torture_comment(torture, "connect lsa pipe5 - should fail\n");	status = torture_rpc_connection_transport(torture, &p5, &ndr_table_lsarpc,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening lsa pipe5");	talloc_free(mem_ctx);	return true;}static bool test_handles_samr(struct torture_context *torture){	NTSTATUS status;	struct dcerpc_pipe *p1, *p2;	struct policy_handle handle;	struct policy_handle handle2;	struct samr_Connect r;	struct samr_Close c;	TALLOC_CTX *mem_ctx = talloc_new(torture);	torture_comment(torture, "RPC-HANDLE-SAMR\n");	status = torture_rpc_connection(torture, &p1, &ndr_table_samr);	torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");	status = torture_rpc_connection(torture, &p2, &ndr_table_samr);	torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");	r.in.system_name = 0;	r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;	r.out.connect_handle = &handle;	status = dcerpc_samr_Connect(p1, mem_ctx, &r);	torture_assert_ntstatus_ok(torture, status, "opening policy handle on p1");	c.in.handle = &handle;	c.out.handle = &handle2;	status = dcerpc_samr_Close(p2, mem_ctx, &c);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 				      "closing policy handle on p2");	torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 				      "closing policy handle on p2");	status = dcerpc_samr_Close(p1, mem_ctx, &c);	torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");	status = dcerpc_samr_Close(p1, mem_ctx, &c);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 				      "closing policy handle on p1 again");	torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 				      "closing policy handle on p1 again");		talloc_free(mem_ctx);	return true;}static bool test_handles_mixed_shared(struct torture_context *torture){	NTSTATUS status;	struct dcerpc_pipe *p1, *p2, *p3, *p4, *p5, *p6;	struct policy_handle handle;	struct policy_handle handle2;	struct samr_Connect r;	struct lsa_Close lc;	struct samr_Close sc;	TALLOC_CTX *mem_ctx = talloc_new(torture);	enum dcerpc_transport_t transport;	uint32_t assoc_group_id;	torture_comment(torture, "RPC-HANDLE-MIXED-SHARED\n");	torture_comment(torture, "connect samr pipe1\n");	status = torture_rpc_connection(torture, &p1, &ndr_table_samr);	torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");	transport	= p1->conn->transport.transport,	assoc_group_id	= p1->assoc_group_id;	torture_comment(torture, "use assoc_group_id[0x%08X] for new connections\n", assoc_group_id);	torture_comment(torture, "connect lsa pipe2\n");	status = torture_rpc_connection_transport(torture, &p2, &ndr_table_lsarpc,						  transport,						  assoc_group_id);	torture_assert_ntstatus_ok(torture, status, "opening lsa pipe2");	r.in.system_name = 0;	r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;	r.out.connect_handle = &handle;	torture_comment(torture, "samr_Connect to open a policy handle on samr p1\n");	status = dcerpc_samr_Connect(p1, mem_ctx, &r);	torture_assert_ntstatus_ok(torture, status, "opening policy handle on p1");	lc.in.handle 		= &handle;	lc.out.handle		= &handle2;	sc.in.handle		= &handle;	sc.out.handle		= &handle2;	torture_comment(torture, "use policy handle on lsa p2 - should fail\n");	status = dcerpc_lsa_Close(p2, mem_ctx, &lc);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 				      "closing handle on lsa p2");	torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 				      "closing handle on lsa p2");	torture_comment(torture, "closing policy handle on samr p1\n");	status = dcerpc_samr_Close(p1, mem_ctx, &sc);	torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");	talloc_free(p1);	talloc_free(p2);	msleep(10);	torture_comment(torture, "connect samr pipe3 - should fail\n");	status = torture_rpc_connection_transport(torture, &p3, &ndr_table_samr,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening samr pipe3");	torture_comment(torture, "connect lsa pipe4 - should fail\n");	status = torture_rpc_connection_transport(torture, &p4, &ndr_table_lsarpc,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening lsa pipe4");	torture_comment(torture, "connect samr pipe5 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);	status = torture_rpc_connection_transport(torture, &p5, &ndr_table_samr,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening samr pipe5");	torture_comment(torture, "connect lsa pipe6 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);	status = torture_rpc_connection_transport(torture, &p6, &ndr_table_lsarpc,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening lsa pipe6");	talloc_free(mem_ctx);	return true;}static bool test_handles_random_assoc(struct torture_context *torture){	NTSTATUS status;	struct dcerpc_pipe *p1, *p2, *p3;	TALLOC_CTX *mem_ctx = talloc_new(torture);	enum dcerpc_transport_t transport;	uint32_t assoc_group_id;	torture_comment(torture, "RPC-HANDLE-RANDOM-ASSOC\n");	torture_comment(torture, "connect samr pipe1\n");	status = torture_rpc_connection(torture, &p1, &ndr_table_samr);	torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");	transport	= p1->conn->transport.transport,	assoc_group_id	= p1->assoc_group_id;	torture_comment(torture, "pip1 use assoc_group_id[0x%08X]\n", assoc_group_id);	torture_comment(torture, "connect samr pipe2 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);	status = torture_rpc_connection_transport(torture, &p2, &ndr_table_samr,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening samr pipe2");	torture_comment(torture, "connect samr pipe3 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);	status = torture_rpc_connection_transport(torture, &p3, &ndr_table_samr,						  transport,						  assoc_group_id);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,				      "opening samr pipe3");	talloc_free(mem_ctx);	return true;}static bool test_handles_drsuapi(struct torture_context *torture){	NTSTATUS status;	struct dcerpc_pipe *p1, *p2;	struct policy_handle handle;	struct policy_handle handle2;	struct GUID bind_guid;	struct drsuapi_DsBind r;	struct drsuapi_DsUnbind c;	TALLOC_CTX *mem_ctx = talloc_new(torture);	torture_comment(torture, "RPC-HANDLE-DRSUAPI\n");	status = torture_rpc_connection(torture, &p1, &ndr_table_drsuapi);	torture_assert_ntstatus_ok(torture, status, "opening drsuapi pipe1");	status = torture_rpc_connection(torture, &p2, &ndr_table_drsuapi);	torture_assert_ntstatus_ok(torture, status, "opening drsuapi pipe1");	GUID_from_string(DRSUAPI_DS_BIND_GUID, &bind_guid);	r.in.bind_guid = &bind_guid;	r.in.bind_info = NULL;	r.out.bind_handle = &handle;	status = dcerpc_drsuapi_DsBind(p1, mem_ctx, &r);	if (!NT_STATUS_IS_OK(status)) {		torture_comment(torture, "drsuapi_DsBind not supported - skipping\n");		talloc_free(mem_ctx);		return true;	}	c.in.bind_handle = &handle;	c.out.bind_handle = &handle2;	status = dcerpc_drsuapi_DsUnbind(p2, mem_ctx, &c);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 				      "closing policy handle on p2");	torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 				      "closing policy handle on p2");	status = dcerpc_drsuapi_DsUnbind(p1, mem_ctx, &c);	torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");	status = dcerpc_drsuapi_DsUnbind(p1, mem_ctx, &c);	torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 				      "closing policy handle on p1 again");	torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 				      "closing policy handle on p1 again");		talloc_free(mem_ctx);	return true;}struct torture_suite *torture_rpc_handles(TALLOC_CTX *mem_ctx){	struct torture_suite *suite;	suite = torture_suite_create(mem_ctx, "HANDLES");	torture_suite_add_simple_test(suite, "lsarpc", test_handles_lsa);	torture_suite_add_simple_test(suite, "lsarpc-shared", test_handles_lsa_shared);	torture_suite_add_simple_test(suite, "samr", test_handles_samr);	torture_suite_add_simple_test(suite, "mixed-shared", test_handles_mixed_shared);	torture_suite_add_simple_test(suite, "random-assoc", test_handles_random_assoc);	torture_suite_add_simple_test(suite, "drsuapi", test_handles_drsuapi);	return suite;}

⌨️ 快捷键说明

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