The branch, master has been updated
via 835ae52f94f drsuapi.idl: fix source_dsa spelling
via f0399ca13b0 security.idl:
DOMAIN_RID_{FOREST,EXTERNAL}_TRUST_ACCOUNTS
via 45d97cf8415 security.idl: add SID_NT_THIS_ORGANIZATION_CERTIFICATE
via dba0cdad5bc security.idl: change ORGANISATION into ORGANIZATION
via 6c9f2e4a8f1 drsblobs.idl: make some scannerInfo related stuff public
via 896617acae6 drsblobs.idl: use dom_sid0 in ForestTrustDataDomainInfo
via 4f905af2ad4 drsblobs.idl: introduce ForestTrustDataScannerInfo
via 3295e0214c5 drsblobs.idl: split explicit binary data and unknown
data for ForestTrustData
via 64a80f220ec drsblobs.idl: set NDR_PAHEX for
ForestTrustDataBinaryData
via cee01274b2c s4:torture/ndr: add a ForestTrustInfo ndr test with
FOREST_TRUST_SCANNER_INFO
via 77a1ed4531a drsblobs.idl: add support for ForestTrustInfo with
FOREST_TRUST_SCANNER_INFO
from 4d5147119fc s4:kdc: let samba_kdc_trust_message2entry don't support
WITHIN_FOREST and PIM_TRUST
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 835ae52f94fa69b8216bcbb6534de6598d470f29
Author: Stefan Metzmacher <[email protected]>
Date: Fri Jan 10 13:12:55 2025 +0100
drsuapi.idl: fix source_dsa spelling
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
Autobuild-User(master): Stefan Metzmacher <[email protected]>
Autobuild-Date(master): Sat Feb 8 19:49:33 UTC 2025 on atb-devel-224
commit f0399ca13b0129ee544f0aed6afcbec15dc542f3
Author: Stefan Metzmacher <[email protected]>
Date: Mon Jan 13 23:25:35 2025 +0100
security.idl: DOMAIN_RID_{FOREST,EXTERNAL}_TRUST_ACCOUNTS
These seem to be new in Windows 2025.
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 45d97cf841539dd9938ee3e88dbe76d1c1a53f84
Author: Stefan Metzmacher <[email protected]>
Date: Tue Jan 28 14:29:58 2025 +0100
security.idl: add SID_NT_THIS_ORGANIZATION_CERTIFICATE
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit dba0cdad5bcdfa09c2cf13b6413213cdf96635b5
Author: Stefan Metzmacher <[email protected]>
Date: Wed Dec 4 18:24:04 2024 +0100
security.idl: change ORGANISATION into ORGANIZATION
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 6c9f2e4a8f163138c080dda0cfe7b85f8f63d530
Author: Stefan Metzmacher <[email protected]>
Date: Wed Feb 5 13:16:03 2025 +0100
drsblobs.idl: make some scannerInfo related stuff public
This is needed in order to use ndr_pack() on them
in python code.
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Ralph Boehme <[email protected]>
commit 896617acae66054f1b021d72830da5b070928a03
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 17:49:52 2024 +0100
drsblobs.idl: use dom_sid0 in ForestTrustDataDomainInfo
We already use ndr_size_dom_sid0() and when ForestTrustDataDomainInfo
is used as part of ForestTrustDataScannerInfo, sid_size is 0
and the subcontext for the sid is skipped.
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 4f905af2ad4a0af07d684d4745dab6286c1c88d7
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 17:44:44 2024 +0100
drsblobs.idl: introduce ForestTrustDataScannerInfo
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 3295e0214c5ba2e22ca6afa268c6217638be35e4
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 15:40:49 2024 +0100
drsblobs.idl: split explicit binary data and unknown data for
ForestTrustData
For know FOREST_TRUST_SCANNER_INFO unknown.
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 64a80f220ec3b2962564d895c8c9e7c465fb98a4
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 14:53:00 2024 +0100
drsblobs.idl: set NDR_PAHEX for ForestTrustDataBinaryData
The dump_data hexdump is much easier to read...
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit cee01274b2c96e00494cc12b63dadf8caafbc560
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 14:40:32 2024 +0100
s4:torture/ndr: add a ForestTrustInfo ndr test with
FOREST_TRUST_SCANNER_INFO
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
commit 77a1ed4531ae17a9553c84ba5171cc6f9510adb0
Author: Stefan Metzmacher <[email protected]>
Date: Tue Dec 17 12:30:56 2024 +0100
drsblobs.idl: add support for ForestTrustInfo with FOREST_TRUST_SCANNER_INFO
Signed-off-by: Stefan Metzmacher <[email protected]>
Reviewed-by: Jennifer Sutton <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
librpc/idl/drsblobs.idl | 37 ++++++++++------
librpc/idl/drsuapi.idl | 4 +-
librpc/idl/security.idl | 7 +++-
python/samba/tests/krb5/test_ldap.py | 2 +-
source3/rpc_server/lsa/srv_lsa_nt.c | 14 ++++++-
source4/torture/ndr/drsblobs.c | 81 ++++++++++++++++++++++++++++++++++++
6 files changed, 126 insertions(+), 19 deletions(-)
Changeset truncated at 500 lines:
diff --git a/librpc/idl/drsblobs.idl b/librpc/idl/drsblobs.idl
index 002c04f7903..815677a3e9d 100644
--- a/librpc/idl/drsblobs.idl
+++ b/librpc/idl/drsblobs.idl
@@ -597,37 +597,50 @@ interface drsblobs {
/* MS-ADTS 7.1.6.9.3 msDS-TrustForestTrustInfo Attribute */
+ /* same as lsa_ForestTrustRecordType, but only 8 bit */
+ typedef [enum8bit] enum {
+ FOREST_TRUST_TOP_LEVEL_NAME = LSA_FOREST_TRUST_TOP_LEVEL_NAME,
+ FOREST_TRUST_TOP_LEVEL_NAME_EX =
LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX,
+ FOREST_TRUST_DOMAIN_INFO = LSA_FOREST_TRUST_DOMAIN_INFO,
+ FOREST_TRUST_BINARY_DATA = LSA_FOREST_TRUST_BINARY_DATA,
+ FOREST_TRUST_SCANNER_INFO = LSA_FOREST_TRUST_SCANNER_INFO
+ } ForestTrustInfoRecordType;
+
typedef struct {
[value(strlen_m(string))] uint32 size;
[charset(UTF8)] uint8 string[size];
} ForestTrustString;
- typedef [flag(NDR_NOALIGN)] struct {
+ typedef [public,flag(NDR_NOALIGN)] struct {
[value(ndr_size_dom_sid0(&sid, ndr->flags))] uint32 sid_size;
- [subcontext(0),subcontext_size(sid_size)] dom_sid sid;
+ [subcontext(0),subcontext_size(sid_size)] dom_sid0 sid;
ForestTrustString dns_name;
ForestTrustString netbios_name;
} ForestTrustDataDomainInfo;
- typedef [flag(NDR_NOALIGN)] struct {
+ typedef [public,flag(NDR_NOALIGN|NDR_PAHEX)] struct {
uint32 size;
uint8 data[size];
} ForestTrustDataBinaryData;
- typedef [nodiscriminant] union {
+ typedef [public,flag(NDR_NOALIGN)] struct {
+ [value(FOREST_TRUST_SCANNER_INFO)] ForestTrustInfoRecordType
sub_type;
+ ForestTrustDataDomainInfo info;
+ } ForestTrustDataScannerInfo;
+
+ typedef [public,nodiscriminant] union {
[case(FOREST_TRUST_TOP_LEVEL_NAME)] ForestTrustString name;
[case(FOREST_TRUST_TOP_LEVEL_NAME_EX)] ForestTrustString name;
[case(FOREST_TRUST_DOMAIN_INFO)] ForestTrustDataDomainInfo info;
- [default] ForestTrustDataBinaryData data;
+ [case(FOREST_TRUST_BINARY_DATA)] ForestTrustDataBinaryData
binary;
+ /*
+ * ForestTrustDataScannerInfo would have the same
+ * definition as ForestTrustDataDomainInfo
+ */
+ [case(FOREST_TRUST_SCANNER_INFO),subcontext(4)]
ForestTrustDataScannerInfo scanner_info;
+ [default] ForestTrustDataBinaryData unknown;
} ForestTrustData;
- /* same as lsa_ForestTrustRecordType, but only 8 bit */
- typedef [enum8bit] enum {
- FOREST_TRUST_TOP_LEVEL_NAME = LSA_FOREST_TRUST_TOP_LEVEL_NAME,
- FOREST_TRUST_TOP_LEVEL_NAME_EX =
LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX,
- FOREST_TRUST_DOMAIN_INFO = LSA_FOREST_TRUST_DOMAIN_INFO
- } ForestTrustInfoRecordType;
-
/* meaning of flags depends on record type and values are
the same as in lsa.idl, see collision record types */
typedef [public,gensize,flag(NDR_NOALIGN)] struct {
diff --git a/librpc/idl/drsuapi.idl b/librpc/idl/drsuapi.idl
index 99fbca6c7b7..fe27e88ac7c 100644
--- a/librpc/idl/drsuapi.idl
+++ b/librpc/idl/drsuapi.idl
@@ -914,8 +914,8 @@ interface drsuapi
typedef struct {
[ref] drsuapi_DsReplicaObjectIdentifier *naming_context;
- GUID source_dra;
- [charset(UTF16),string] uint16 *source_dra_address;
+ GUID source_dsa;
+ [charset(UTF16),string] uint16 *source_dsa_address;
uint8 schedule[84];
drsuapi_DrsOptions replica_flags;
uint32 modify_fields;
diff --git a/librpc/idl/security.idl b/librpc/idl/security.idl
index d88cd92671a..9f02ee10d92 100644
--- a/librpc/idl/security.idl
+++ b/librpc/idl/security.idl
@@ -251,7 +251,7 @@ interface security
const string SID_NT_RESTRICTED = "S-1-5-12";
const string SID_NT_TERMINAL_SERVER_USERS = "S-1-5-13";
const string SID_NT_REMOTE_INTERACTIVE = "S-1-5-14";
- const string SID_NT_THIS_ORGANISATION = "S-1-5-15";
+ const string SID_NT_THIS_ORGANIZATION = "S-1-5-15";
const string SID_NT_IUSR = "S-1-5-17";
const string SID_NT_SYSTEM = "S-1-5-18";
const string SID_NT_LOCAL_SERVICE = "S-1-5-19";
@@ -259,7 +259,8 @@ interface security
const string SID_NT_DIGEST_AUTHENTICATION = "S-1-5-64-21";
const string SID_NT_NTLM_AUTHENTICATION = "S-1-5-64-10";
const string SID_NT_SCHANNEL_AUTHENTICATION = "S-1-5-64-14";
- const string SID_NT_OTHER_ORGANISATION = "S-1-5-1000";
+ const string SID_NT_THIS_ORGANIZATION_CERTIFICATE = "S-1-5-65-1";
+ const string SID_NT_OTHER_ORGANIZATION = "S-1-5-1000";
/* SECURITY_BUILTIN_DOMAIN_RID */
const string NAME_BUILTIN = "BUILTIN";
@@ -374,6 +375,8 @@ interface security
const int DOMAIN_RID_PROTECTED_USERS = 525;
const int DOMAIN_RID_KEY_ADMINS = 526;
const int DOMAIN_RID_ENTERPRISE_KEY_ADMINS = 527;
+ const int DOMAIN_RID_FOREST_TRUST_ACCOUNTS = 528;
+ const int DOMAIN_RID_EXTERNAL_TRUST_ACCOUNTS = 529;
const int DOMAIN_RID_RAS_SERVERS = 553;
const int DOMAIN_RID_RODC_ALLOW = 571;
const int DOMAIN_RID_RODC_DENY = 572;
diff --git a/python/samba/tests/krb5/test_ldap.py
b/python/samba/tests/krb5/test_ldap.py
index eaf79e7fa01..259fb8c3ccd 100755
--- a/python/samba/tests/krb5/test_ldap.py
+++ b/python/samba/tests/krb5/test_ldap.py
@@ -133,7 +133,7 @@ class LdapTests(KDCBaseTest):
self.assertEqual(security.SID_NT_NETWORK, str(token_sid))
if len(token_groups) >= 3:
token_sid = ndr_unpack(security.dom_sid, token_groups[2])
- self.assertEqual(security.SID_NT_THIS_ORGANISATION,
+ self.assertEqual(security.SID_NT_THIS_ORGANIZATION,
str(token_sid))
else:
# Ensure that they match.
diff --git a/source3/rpc_server/lsa/srv_lsa_nt.c
b/source3/rpc_server/lsa/srv_lsa_nt.c
index 992cf93875e..6d4d861fad9 100644
--- a/source3/rpc_server/lsa/srv_lsa_nt.c
+++ b/source3/rpc_server/lsa/srv_lsa_nt.c
@@ -4493,7 +4493,7 @@ static NTSTATUS check_ft_info(TALLOC_CTX *mem_ctx,
exclusion = false;
switch (nrec->type) {
- case LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX:
+ case FOREST_TRUST_TOP_LEVEL_NAME_EX:
/* exclusions do not conflict by definition */
break;
@@ -4501,11 +4501,21 @@ static NTSTATUS check_ft_info(TALLOC_CTX *mem_ctx,
dns_name = nrec->data.name.string;
break;
- case LSA_FOREST_TRUST_DOMAIN_INFO:
+ case FOREST_TRUST_DOMAIN_INFO:
dns_name = nrec->data.info.dns_name.string;
nb_name = nrec->data.info.netbios_name.string;
sid = &nrec->data.info.sid;
break;
+
+ case FOREST_TRUST_BINARY_DATA:
+ break;
+
+ case FOREST_TRUST_SCANNER_INFO:
+ /*
+ * We don't have a scanner yet,
+ * so we don't check this here
+ */
+ break;
}
if (!dns_name) continue;
diff --git a/source4/torture/ndr/drsblobs.c b/source4/torture/ndr/drsblobs.c
index 0ef2d95056b..b061d8320e8 100644
--- a/source4/torture/ndr/drsblobs.c
+++ b/source4/torture/ndr/drsblobs.c
@@ -61,6 +61,82 @@ static bool forest_trust_info_check_out(struct
torture_context *tctx,
return true;
}
+static const char *forest_trust_info_data_out2 =
+ "AQAAAAUAAAAfAAAAAAAAALpM2wE/1ICrAA4AAAB3NGVkb20tbD"
+
"QuYmFzZUgAAAAAAAAAukzbAT/UgKsCGAAAAAEEAAAAAAAFFQAAAFWTkhD0sKbKlkeXVg4AAAB3NGV"
+
"kb20tbDQuYmFzZQkAAABXNEVET00tTDQiAAAAAQAAALtM2wFbRoxWABEAAAB3NGVkb20tbDQucHJp"
+
"dmF0ZSEAAAABAAAAu0zbAVtGjFYAEAAAAHc0ZWRvbS1sNC5wdWJsaWM1AAAAAAAAALpM2wH9xHHPB"
+ "CQAAAAEAAAAAA4AAAB3NGVkb20tbDQuYmFzZQkAAABXNEVET00tTDQ=";
+
+static bool forest_trust_info_check_out2(struct torture_context *tctx,
+ struct ForestTrustInfo *r)
+{
+ const struct ForestTrustInfoRecord *rec = NULL;
+ const struct ForestTrustString *n = NULL;
+ const struct ForestTrustDataDomainInfo *d = NULL;
+ const struct ForestTrustDataScannerInfo *s = NULL;
+
+ torture_assert_int_equal(tctx, r->version, 1, "version");
+ torture_assert_int_equal(tctx, r->count, 5, "count");
+
+ torture_assert_int_equal(tctx, r->records[0].record_size, 0x0000001f,
"record size");
+ rec = &r->records[0].record;
+ torture_assert_int_equal(tctx, rec->flags, 0, "record flags");
+ torture_assert_u64_equal(tctx, rec->timestamp, 0xAB80D43F01DB4CBAULL,
"record timestamp");
+ torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME,
"record type");
+ n = &rec->data.name;
+ torture_assert_int_equal(tctx, n->size, 14, "record name size");
+ torture_assert_str_equal(tctx, n->string, "w4edom-l4.base", "record
name string");
+
+ torture_assert_int_equal(tctx, r->records[1].record_size, 0x00000048,
"record size");
+ rec = &r->records[1].record;
+ torture_assert_int_equal(tctx, rec->flags, 0, "record flags");
+ torture_assert_u64_equal(tctx, rec->timestamp, 0xAB80D43F01DB4CBAULL,
"record timestamp");
+ torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_DOMAIN_INFO,
"record type");
+ d = &rec->data.info;
+ torture_assert_int_equal(tctx, d->sid_size, 0x00000018, "record info
sid_size");
+ torture_assert_sid_equal(tctx, &d->sid,
+ dom_sid_parse_talloc(tctx,
"S-1-5-21-278041429-3399921908-1452754838"), "record info sid");
+ torture_assert_int_equal(tctx, d->dns_name.size, 14, "record name
size");
+ torture_assert_str_equal(tctx, d->dns_name.string, "w4edom-l4.base",
"record info dns_name string");
+ torture_assert_int_equal(tctx, d->netbios_name.size, 9, "record info
netbios_name size");
+ torture_assert_str_equal(tctx, d->netbios_name.string, "W4EDOM-L4",
"record info netbios_name string");
+
+ torture_assert_int_equal(tctx, r->records[2].record_size, 0x00000022,
"record size");
+ rec = &r->records[2].record;
+ torture_assert_int_equal(tctx, rec->flags, LSA_TLN_DISABLED_NEW,
"record flags");
+ torture_assert_u64_equal(tctx, rec->timestamp, 0x568C465B01DB4CBBULL,
"record timestamp");
+ torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME,
"record type");
+ n = &rec->data.name;
+ torture_assert_int_equal(tctx, n->size, 17, "record name size");
+ torture_assert_str_equal(tctx, n->string, "w4edom-l4.private", "record
name string");
+
+ torture_assert_int_equal(tctx, r->records[3].record_size, 0x00000021,
"record size");
+ rec = &r->records[3].record;
+ torture_assert_int_equal(tctx, rec->flags, LSA_TLN_DISABLED_NEW,
"record flags");
+ torture_assert_u64_equal(tctx, rec->timestamp, 0x568C465B01DB4CBBULL,
"record timestamp");
+ torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_TOP_LEVEL_NAME,
"record type");
+ n = &rec->data.name;
+ torture_assert_int_equal(tctx, n->size, 16, "record name size");
+ torture_assert_str_equal(tctx, n->string, "w4edom-l4.public", "record
name string");
+
+ torture_assert_int_equal(tctx, r->records[4].record_size, 0x00000035,
"record size");
+ rec = &r->records[4].record;
+ torture_assert_int_equal(tctx, rec->flags, 0, "record flags");
+ torture_assert_u64_equal(tctx, rec->timestamp, 0xCF71C4FD01DB4CBAULL,
"record timestamp");
+ torture_assert_int_equal(tctx, rec->type, FOREST_TRUST_SCANNER_INFO,
"record type");
+ s = &rec->data.scanner_info;
+ torture_assert_int_equal(tctx, s->sub_type, FOREST_TRUST_SCANNER_INFO,
"record sub type");
+ d = &s->info;
+ torture_assert_int_equal(tctx, d->sid_size, 0x00000000, "record info
sid_size");
+ torture_assert_int_equal(tctx, d->dns_name.size, 14, "record name
size");
+ torture_assert_str_equal(tctx, d->dns_name.string, "w4edom-l4.base",
"record info dns_name string");
+ torture_assert_int_equal(tctx, d->netbios_name.size, 9, "record info
netbios_name size");
+ torture_assert_str_equal(tctx, d->netbios_name.string, "W4EDOM-L4",
"record info netbios_name string");
+
+ return true;
+}
+
static const uint8_t trust_domain_passwords_in[] = {
0x34, 0x1f, 0x6e, 0xcd, 0x5f, 0x14, 0x99, 0xf9, 0xd8, 0x34, 0x9f, 0x1d,
0x1c, 0xcf, 0x1f, 0x02, 0xb8, 0x30, 0xcc, 0x77, 0x21, 0xc1, 0xf3, 0xe2,
@@ -511,6 +587,11 @@ struct torture_suite *ndr_drsblobs_suite(TALLOC_CTX *ctx)
torture_suite_add_suite(suite, win2012R2_suite);
torture_suite_add_ndr_pull_test(suite, ForestTrustInfo,
forest_trust_info_data_out, forest_trust_info_check_out);
+ torture_suite_add_ndr_pull_validate_test_b64(suite, ForestTrustInfo,
+ "with_scanner",
+
forest_trust_info_data_out2,
+
forest_trust_info_check_out2);
+
torture_suite_add_ndr_pull_test(suite, trustDomainPasswords,
trust_domain_passwords_in, trust_domain_passwords_check_in);
torture_suite_add_ndr_pull_validate_test_blob(suite,
--
Samba Shared Repository