[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Thu Jul 18 12:37:02 UTC 2024


The branch, master has been updated
       via  f7229d61ede s4:torture: Add new LSA test_query_forest_trust_info()
       via  14a5d9e626c s4:torture: Split out a new LSA test_set_forest_trust_info() function
       via  88f49f18611 selftest: Remove samba4.rpc.lsa.forest.trust from knownfail
      from  818bd2dcb3c python:tests: make test_export_keytab_nochange_update() more reliable

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit f7229d61ede14f6fd14b9e5dcb365ec772216e08
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Mar 19 10:24:44 2024 +0100

    s4:torture: Add new LSA test_query_forest_trust_info()
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Thu Jul 18 12:36:25 UTC 2024 on atb-devel-224

commit 14a5d9e626c258bfbcdfed16379e951bb438355c
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Mar 19 09:43:40 2024 +0100

    s4:torture: Split out a new LSA test_set_forest_trust_info() function
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 88f49f186113c5dface15286383649961e4dcc8d
Author: Andreas Schneider <asn at samba.org>
Date:   Tue Mar 19 10:30:04 2024 +0100

    selftest: Remove samba4.rpc.lsa.forest.trust from knownfail
    
    The test needs --option="torture:Forest_Trust_Dom2_Binding=..." in order
    to be useful, so the skip is correct, but the knownfail entry should
    have been removed with e5163dfd57694351bf556565e92f74b71221db29.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 selftest/knownfail                 |   1 -
 source4/torture/rpc/forest_trust.c | 156 ++++++++++++++++++++++++++++++-------
 2 files changed, 127 insertions(+), 30 deletions(-)


Changeset truncated at 500 lines:

diff --git a/selftest/knownfail b/selftest/knownfail
index 9507b142089..03f8b466994 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -184,7 +184,6 @@
 ^samba4.smb2.sharemode.sharemode-access
 ^samba4.smb2.sharemode.access-sharemode
 ^samba4.ntvfs.cifs.krb5.base.createx_access.createx_access\(.*\)$
-^samba4.rpc.lsa.forest.trust #Not fully provided by Samba4
 ^samba4.blackbox.upgradeprovision.alpha13.ldapcmp_sd\(none\) # Due to something rewriting the NT ACL on DNS objects
 ^samba4.blackbox.upgradeprovision.alpha13.ldapcmp_full_sd\(none\) # Due to something rewriting the NT ACL on DNS objects
 ^samba4.blackbox.upgradeprovision.release-4-0-0.ldapcmp_sd\(none\) # Due to something rewriting the NT ACL on DNS objects
diff --git a/source4/torture/rpc/forest_trust.c b/source4/torture/rpc/forest_trust.c
index 8161853b5a4..284d5e4441c 100644
--- a/source4/torture/rpc/forest_trust.c
+++ b/source4/torture/rpc/forest_trust.c
@@ -30,6 +30,7 @@
 #include "libcli/auth/libcli_auth.h"
 #include "torture/rpc/torture_rpc.h"
 #include "param/param.h"
+#include "source3/rpc_client/init_lsa.h"
 
 #include <gnutls/gnutls.h>
 #include <gnutls/crypto.h>
@@ -103,6 +104,122 @@ 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_query_forest_trust_info(struct dcerpc_pipe *p,
+					 struct torture_context *tctx,
+					 struct policy_handle *handle,
+					 const char *trust_name_dns)
+{
+	struct lsa_String trusted_domain_name = {
+		.size = 0,
+	};
+	struct lsa_ForestTrustInformation *fti = NULL;
+	struct lsa_lsaRQueryForestTrustInformation r = {
+		.in = {
+			.handle = handle,
+			.highest_record_type = 2,
+			.trusted_domain_name = &trusted_domain_name,
+		},
+		.out = {
+			.forest_trust_info = &fti,
+		}
+	};
+	struct lsa_ForestTrustRecord *rec = NULL;
+
+	init_lsa_String(&trusted_domain_name, trust_name_dns);
+
+	torture_comment(tctx, "\nTesting lsaRQueryForestTrustInformation\n");
+
+
+	torture_assert_ntstatus_ok(tctx,
+				   dcerpc_lsa_lsaRQueryForestTrustInformation_r(
+					   p->binding_handle, tctx, &r),
+				   "lsaRQueryForestTrustInformation failed");
+	torture_assert_ntstatus_ok(tctx,
+				   r.out.result,
+				   "lsaRQueryForestTrustInformation failed");
+
+	torture_assert_not_null(tctx,
+				r.out.forest_trust_info,
+				"forest_trust_info is not set");
+	torture_assert_int_equal(tctx,
+				 fti->count,
+				 2,
+				 "Unexpected forest_trust_info count");
+
+	rec = fti->entries[0];
+	torture_assert_int_equal(tctx,
+				 rec->type,
+				 LSA_FOREST_TRUST_TOP_LEVEL_NAME,
+				 "Unexpedted type");
+	torture_assert_str_equal(tctx,
+				 rec->forest_trust_data.top_level_name.string,
+				 trust_name_dns,
+				 "Unexpected top level name");
+
+	return true;
+}
+
 static bool test_create_trust_and_set_info(struct dcerpc_pipe *p,
 					   struct torture_context *tctx,
 					   const char *trust_name,
@@ -111,8 +228,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 +235,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 +299,16 @@ 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");
+	ok = test_set_forest_trust_info(
+		p, tctx, handle, domsid, trust_name, trust_name_dns);
+	if (!ok) {
+		return false;
+	}
 
-	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_query_forest_trust_info(p, tctx, handle, trust_name_dns);
+	if (!ok) {
+		return false;
+	}
 
 	cr.in.handle = handle;
 	cr.out.handle = &closed_handle;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list