]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:torture/rpc: make use of dcerpc_binding_handle_get_binding() and dcerpc_binding_ge...
authorStefan Metzmacher <metze@samba.org>
Tue, 17 Sep 2024 21:04:23 +0000 (23:04 +0200)
committerJule Anger <janger@samba.org>
Thu, 12 Jun 2025 11:27:15 +0000 (11:27 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
(cherry picked from commit 7ed9867fa82ae61a4522a724580900adce7e2bb5)

source4/torture/rpc/backupkey.c
source4/torture/rpc/bind.c
source4/torture/rpc/drsuapi.c
source4/torture/rpc/dsgetinfo.c
source4/torture/rpc/echo.c
source4/torture/rpc/handles.c
source4/torture/rpc/netlogon.c
source4/torture/rpc/spoolss.c
source4/torture/rpc/winreg.c

index 82bd4a02000f2ddc7a95d3927af84838e1c7420d..1d33302e94ddd1fde8e856bf3693bcf3f7511500 100644 (file)
@@ -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;
        }
index 7c0d5e4e2188e8edd338934386bf6f7b1a00bf39..84f44e514c581169107fe9af59a2e853fc10589f 100644 (file)
@@ -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);
index 4c7e2fc39df8603ffc51eefa095a78d050e123a4..f39a6271ff4546541f4b42402eb3b5e3265f9d42 100644 (file)
@@ -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,
index b47d6ee9e5348bc6ce15b2dc2f37f06bc87ad100..9e12f8dff0b550ad8ee5cf645b159be6c84d2c1a 100644 (file)
@@ -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 };
index 15ad299535dff9f388d30195d8cfdb780fed7bff..17d3f95517b676f24ec107eef0da5ed73739d5d7 100644 (file)
@@ -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");
index 7c108e56e1ae39900938f90dcbf54978facca626..e6b2e86eb72e6d5ed3ddb586da7645b96aef6b23 100644 (file)
@@ -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);
index b9f5e66f0d89bccb3ee27b0044e42577cce3360c..20b2b2adb82dc04873c62bed32bc3f37045e0fa4 100644 (file)
@@ -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,
index 54b4e8cfb7d84e80eb1ca0cb98a18ccd350988d7..d3cec7f7e258d124264161bdcfd8cd408cc9b0a7 100644 (file)
@@ -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);
index b0e153f5285bb62e40b8acb5b43626a58302e02f..369a3bd640f5a72192a42c8fd699b93be1a3b140 100644 (file)
@@ -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);
        }