From: Stefan Metzmacher Date: Tue, 17 Sep 2024 21:04:23 +0000 (+0200) Subject: s4:torture/rpc: make use of dcerpc_binding_handle_get_binding() and dcerpc_binding_ge... X-Git-Tag: samba-4.21.7~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=087ccbdd8631353c7701f2fc54b505ff1497a5d2;p=thirdparty%2Fsamba.git s4:torture/rpc: make use of dcerpc_binding_handle_get_binding() and dcerpc_binding_get_flags() Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme (cherry picked from commit 7ed9867fa82ae61a4522a724580900adce7e2bb5) --- diff --git a/source4/torture/rpc/backupkey.c b/source4/torture/rpc/backupkey.c index 82bd4a02000..1d33302e94d 100644 --- a/source4/torture/rpc/backupkey.c +++ b/source4/torture/rpc/backupkey.c @@ -605,6 +605,8 @@ static DATA_BLOB *encrypt_blob_pk(struct torture_context *tctx, static struct bkrp_BackupKey *createRetrieveBackupKeyGUIDStruct(struct torture_context *tctx, struct dcerpc_pipe *p, int version, DATA_BLOB *out) { + const struct dcerpc_binding *bd = + dcerpc_binding_handle_get_binding(p->binding_handle); struct dcerpc_binding *binding; struct bkrp_client_side_wrapped data; struct GUID *g = talloc(tctx, struct GUID); @@ -617,7 +619,7 @@ static struct bkrp_BackupKey *createRetrieveBackupKeyGUIDStruct(struct torture_c return NULL; } - binding = dcerpc_binding_dup(tctx, p->binding); + binding = dcerpc_binding_dup(tctx, bd); if (binding == NULL) { return NULL; } diff --git a/source4/torture/rpc/bind.c b/source4/torture/rpc/bind.c index 7c0d5e4e218..84f44e514c5 100644 --- a/source4/torture/rpc/bind.c +++ b/source4/torture/rpc/bind.c @@ -86,6 +86,7 @@ static bool test_assoc_group_handles_external(struct torture_context *tctx, const void *private_data) { struct dcerpc_binding *binding1 = NULL; + const struct dcerpc_binding *bd1 = NULL; struct dcerpc_binding *binding2 = NULL; struct dcerpc_pipe *p1 = NULL; struct dcerpc_pipe *p2 = NULL; @@ -152,7 +153,8 @@ static bool test_assoc_group_handles_external(struct torture_context *tctx, "Unexpected EPM Lookup success"); /* Open second pipe, same association group. Handle is found */ - assoc_group_id = dcerpc_binding_get_assoc_group_id(p1->binding); + bd1 = dcerpc_binding_handle_get_binding(p1->binding_handle); + assoc_group_id = dcerpc_binding_get_assoc_group_id(bd1); dcerpc_binding_set_assoc_group_id(binding2, assoc_group_id); TALLOC_FREE(p2); diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c index 4c7e2fc39df..f39a6271ff4 100644 --- a/source4/torture/rpc/drsuapi.c +++ b/source4/torture/rpc/drsuapi.c @@ -863,6 +863,7 @@ static bool __test_DsBind_assoc_group(struct torture_context *tctx, struct dcerpc_pipe *p2 = NULL; TALLOC_CTX *mem_ctx = priv; struct dcerpc_binding *binding = NULL; + const struct dcerpc_binding *binding2 = NULL; struct policy_handle ds_bind_handle = { .handle_type = 0, }; torture_comment(tctx, "%s: starting...\n", testname); @@ -881,10 +882,12 @@ static bool __test_DsBind_assoc_group(struct torture_context *tctx, tctx->lp_ctx), "connect p1"); + binding2 = dcerpc_binding_handle_get_binding(p1->binding_handle); + torture_assert_ntstatus_ok(tctx, dcerpc_pipe_connect_b(tctx, &p2, - p1->binding, + binding2, &ndr_table_drsuapi, creds, tctx->ev, diff --git a/source4/torture/rpc/dsgetinfo.c b/source4/torture/rpc/dsgetinfo.c index b47d6ee9e53..9e12f8dff0b 100644 --- a/source4/torture/rpc/dsgetinfo.c +++ b/source4/torture/rpc/dsgetinfo.c @@ -68,7 +68,9 @@ struct DsGetinfoTest { */ static const char *torture_get_ldap_base_dn(struct torture_context *tctx, struct dcerpc_pipe *p) { - const char *hostname = dcerpc_binding_get_string_option(p->binding, "host"); + struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *bd = dcerpc_binding_handle_get_binding(b); + const char *hostname = dcerpc_binding_get_string_option(bd, "host"); struct ldb_context *ldb; const char *ldap_url = talloc_asprintf(p, "ldap://%s", hostname); const char *attrs[] = { "defaultNamingContext", NULL }; diff --git a/source4/torture/rpc/echo.c b/source4/torture/rpc/echo.c index 15ad299535d..17d3f95517b 100644 --- a/source4/torture/rpc/echo.c +++ b/source4/torture/rpc/echo.c @@ -69,9 +69,11 @@ static bool test_echodata(struct torture_context *tctx, int len; struct echo_EchoData r; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *binding = dcerpc_binding_handle_get_binding(b); + uint16_t flags = dcerpc_binding_get_flags(binding); if (torture_setting_bool(tctx, "quick", false) && - (p->conn->flags & DCERPC_DEBUG_VALIDATE_BOTH)) { + (flags & DCERPC_DEBUG_VALIDATE_BOTH)) { len = 1 + (random() % 500); } else { len = 1 + (random() % 5000); @@ -115,9 +117,11 @@ static bool test_sourcedata(struct torture_context *tctx, int len; struct echo_SourceData r; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *binding = dcerpc_binding_handle_get_binding(b); + uint16_t flags = dcerpc_binding_get_flags(binding); if (torture_setting_bool(tctx, "quick", false) && - (p->conn->flags & DCERPC_DEBUG_VALIDATE_BOTH)) { + (flags & DCERPC_DEBUG_VALIDATE_BOTH)) { len = 100 + (random() % 500); } else { len = 200000 + (random() % 5000); @@ -148,9 +152,11 @@ static bool test_sinkdata(struct torture_context *tctx, int len; struct echo_SinkData r; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *binding = dcerpc_binding_handle_get_binding(b); + uint16_t flags = dcerpc_binding_get_flags(binding); if (torture_setting_bool(tctx, "quick", false) && - (p->conn->flags & DCERPC_DEBUG_VALIDATE_BOTH)) { + (flags & DCERPC_DEBUG_VALIDATE_BOTH)) { len = 100 + (random() % 5000); } else { len = 200000 + (random() % 5000); @@ -238,6 +244,7 @@ static bool test_sleep(struct torture_context *tctx, struct timeval diff[ASYNC_COUNT]; int total_done = 0; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *bd = dcerpc_binding_handle_get_binding(b); enum dcerpc_transport_t transport; uint32_t assoc_group_id; struct dcerpc_pipe *p2 = NULL; @@ -248,8 +255,8 @@ static bool test_sleep(struct torture_context *tctx, } torture_comment(tctx, "Testing TestSleep - use \"torture:quick=yes\" to disable\n"); - transport = dcerpc_binding_get_transport(p->binding); - assoc_group_id = dcerpc_binding_get_assoc_group_id(p->binding); + transport = dcerpc_binding_get_transport(bd); + assoc_group_id = dcerpc_binding_get_assoc_group_id(bd); torture_comment(tctx, "connect echo connection 2 with " "DCERPC_CONCURRENT_MULTIPLEX\n"); diff --git a/source4/torture/rpc/handles.c b/source4/torture/rpc/handles.c index 7c108e56e1a..e6b2e86eb72 100644 --- a/source4/torture/rpc/handles.c +++ b/source4/torture/rpc/handles.c @@ -103,6 +103,7 @@ static bool test_handles_lsa_shared(struct torture_context *torture) NTSTATUS status; struct dcerpc_pipe *p1, *p2, *p3, *p4, *p5; struct dcerpc_binding_handle *b1, *b2, *b3, *b4; + const struct dcerpc_binding *bd1 = NULL, *bd2 = NULL; struct policy_handle handle; struct policy_handle handle2; struct lsa_ObjectAttribute attr; @@ -122,9 +123,10 @@ static bool test_handles_lsa_shared(struct torture_context *torture) status = torture_rpc_connection(torture, &p1, &ndr_table_lsarpc); torture_assert_ntstatus_ok(torture, status, "opening lsa pipe1"); b1 = p1->binding_handle; + bd1 = dcerpc_binding_handle_get_binding(b1); - transport = p1->conn->transport.transport; - assoc_group_id = dcerpc_binding_get_assoc_group_id(p1->binding); + transport = dcerpc_binding_get_transport(bd1); + assoc_group_id = dcerpc_binding_get_assoc_group_id(bd1); torture_comment(torture, "use assoc_group_id[0x%08X] for new connections\n", assoc_group_id); @@ -135,9 +137,10 @@ static bool test_handles_lsa_shared(struct torture_context *torture) 0); torture_assert_ntstatus_ok(torture, status, "opening lsa pipe2"); b2 = p2->binding_handle; + bd2 = dcerpc_binding_handle_get_binding(b2); torture_comment(torture, "got assoc_group_id[0x%08X] for p2\n", - dcerpc_binding_get_assoc_group_id(p2->binding)); + dcerpc_binding_get_assoc_group_id(bd2)); qos.len = 0; qos.impersonation_level = 2; @@ -403,6 +406,7 @@ static bool test_handles_mixed_shared(struct torture_context *torture) NTSTATUS status; struct dcerpc_pipe *p1, *p2, *p3, *p4, *p5, *p6; struct dcerpc_binding_handle *b1, *b2; + const struct dcerpc_binding *bd1 = NULL, *bd2 = NULL; struct policy_handle handle; struct policy_handle handle2; struct samr_Connect r; @@ -418,9 +422,10 @@ static bool test_handles_mixed_shared(struct torture_context *torture) status = torture_rpc_connection(torture, &p1, &ndr_table_samr); torture_assert_ntstatus_ok(torture, status, "opening samr pipe1"); b1 = p1->binding_handle; + bd1 = dcerpc_binding_handle_get_binding(b1); - transport = p1->conn->transport.transport; - assoc_group_id = dcerpc_binding_get_assoc_group_id(p1->binding); + transport = dcerpc_binding_get_transport(bd1); + assoc_group_id = dcerpc_binding_get_assoc_group_id(bd1); torture_comment(torture, "use assoc_group_id[0x%08X] for new connections\n", assoc_group_id); @@ -431,9 +436,10 @@ static bool test_handles_mixed_shared(struct torture_context *torture) 0); torture_assert_ntstatus_ok(torture, status, "opening lsa pipe2"); b2 = p2->binding_handle; + bd2 = dcerpc_binding_handle_get_binding(b2); torture_comment(torture, "got assoc_group_id[0x%08X] for p2\n", - dcerpc_binding_get_assoc_group_id(p2->binding)); + dcerpc_binding_get_assoc_group_id(bd2)); r.in.system_name = 0; r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; r.out.connect_handle = &handle; @@ -509,6 +515,7 @@ 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); + const struct dcerpc_binding *bd1 = NULL; enum dcerpc_transport_t transport; uint32_t assoc_group_id; @@ -518,17 +525,20 @@ static bool test_handles_random_assoc(struct torture_context *torture) status = torture_rpc_connection(torture, &p1, &ndr_table_samr); torture_assert_ntstatus_ok(torture, status, "opening samr pipe1"); + bd1 = dcerpc_binding_handle_get_binding(p1->binding_handle); + assoc_group_id = dcerpc_binding_get_assoc_group_id(bd1); + torture_comment(torture, "pipe1 uses assoc_group_id[0x%08X]\n", - dcerpc_binding_get_assoc_group_id(p1->binding)); + assoc_group_id); + + transport = dcerpc_binding_get_transport(bd1); - transport = p1->conn->transport.transport; /* * We use ~p1->assoc_group_id instead of p1->assoc_group_id, because * this way we are less likely to use an id which is already in use. * * And make sure it doesn't wrap. */ - assoc_group_id = dcerpc_binding_get_assoc_group_id(p1->binding); assoc_group_id = ~MIN(assoc_group_id, UINT32_MAX - 3); torture_comment(torture, "connect samr pipe2 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id); diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c index b9f5e66f0d8..20b2b2adb82 100644 --- a/source4/torture/rpc/netlogon.c +++ b/source4/torture/rpc/netlogon.c @@ -472,10 +472,12 @@ bool test_SetupCredentialsPipe(const struct dcerpc_pipe *p1, struct dcerpc_pipe **_p2) { NTSTATUS status; + const struct dcerpc_binding *b1 = + dcerpc_binding_handle_get_binding(p1->binding_handle); struct dcerpc_binding *b2 = NULL; struct dcerpc_pipe *p2 = NULL; - b2 = dcerpc_binding_dup(tctx, p1->binding); + b2 = dcerpc_binding_dup(tctx, b1); torture_assert(tctx, b2 != NULL, "dcerpc_binding_dup"); dcerpc_binding_set_flags(b2, DCERPC_SCHANNEL | additional_flags, @@ -2303,6 +2305,7 @@ static bool test_ServerReqChallengeGlobal(struct torture_context *tctx, const char *machine_name; const char *plain_pass; struct dcerpc_binding_handle *b1 = p1->binding_handle; + const struct dcerpc_binding *bd1 = dcerpc_binding_handle_get_binding(b1); struct dcerpc_pipe *p2 = NULL; struct dcerpc_binding_handle *b2 = NULL; @@ -2314,7 +2317,7 @@ static bool test_ServerReqChallengeGlobal(struct torture_context *tctx, torture_comment(tctx, "Testing ServerReqChallenge on b1\n"); torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p2, p1->binding, + dcerpc_pipe_connect_b(tctx, &p2, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -2383,6 +2386,7 @@ static bool test_ServerReqChallengeReuseGlobal(struct torture_context *tctx, const char *machine_name; const char *plain_pass; struct dcerpc_binding_handle *b1 = p1->binding_handle; + const struct dcerpc_binding *bd1 = dcerpc_binding_handle_get_binding(b1); struct dcerpc_pipe *p2 = NULL; struct dcerpc_binding_handle *b2 = NULL; struct dcerpc_pipe *p3 = NULL; @@ -2396,7 +2400,7 @@ static bool test_ServerReqChallengeReuseGlobal(struct torture_context *tctx, torture_comment(tctx, "Testing ServerReqChallenge on b1\n"); torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p2, p1->binding, + dcerpc_pipe_connect_b(tctx, &p2, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -2404,7 +2408,7 @@ static bool test_ServerReqChallengeReuseGlobal(struct torture_context *tctx, b2 = p2->binding_handle; torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p3, p1->binding, + dcerpc_pipe_connect_b(tctx, &p3, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -2484,6 +2488,7 @@ static bool test_ServerReqChallengeReuseGlobal2(struct torture_context *tctx, const char *machine_name; const char *plain_pass; struct dcerpc_binding_handle *b1 = p1->binding_handle; + const struct dcerpc_binding *bd1 = dcerpc_binding_handle_get_binding(b1); struct dcerpc_pipe *p2 = NULL; struct dcerpc_binding_handle *b2 = NULL; @@ -2495,7 +2500,7 @@ static bool test_ServerReqChallengeReuseGlobal2(struct torture_context *tctx, torture_comment(tctx, "Testing ServerReqChallenge on b1\n"); torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p2, p1->binding, + dcerpc_pipe_connect_b(tctx, &p2, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -2576,6 +2581,7 @@ static bool test_ServerReqChallengeReuseGlobal3(struct torture_context *tctx, const char *machine_name; const char *plain_pass; struct dcerpc_binding_handle *b1 = p1->binding_handle; + const struct dcerpc_binding *bd1 = dcerpc_binding_handle_get_binding(b1); struct dcerpc_pipe *p2 = NULL; struct dcerpc_binding_handle *b2 = NULL; @@ -2587,7 +2593,7 @@ static bool test_ServerReqChallengeReuseGlobal3(struct torture_context *tctx, torture_comment(tctx, "Testing ServerReqChallenge on b1\n"); torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p2, p1->binding, + dcerpc_pipe_connect_b(tctx, &p2, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -2670,6 +2676,7 @@ static bool test_ServerReqChallengeReuseGlobal4(struct torture_context *tctx, const char *machine_name; const char *plain_pass; struct dcerpc_binding_handle *b1 = p1->binding_handle; + const struct dcerpc_binding *bd1 = dcerpc_binding_handle_get_binding(b1); struct dcerpc_pipe *p2 = NULL; struct dcerpc_binding_handle *b2 = NULL; @@ -2681,7 +2688,7 @@ static bool test_ServerReqChallengeReuseGlobal4(struct torture_context *tctx, torture_comment(tctx, "Testing ServerReqChallenge on b1\n"); torture_assert_ntstatus_ok(tctx, - dcerpc_pipe_connect_b(tctx, &p2, p1->binding, + dcerpc_pipe_connect_b(tctx, &p2, bd1, &ndr_table_netlogon, machine_credentials, tctx->ev, tctx->lp_ctx), @@ -5815,6 +5822,7 @@ static bool test_ManyGetDCName(struct torture_context *tctx, struct netr_GetAnyDCName d; const char *dcname = NULL; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *bd = dcerpc_binding_handle_get_binding(b); struct dcerpc_binding_handle *b2; int i; @@ -5828,7 +5836,7 @@ static bool test_ManyGetDCName(struct torture_context *tctx, anon_creds = cli_credentials_init_anon(tctx); torture_assert(tctx, anon_creds != NULL, "cli_credentials_init_anon failed"); - binding2 = dcerpc_binding_dup(tctx, p->binding); + binding2 = dcerpc_binding_dup(tctx, bd); /* Swap the binding details from NETLOGON to LSA */ status = dcerpc_epm_map_binding(tctx, binding2, &ndr_table_lsarpc, tctx->ev, tctx->lp_ctx); dcerpc_binding_set_assoc_group_id(binding2, 0); @@ -5921,7 +5929,7 @@ static bool test_lsa_over_netlogon(struct torture_context *tctx, anon_creds = cli_credentials_init_anon(tctx); torture_assert(tctx, anon_creds != NULL, "cli_credentials_init_anon failed"); - binding2 = p->binding; + binding2 = dcerpc_binding_handle_get_binding(p->binding_handle); status = dcerpc_secondary_auth_connection(p, binding2, &ndr_table_lsarpc, anon_creds, tctx->lp_ctx, diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index 54b4e8cfb7d..d3cec7f7e25 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -6512,7 +6512,7 @@ static bool test_SecondaryClosePrinter(struct torture_context *tctx, anon_creds = cli_credentials_init_anon(tctx); torture_assert(tctx, anon_creds != NULL, "cli_credentials_init_anon failed"); - binding2 = p->binding; + binding2 = dcerpc_binding_handle_get_binding(p->binding_handle); status = dcerpc_secondary_auth_connection(p, binding2, &ndr_table_spoolss, anon_creds, tctx->lp_ctx, tctx, &p2); diff --git a/source4/torture/rpc/winreg.c b/source4/torture/rpc/winreg.c index b0e153f5285..369a3bd640f 100644 --- a/source4/torture/rpc/winreg.c +++ b/source4/torture/rpc/winreg.c @@ -234,6 +234,8 @@ static bool _test_GetKeySecurity(struct dcerpc_pipe *p, uint32_t sec_info; DATA_BLOB sdblob; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *binding = dcerpc_binding_handle_get_binding(b); + uint16_t flags = dcerpc_binding_get_flags(binding); if (sec_info_ptr) { sec_info = *sec_info_ptr; @@ -265,7 +267,7 @@ static bool _test_GetKeySecurity(struct dcerpc_pipe *p, (ndr_pull_flags_fn_t)ndr_pull_security_descriptor), "pull_security_descriptor failed"); - if (p->conn->flags & DCERPC_DEBUG_PRINT_OUT) { + if (flags & DCERPC_DEBUG_PRINT_OUT) { NDR_PRINT_DEBUG(security_descriptor, sd); } @@ -298,10 +300,12 @@ static bool _test_SetKeySecurity(struct dcerpc_pipe *p, DATA_BLOB sdblob; uint32_t sec_info; struct dcerpc_binding_handle *b = p->binding_handle; + const struct dcerpc_binding *binding = dcerpc_binding_handle_get_binding(b); + uint16_t flags = dcerpc_binding_get_flags(binding); ZERO_STRUCT(r); - if (sd && (p->conn->flags & DCERPC_DEBUG_PRINT_OUT)) { + if (sd && (flags & DCERPC_DEBUG_PRINT_OUT)) { NDR_PRINT_DEBUG(security_descriptor, sd); }