]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:torture: Split out a new LSA test_set_forest_trust_info() function
authorAndreas Schneider <asn@samba.org>
Tue, 19 Mar 2024 08:43:40 +0000 (09:43 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 18 Jul 2024 11:27:38 +0000 (11:27 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/torture/rpc/forest_trust.c

index 8161853b5a4093ffacbc270d612889ef2ce668ff..815ca9ba2ae06139ec0a9fb498862bad7c4f2eb2 100644 (file)
@@ -103,6 +103,67 @@ static bool test_get_policy_handle(struct torture_context *tctx,
        return true;
 }
 
+static bool test_set_forest_trust_info(struct dcerpc_pipe *p,
+                                      struct torture_context *tctx,
+                                      struct policy_handle *handle,
+                                      struct dom_sid *domsid,
+                                      const char *trust_name,
+                                      const char *trust_name_dns)
+{
+       struct lsa_ForestTrustCollisionInfo *collision_info = NULL;
+       struct lsa_ForestTrustInformation *fti = NULL;
+       struct lsa_lsaRSetForestTrustInformation ft_info = {
+               .in = {
+                       .handle = handle,
+                       .highest_record_type = 2,
+               },
+               .out = {
+                       .collision_info = &collision_info,
+               }
+       };
+
+       torture_comment(tctx, "\nTesting lsaRSetForestTrustInformation\n");
+
+       ft_info.in.trusted_domain_name = talloc_zero(tctx, struct lsa_StringLarge);
+       torture_assert_not_null(tctx, ft_info.in.trusted_domain_name, "No memory");
+       ft_info.in.trusted_domain_name->string = trust_name_dns;
+
+       fti = talloc_zero(tctx, struct lsa_ForestTrustInformation);
+       torture_assert_not_null(tctx, fti, "No memory");
+       fti->count = 2;
+       fti->entries = talloc_array(tctx, struct lsa_ForestTrustRecord *, 2);
+       fti->entries[0] = talloc_zero(tctx, struct lsa_ForestTrustRecord);
+       fti->entries[0]->flags = 0;
+       fti->entries[0]->type = LSA_FOREST_TRUST_TOP_LEVEL_NAME;
+       fti->entries[0]->time = 0;
+       fti->entries[0]->forest_trust_data.top_level_name.string = trust_name_dns;
+       fti->entries[1] = talloc_zero(tctx, struct lsa_ForestTrustRecord);
+       fti->entries[1]->flags = 0;
+       fti->entries[1]->type = LSA_FOREST_TRUST_DOMAIN_INFO;
+       fti->entries[1]->time = 0;
+       fti->entries[1]->forest_trust_data.domain_info.domain_sid = domsid;
+       fti->entries[1]->forest_trust_data.domain_info.dns_domain_name.string =
+               trust_name_dns;
+       fti->entries[1]
+               ->forest_trust_data.domain_info.netbios_domain_name
+               .string = trust_name;
+
+       ft_info.in.forest_trust_info = fti;
+
+       torture_assert_ntstatus_ok(tctx,
+                                  dcerpc_lsa_lsaRSetForestTrustInformation_r(
+                                          p->binding_handle, tctx, &ft_info),
+                                  "lsaRSetForestTrustInformation failed");
+       torture_assert_ntstatus_ok(tctx,
+                                  ft_info.out.result,
+                                  "lsaRSetForestTrustInformation failed");
+
+       /* There should be no collisions */
+       torture_assert(tctx, collision_info == NULL, "collision info returned");
+
+       return true;
+}
+
 static bool test_create_trust_and_set_info(struct dcerpc_pipe *p,
                                           struct torture_context *tctx,
                                           const char *trust_name,
@@ -111,8 +172,6 @@ static bool test_create_trust_and_set_info(struct dcerpc_pipe *p,
                                           struct lsa_TrustDomainInfoAuthInfoInternal *authinfo)
 {
        struct policy_handle *handle;
-       struct lsa_lsaRSetForestTrustInformation fti;
-       struct lsa_ForestTrustCollisionInfo *collision_info = NULL;
        struct lsa_Close cr;
        struct policy_handle closed_handle;
        struct lsa_CreateTrustedDomainEx2 r;
@@ -120,6 +179,7 @@ static bool test_create_trust_and_set_info(struct dcerpc_pipe *p,
        struct policy_handle trustdom_handle;
        struct lsa_QueryTrustedDomainInfo q;
        union lsa_TrustedDomainInfo *info = NULL;
+       bool ok;
 
        if (!test_get_policy_handle(tctx, p,
                                   (LSA_POLICY_VIEW_LOCAL_INFORMATION |
@@ -183,34 +243,11 @@ static bool test_create_trust_and_set_info(struct dcerpc_pipe *p,
        torture_assert_int_equal(tctx, info->info_ex.trust_direction, trustinfo.trust_direction,
                                 "QueryTrustedDomainInfo of returned incorrect trust direction");
 
-       fti.in.handle = handle;
-       fti.in.trusted_domain_name = talloc_zero(tctx, struct lsa_StringLarge);
-       fti.in.trusted_domain_name->string = trust_name_dns;
-       fti.in.highest_record_type = 2;
-       fti.in.forest_trust_info = talloc_zero(tctx, struct lsa_ForestTrustInformation);
-       fti.in.forest_trust_info->count = 2;
-       fti.in.forest_trust_info->entries = talloc_array(tctx, struct lsa_ForestTrustRecord *, 2);
-       fti.in.forest_trust_info->entries[0] = talloc_zero(tctx, struct lsa_ForestTrustRecord);
-       fti.in.forest_trust_info->entries[0]->flags = 0;
-       fti.in.forest_trust_info->entries[0]->type = LSA_FOREST_TRUST_TOP_LEVEL_NAME;
-       fti.in.forest_trust_info->entries[0]->time = 0;
-       fti.in.forest_trust_info->entries[0]->forest_trust_data.top_level_name.string = trust_name_dns;
-       fti.in.forest_trust_info->entries[1] = talloc_zero(tctx, struct lsa_ForestTrustRecord);
-       fti.in.forest_trust_info->entries[1]->flags = 0;
-       fti.in.forest_trust_info->entries[1]->type = LSA_FOREST_TRUST_DOMAIN_INFO;
-       fti.in.forest_trust_info->entries[1]->time = 0;
-       fti.in.forest_trust_info->entries[1]->forest_trust_data.domain_info.domain_sid = domsid;
-       fti.in.forest_trust_info->entries[1]->forest_trust_data.domain_info.dns_domain_name.string = trust_name_dns;
-       fti.in.forest_trust_info->entries[1]->forest_trust_data.domain_info.netbios_domain_name.string = trust_name;
-       fti.in.check_only = 0;
-       fti.out.collision_info = &collision_info;
-
-       torture_comment(tctx, "\nTesting SetForestTrustInformation\n");
-
-       torture_assert_ntstatus_ok(tctx,
-                                  dcerpc_lsa_lsaRSetForestTrustInformation_r(p->binding_handle, tctx, &fti),
-                                  "lsaRSetForestTrustInformation failed");
-       torture_assert_ntstatus_ok(tctx, fti.out.result, "lsaRSetForestTrustInformation failed");
+       ok = test_set_forest_trust_info(
+               p, tctx, handle, domsid, trust_name, trust_name_dns);
+       if (!ok) {
+               return false;
+       }
 
        cr.in.handle = handle;
        cr.out.handle = &closed_handle;