[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Thu Oct 19 22:40:01 UTC 2023


The branch, master has been updated
       via  4c291514a9e s4:kdc: Permit RODC‐issued evidence tickets for constrained delegation
       via  d209cdf4f0c s4:kdc: Add flag to indicate the upper sixteen bits of the kvno are specified
       via  37594035547 s4:kdc: Use HDB flag constants instead of SDB ones
       via  4e83dfb6764 s4:kdc: Always regard device info when the client performs RBCD
       via  fc7f64baa35 s4:dsdb: Remove reference to non‐existent code
       via  053292a7e8d tests/krb5: Delete connection variable
       via  7ea71c4882e tests/krb5: Make ‘services’ parameter required
       via  ea10d01bfd6 tests/krb5: Remove unreachable exception handlers
       via  e48eb621cd9 tests/krb5: Fix RC4‐only Protected Users tests
       via  f1babf2f3db tests/krb5: Remove unnecessary f‐strings
       via  137499aef60 tests/krb5: Remove unused imports
       via  d363c7bf55a tests/krb5: Fix DES3CBC random_to_key()
       via  a0d32a39804 tests/krb5: Make ‘keybytes’ a bytes object rather than a list
       via  69db1b58882 tests/krb5: Don’t expect edata if no error is expected
       via  ee43eed6354 tests/krb5: Add parameter to _tgs() specifying whether FAST is to be used
       via  991e8f5a7f5 tests/krb5: Use None for the default values of parameters
       via  2ddd8ca3c72 tests/krb5: Move assignments closer to where the variables are used
       via  7f860d1cba4 tests/krb5: Remove incorrect functional level check
       via  11835ed5bbb tests/krb5: Update method names to be consistent with other tests
       via  88d5ae3218d tests/krb5: Have _modify_tgt() accept only keyword arguments
       via  59f7052295a tests/krb5: Correctly pass arguments to _modify_tgt()
       via  a365f04d0f3 tests/krb5: Add KDC_ERR_SERVER_NOMATCH error code
       via  fc475b2e209 tests/krb5: Add ‘expect_edata’ parameter to _user2user()
       via  fcdc0101225 tests/krb5: Fix comment
       via  879e7a3c3e8 tests/krb5: Remove marker
       via  29176807bc2 s4:torture: Check return values of gnutls functions (CID 1547212)
       via  07ec3457dc2 s4:torture: Fix leaks
       via  cf30ddb56d2 s4:torture: Check return values of talloc functions
      from  52fd0d79ab0 smbd: put back code to fill in user and group SID

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


- Log -----------------------------------------------------------------
commit 4c291514a9e144c84d774120001775005838e80d
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 20:24:04 2023 +1300

    s4:kdc: Permit RODC‐issued evidence tickets for constrained delegation
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Thu Oct 19 22:39:19 UTC 2023 on atb-devel-224

commit d209cdf4f0c8ab948f59ef4cbe824a6fa9bef4ad
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 20:18:28 2023 +1300

    s4:kdc: Add flag to indicate the upper sixteen bits of the kvno are specified
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 375940355477e5d564b633d81777a3eba0f162e5
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 20:18:12 2023 +1300

    s4:kdc: Use HDB flag constants instead of SDB ones
    
    These flags are passed to us by Heimdal, and so they are HDB flags, not
    SDB flags.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 4e83dfb6764325bcb420407929399ff4c2b46656
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 14:24:46 2023 +1300

    s4:kdc: Always regard device info when the client performs RBCD
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit fc7f64baa35689b860d208702416f85bb212a3be
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 11:18:50 2023 +1300

    s4:dsdb: Remove reference to non‐existent code
    
    Commit 498542be0bbf4f26558573c1f87b77b8e3509371 removed the code in
    question.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 053292a7e8d2568a06cb6590815039e241d66c52
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:07:30 2023 +1300

    tests/krb5: Delete connection variable
    
    This avoids a ‘variable set but unused’ warning.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 7ea71c4882e97c33e1714f8be461aedb57b82aae
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:06:51 2023 +1300

    tests/krb5: Make ‘services’ parameter required
    
    We use it unconditionally without a check for None.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit ea10d01bfd699b623536ca6fdd8e9b5d5db8d06f
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:05:17 2023 +1300

    tests/krb5: Remove unreachable exception handlers
    
    ‘IOError’ is a subclass of ‘error’, which has already been handled.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit e48eb621cd92cc3d97b77126512295d5bf14ed49
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:03:45 2023 +1300

    tests/krb5: Fix RC4‐only Protected Users tests
    
    We forgot to actually use the ‘supported_enctypes’ parameter.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit f1babf2f3db950e1c7ebbe8886642115a7045a3e
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:02:36 2023 +1300

    tests/krb5: Remove unnecessary f‐strings
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 137499aef60bec415e3ef058d8effcc2d211d7e1
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:02:00 2023 +1300

    tests/krb5: Remove unused imports
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit d363c7bf55a2b913e8a4d2730910467df6694dc1
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 15:59:56 2023 +1300

    tests/krb5: Fix DES3CBC random_to_key()
    
    Because ‘keybytes’ is an immutable bytes object, ‘keybytes[7] = …’ has
    no hope of working.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit a0d32a39804dbf96a155951199e612afcdbda334
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 17:08:01 2023 +1300

    tests/krb5: Make ‘keybytes’ a bytes object rather than a list
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 69db1b58882d42b4f159404a994054439b973fc1
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 15:08:47 2023 +1300

    tests/krb5: Don’t expect edata if no error is expected
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit ee43eed6354fcff3cf38e612a9e4dea5c97ad1b5
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 14:18:47 2023 +1300

    tests/krb5: Add parameter to _tgs() specifying whether FAST is to be used
    
    View with ‘git show -b’.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 991e8f5a7f5a55347a12a1f9c0eff79583bbca7e
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 14:17:59 2023 +1300

    tests/krb5: Use None for the default values of parameters
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 2ddd8ca3c72f0313452d6e89a2ccf1332b38f8ef
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 14:15:27 2023 +1300

    tests/krb5: Move assignments closer to where the variables are used
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 7f860d1cba41a2e1ac4a82914a2471c652a135f3
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 14:06:42 2023 +1300

    tests/krb5: Remove incorrect functional level check
    
    RBCD has no relevance to a method called _tgs().
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 11835ed5bbb80b760e61c8dd8aace614152a4737
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 14:05:16 2023 +1300

    tests/krb5: Update method names to be consistent with other tests
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 88d5ae3218dfb0961b9503472dd14e9585d87773
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 13:53:59 2023 +1300

    tests/krb5: Have _modify_tgt() accept only keyword arguments
    
    to prevent further accidents.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 59f7052295a340e9816946ac35a7d4a6afbfdb78
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 13:52:55 2023 +1300

    tests/krb5: Correctly pass arguments to _modify_tgt()
    
    We were passing the new realm as the ‘renewable’ parameter!
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit a365f04d0f388530cc2b772297a93b2fd54002bc
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 19:06:31 2023 +1300

    tests/krb5: Add KDC_ERR_SERVER_NOMATCH error code
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit fc475b2e209bdb568e5fc3b972e84416ada304ae
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Oct 18 16:51:24 2023 +1300

    tests/krb5: Add ‘expect_edata’ parameter to _user2user()
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit fcdc0101225aebc1dfbc8954184e9cb75ae9de0b
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 11:59:40 2023 +1300

    tests/krb5: Fix comment
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 879e7a3c3e810db1880967e4121fc487cac4d1ac
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Oct 17 11:25:43 2023 +1300

    tests/krb5: Remove marker
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 29176807bc2e40df558f5ba9d19b4a2acf9f5416
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Mon Oct 16 18:25:36 2023 +1300

    s4:torture: Check return values of gnutls functions (CID 1547212)
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 07ec3457dc202fe7bd4e678783e621522d7dbe18
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Mon Oct 16 19:10:56 2023 +1300

    s4:torture: Fix leaks
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit cf30ddb56d25cb7980faf7196d63ca352f156dcc
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Mon Oct 16 19:09:54 2023 +1300

    s4:torture: Check return values of talloc functions
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

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

Summary of changes:
 python/samba/tests/krb5/conditional_ace_tests.py   | 82 ++++++++++++----------
 python/samba/tests/krb5/kcrypto.py                 |  6 +-
 python/samba/tests/krb5/kdc_tgs_tests.py           | 16 ++++-
 python/samba/tests/krb5/kpasswd_tests.py           |  2 +-
 python/samba/tests/krb5/lockout_tests.py           |  4 +-
 .../krb5/ms_kile_client_principal_lookup_tests.py  |  2 +-
 python/samba/tests/krb5/protected_users_tests.py   |  2 +
 python/samba/tests/krb5/raw_testcase.py            |  9 ---
 python/samba/tests/krb5/rfc4120_constants.py       |  1 +
 python/samba/tests/krb5/s4u_tests.py               |  2 +-
 python/samba/tests/krb5/test_min_domain_uid.py     |  2 +-
 selftest/knownfail_heimdal_kdc                     |  6 --
 selftest/knownfail_mit_kdc                         |  4 +-
 source4/dsdb/samdb/ldb_modules/dirsync.c           |  4 +-
 source4/kdc/db-glue.c                              |  5 +-
 source4/kdc/hdb-samba4.c                           |  2 +-
 source4/kdc/sdb.h                                  |  3 +-
 source4/kdc/wdc-samba4.c                           | 12 +---
 source4/torture/rpc/backupkey.c                    | 61 +++++++++++++---
 19 files changed, 130 insertions(+), 95 deletions(-)


Changeset truncated at 500 lines:

diff --git a/python/samba/tests/krb5/conditional_ace_tests.py b/python/samba/tests/krb5/conditional_ace_tests.py
index 62f2e7a647a..c478dfe00a8 100755
--- a/python/samba/tests/krb5/conditional_ace_tests.py
+++ b/python/samba/tests/krb5/conditional_ace_tests.py
@@ -758,7 +758,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
                       expected_error=0)
 
     def test_allowed_from_claim_equals_claim(self):
-        # Create a couple of claims.
+        # Create a couple of claim types.
 
         claim0_id = self.get_new_username()
         self.create_claim(claim0_id,
@@ -1074,8 +1074,6 @@ class ConditionalAceTests(ConditionalAceBaseTests):
         (('foo', 'bar'), 'Contains', '{{1, 2, 3}}', None),
     ]
 
-    ##########################################################################################
-
     def _test_cmp_with_args(self, lhs, op, rhs, outcome, rhs_is_literal=False):
         # Construct a conditional ACE expression that evaluates to True if the
         # two claim values are equal.
@@ -2111,7 +2109,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
         self._rbcd(target_policy=f'Device_Member_of SID({security.SID_CLAIMS_VALID})',
                    device_sids=device_sids)
 
-    def test_rbcd_device_without_compounded_auth(self):
+    def test_rbcd_device_without_compounded_authentication(self):
         device_sids = {
             (security.DOMAIN_RID_USERS, SidType.BASE_SID, self.default_attrs),
             (security.DOMAIN_RID_USERS, SidType.PRIMARY_GID, None),
@@ -2131,7 +2129,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
                    reason=AuditReason.ACCESS_DENIED,
                    edata=self.expect_padata_outer)
 
-    def test_rbcd_device_with_compounded_auth(self):
+    def test_rbcd_device_with_compounded_authentication(self):
         device_sids = {
             (security.DOMAIN_RID_USERS, SidType.BASE_SID, self.default_attrs),
             (security.DOMAIN_RID_USERS, SidType.PRIMARY_GID, None),
@@ -2154,8 +2152,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
 
     def test_rbcd_service_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
-                   service_from_rodc=True,
-                   edata=self.expect_padata_outer)
+                   service_from_rodc=True)
 
     def test_rbcd_device_and_service_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
@@ -2165,8 +2162,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
 
     def test_rbcd_client_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
-                   client_from_rodc=True,
-                   edata=self.expect_padata_outer)
+                   client_from_rodc=True)
 
     def test_rbcd_client_and_device_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
@@ -2177,8 +2173,7 @@ class ConditionalAceTests(ConditionalAceBaseTests):
     def test_rbcd_client_and_service_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
                    client_from_rodc=True,
-                   service_from_rodc=True,
-                   edata=self.expect_padata_outer)
+                   service_from_rodc=True)
 
     def test_rbcd_all_from_rodc(self):
         self._rbcd('Member_of SID({service_sid})',
@@ -2726,8 +2721,9 @@ class ConditionalAceTests(ConditionalAceBaseTests):
              reason=AuditReason.NONE,
              status=None,
              edata=False,
-             client_from_rodc=False,
-             device_from_rodc=False,
+             use_fast=True,
+             client_from_rodc=None,
+             device_from_rodc=None,
              client_sids=None,
              client_claims=None,
              device_sids=None,
@@ -2743,13 +2739,17 @@ class ConditionalAceTests(ConditionalAceBaseTests):
         except TypeError:
             self.assertIsNot(code, CRASHES_WINDOWS)
 
-        samdb = self.get_samdb()
-        functional_level = self.get_domain_functional_level(samdb)
+        if not use_fast:
+            self.assertIsNone(device_from_rodc)
+            self.assertIsNone(device_sids)
+            self.assertIsNone(device_claims)
+            self.assertIsNone(expected_device_groups)
 
-        if functional_level < dsdb.DS_DOMAIN_FUNCTION_2008:
-            self.skipTest('RBCD requires FL2008')
+        if client_from_rodc is None:
+            client_from_rodc = False
 
-        domain_sid_str = samdb.get_domain_sid()
+        if device_from_rodc is None:
+            device_from_rodc = False
 
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.USER,
@@ -2792,26 +2792,29 @@ class ConditionalAceTests(ConditionalAceBaseTests):
             new_ticket_key=rodc_krbtgt_key if client_from_rodc else None,
             checksum_keys=rodc_checksum_key if client_from_rodc else checksum_key)
 
-        # Create a machine account with which to perform FAST.
-        mach_creds = self.get_cached_creds(
-            account_type=self.AccountType.COMPUTER,
-            opts={
-                'allowed_replication_mock': device_from_rodc,
-                'revealed_to_mock_rodc': device_from_rodc,
-            })
-        mach_tgt = self.get_tgt(mach_creds)
-        device_modify_pac_fn = []
-        if device_sids is not None:
-            device_modify_pac_fn.append(partial(self.set_pac_sids,
-                                                new_sids=device_sids))
-        if device_claims is not None:
-            device_modify_pac_fn.append(partial(self.set_pac_claims,
-                                                client_claims=device_claims))
-        mach_tgt = self.modified_ticket(
-            mach_tgt,
-            modify_pac_fn=device_modify_pac_fn,
-            new_ticket_key=rodc_krbtgt_key if device_from_rodc else None,
-            checksum_keys=rodc_checksum_key if device_from_rodc else checksum_key)
+        if use_fast:
+            # Create a machine account with which to perform FAST.
+            mach_creds = self.get_cached_creds(
+                account_type=self.AccountType.COMPUTER,
+                opts={
+                    'allowed_replication_mock': device_from_rodc,
+                    'revealed_to_mock_rodc': device_from_rodc,
+                })
+            mach_tgt = self.get_tgt(mach_creds)
+            device_modify_pac_fn = []
+            if device_sids is not None:
+                device_modify_pac_fn.append(partial(self.set_pac_sids,
+                                                    new_sids=device_sids))
+            if device_claims is not None:
+                device_modify_pac_fn.append(partial(self.set_pac_claims,
+                                                    client_claims=device_claims))
+            mach_tgt = self.modified_ticket(
+                mach_tgt,
+                modify_pac_fn=device_modify_pac_fn,
+                new_ticket_key=rodc_krbtgt_key if device_from_rodc else None,
+                checksum_keys=rodc_checksum_key if device_from_rodc else checksum_key)
+        else:
+            mach_tgt = None
 
         if target_policy is None:
             policy = None
@@ -2831,6 +2834,9 @@ class ConditionalAceTests(ConditionalAceBaseTests):
             target_creds)
         target_etypes = target_creds.tgs_supported_enctypes
 
+        samdb = self.get_samdb()
+        domain_sid_str = samdb.get_domain_sid()
+
         expected_groups = self.map_sids(expected_groups, None, domain_sid_str)
         expected_device_groups = self.map_sids(expected_device_groups, None, domain_sid_str)
 
diff --git a/python/samba/tests/krb5/kcrypto.py b/python/samba/tests/krb5/kcrypto.py
index 79df0b58a3e..c0a09908ea9 100755
--- a/python/samba/tests/krb5/kcrypto.py
+++ b/python/samba/tests/krb5/kcrypto.py
@@ -279,11 +279,11 @@ class _DES3CBC(_SimplifiedEnctype):
                 b &= ~1
                 return b if bin(b & ~1).count('1') % 2 else b | 1
             assert len(seed) == 7
-            firstbytes = [parity(b & ~1) for b in seed]
+            firstbytes = bytes(parity(b & ~1) for b in seed)
             lastbyte = parity(sum((seed[i] & 1) << i + 1 for i in range(7)))
-            keybytes = bytes([b for b in firstbytes + [lastbyte]])
+            keybytes = firstbytes + bytes([lastbyte])
             if _is_weak_des_key(keybytes):
-                keybytes[7] = bytes([keybytes[7] ^ 0xF0])
+                keybytes = firstbytes + bytes([lastbyte ^ 0xF0])
             return keybytes
 
         if len(seed) != 21:
diff --git a/python/samba/tests/krb5/kdc_tgs_tests.py b/python/samba/tests/krb5/kdc_tgs_tests.py
index f6d8921635a..28654042f78 100755
--- a/python/samba/tests/krb5/kdc_tgs_tests.py
+++ b/python/samba/tests/krb5/kdc_tgs_tests.py
@@ -48,6 +48,7 @@ from samba.tests.krb5.rfc4120_constants import (
     KDC_ERR_PREAUTH_REQUIRED,
     KDC_ERR_C_PRINCIPAL_UNKNOWN,
     KDC_ERR_S_PRINCIPAL_UNKNOWN,
+    KDC_ERR_SERVER_NOMATCH,
     KDC_ERR_TKT_EXPIRED,
     KDC_ERR_TGT_REVOKED,
     KRB_ERR_TKT_NYV,
@@ -1954,7 +1955,7 @@ class KdcTgsTests(KdcTgsBaseTests):
         tgt = self._get_tgt(creds)
 
         realm = creds.get_realm().encode('utf-8')
-        tgt = self._modify_tgt(tgt, realm)
+        tgt = self._modify_tgt(tgt, crealm=realm)
 
         self._user2user(tgt, creds,
                         expected_error=0)
@@ -1963,10 +1964,16 @@ class KdcTgsTests(KdcTgsBaseTests):
         creds = self._get_creds()
         tgt = self._get_tgt(creds)
 
-        tgt = self._modify_tgt(tgt, b'OTHER.REALM')
+        tgt = self._modify_tgt(tgt, crealm=b'OTHER.REALM')
 
         self._user2user(tgt, creds,
-                        expected_error=0)
+                        expected_error=(
+                            KDC_ERR_POLICY,  # Windows
+                            KDC_ERR_C_PRINCIPAL_UNKNOWN,  # Heimdal
+                            KDC_ERR_SERVER_NOMATCH,  # MIT
+                        ),
+                        expect_edata=True,
+                        expected_status=ntstatus.NT_STATUS_NO_MATCH)
 
     def test_user2user_tgt_correct_cname(self):
         creds = self._get_creds()
@@ -2929,6 +2936,7 @@ class KdcTgsTests(KdcTgsBaseTests):
 
     def _modify_tgt(self,
                     tgt,
+                    *,
                     renewable=False,
                     invalid=False,
                     from_rodc=False,
@@ -3235,6 +3243,7 @@ class KdcTgsTests(KdcTgsBaseTests):
     def _user2user(self, tgt, tgt_creds, expected_error, *,
                    sname=None,
                    srealm=None, user_tgt=None, user_creds=None,
+                   expect_edata=False,
                    expect_pac=True, expected_status=None):
         if user_tgt is None:
             user_creds = self._get_mach_creds()
@@ -3250,6 +3259,7 @@ class KdcTgsTests(KdcTgsBaseTests):
                              additional_ticket=tgt,
                              sname=sname,
                              srealm=srealm,
+                             expect_edata=expect_edata,
                              expect_pac=expect_pac,
                              expected_status=expected_status)
 
diff --git a/python/samba/tests/krb5/kpasswd_tests.py b/python/samba/tests/krb5/kpasswd_tests.py
index 961feeac243..befe56c5bf5 100755
--- a/python/samba/tests/krb5/kpasswd_tests.py
+++ b/python/samba/tests/krb5/kpasswd_tests.py
@@ -26,7 +26,7 @@ os.environ['PYTHONUNBUFFERED'] = '1'
 from functools import partial
 
 from samba import generate_random_password
-from samba.dcerpc import krb5pac, security
+from samba.dcerpc import krb5pac
 from samba.sd_utils import SDUtils
 
 from samba.tests.krb5.kdc_base_test import KDCBaseTest
diff --git a/python/samba/tests/krb5/lockout_tests.py b/python/samba/tests/krb5/lockout_tests.py
index 3fe098a662d..d91eb1df79d 100755
--- a/python/samba/tests/krb5/lockout_tests.py
+++ b/python/samba/tests/krb5/lockout_tests.py
@@ -812,8 +812,8 @@ class LockoutTests(KDCBaseTest):
                 # modification, so that the account is also added to the
                 # auxiliary bad password database.
 
-                old_utf16pw = f'"Secret007"'.encode('utf-16le')  # invalid pwd
-                new_utf16pw = f'"Secret008"'.encode('utf-16le')
+                old_utf16pw = '"Secret007"'.encode('utf-16le')  # invalid pwd
+                new_utf16pw = '"Secret008"'.encode('utf-16le')
 
                 msg = ldb.Message(user_dn)
                 msg['0'] = ldb.MessageElement(old_utf16pw,
diff --git a/python/samba/tests/krb5/ms_kile_client_principal_lookup_tests.py b/python/samba/tests/krb5/ms_kile_client_principal_lookup_tests.py
index 3fda7d66cf0..9b541a6285e 100755
--- a/python/samba/tests/krb5/ms_kile_client_principal_lookup_tests.py
+++ b/python/samba/tests/krb5/ms_kile_client_principal_lookup_tests.py
@@ -23,7 +23,7 @@ import os
 sys.path.insert(0, "bin/python")
 os.environ["PYTHONUNBUFFERED"] = "1"
 
-from samba.dsdb import UF_NORMAL_ACCOUNT, UF_DONT_REQUIRE_PREAUTH
+from samba.dsdb import UF_DONT_REQUIRE_PREAUTH
 from samba.tests.krb5.kdc_base_test import KDCBaseTest
 from samba.tests.krb5.rfc4120_constants import (
     AES256_CTS_HMAC_SHA1_96,
diff --git a/python/samba/tests/krb5/protected_users_tests.py b/python/samba/tests/krb5/protected_users_tests.py
index 27356cbd589..b592b4a893f 100755
--- a/python/samba/tests/krb5/protected_users_tests.py
+++ b/python/samba/tests/krb5/protected_users_tests.py
@@ -93,6 +93,8 @@ class ProtectedUsersTests(KDCBaseTest):
 
         if members:
             opts['member_of'] = members
+        if supported_enctypes is not None:
+            opts['supported_enctypes'] = supported_enctypes
 
         return self.get_cached_creds(account_type=account_type,
                                      opts=opts,
diff --git a/python/samba/tests/krb5/raw_testcase.py b/python/samba/tests/krb5/raw_testcase.py
index 2681356f3cf..f433fa4bd4e 100644
--- a/python/samba/tests/krb5/raw_testcase.py
+++ b/python/samba/tests/krb5/raw_testcase.py
@@ -836,9 +836,6 @@ class RawKerberosTest(TestCase):
         except socket.error:
             self.s.close()
             raise
-        except IOError:
-            self.s.close()
-            raise
 
     def connect(self, host, port=None):
         self.assertNotConnected()
@@ -1142,9 +1139,6 @@ class RawKerberosTest(TestCase):
         except socket.error as e:
             self._disconnect("send_msg: %s" % e)
             raise
-        except IOError as e:
-            self._disconnect("send_msg: %s" % e)
-            raise
 
     def recv_raw(self, num_recv=0xffff, hexdump=None, timeout=None):
         rep_pdu = None
@@ -1163,9 +1157,6 @@ class RawKerberosTest(TestCase):
         except socket.error as e:
             self._disconnect("recv_raw: %s" % e)
             raise
-        except IOError as e:
-            self._disconnect("recv_raw: %s" % e)
-            raise
         return rep_pdu
 
     def recv_pdu_raw(self, asn1_print=None, hexdump=None, timeout=None):
diff --git a/python/samba/tests/krb5/rfc4120_constants.py b/python/samba/tests/krb5/rfc4120_constants.py
index 583ffbaf6af..dff6017b710 100644
--- a/python/samba/tests/krb5/rfc4120_constants.py
+++ b/python/samba/tests/krb5/rfc4120_constants.py
@@ -101,6 +101,7 @@ KDC_ERR_CLIENT_REVOKED = 18
 KDC_ERR_TGT_REVOKED = 20
 KDC_ERR_PREAUTH_FAILED = 24
 KDC_ERR_PREAUTH_REQUIRED = 25
+KDC_ERR_SERVER_NOMATCH = 26
 KDC_ERR_BAD_INTEGRITY = 31
 KDC_ERR_TKT_EXPIRED = 32
 KRB_ERR_TKT_NYV = 33
diff --git a/python/samba/tests/krb5/s4u_tests.py b/python/samba/tests/krb5/s4u_tests.py
index d91c06c418f..b03a246e4be 100755
--- a/python/samba/tests/krb5/s4u_tests.py
+++ b/python/samba/tests/krb5/s4u_tests.py
@@ -1778,7 +1778,7 @@ class S4UKerberosTests(KDCBaseTest):
                                     checksum_keys=checksum_keys,
                                     include_checksums=include_checksums)
 
-    def add_delegation_info(self, ticket, services=None):
+    def add_delegation_info(self, ticket, *, services):
         def modify_pac_fn(pac):
             pac_buffers = pac.buffers
             self.assertNotIn(krb5pac.PAC_TYPE_CONSTRAINED_DELEGATION,
diff --git a/python/samba/tests/krb5/test_min_domain_uid.py b/python/samba/tests/krb5/test_min_domain_uid.py
index 7c7942c6cbe..c0b415d2a9e 100755
--- a/python/samba/tests/krb5/test_min_domain_uid.py
+++ b/python/samba/tests/krb5/test_min_domain_uid.py
@@ -91,7 +91,7 @@ class SmbMinDomainUid(KDCBaseTest):
 
         conn = libsmb.Conn(self.mach_name, self.share, lp=s3_lp, creds=creds)
         # Disconnect
-        conn = None
+        del conn
 
         with open(self.global_inject, 'w') as f:
             f.truncate()
diff --git a/selftest/knownfail_heimdal_kdc b/selftest/knownfail_heimdal_kdc
index 842309bafe8..986c2e9cc24 100644
--- a/selftest/knownfail_heimdal_kdc
+++ b/selftest/knownfail_heimdal_kdc
@@ -125,12 +125,6 @@
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_pac_claim_cmp__1_zero_and_one_uint_2_0_1___zero_and_one_uint_\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_pac_claim_cmp__1_zero_int_1_0___zero_int_\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_pac_claim_cmp__1_zero_uint_2_0___zero_uint_\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_client_and_device_from_rodc\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_client_from_rodc\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_aa_asserted_identity\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_claims_valid\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_compounded_auth\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_service_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_tgs_with_claims_valid_both_from_rodc\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_tgs_with_claims_valid_client_from_rodc\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_tgs_with_service_asserted_identity_both_from_rodc\(ad_dc\)
diff --git a/selftest/knownfail_mit_kdc b/selftest/knownfail_mit_kdc
index c89feb1dbb1..5f5a4fa45ec 100644
--- a/selftest/knownfail_mit_kdc
+++ b/selftest/knownfail_mit_kdc
@@ -3963,7 +3963,7 @@ samba.tests.krb5.as_canonicalization_tests.samba.tests.krb5.as_canonicalization_
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_from_rodc\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_aa_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_claims_valid\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_compounded_auth\(ad_dc\)
+^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_compounded_authentication\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_with_service_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_service_from_rodc\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_with_aa_asserted_identity\(ad_dc\)
@@ -4040,7 +4040,7 @@ samba.tests.krb5.as_canonicalization_tests.samba.tests.krb5.as_canonicalization_
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_aa_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_aa_asserted_identity_not_memberof\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_claims_valid\(ad_dc\)
-^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_compounded_auth\(ad_dc\)
+^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_compounded_authentication\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_device_without_service_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_without_aa_asserted_identity\(ad_dc\)
 ^samba.tests.krb5.conditional_ace_tests.samba.tests.krb5.conditional_ace_tests.ConditionalAceTests.test_rbcd_without_claims_valid\(ad_dc\)
diff --git a/source4/dsdb/samdb/ldb_modules/dirsync.c b/source4/dsdb/samdb/ldb_modules/dirsync.c
index ac16e96f169..9901a993c05 100644
--- a/source4/dsdb/samdb/ldb_modules/dirsync.c
+++ b/source4/dsdb/samdb/ldb_modules/dirsync.c
@@ -202,9 +202,7 @@ static int dirsync_filter_entry(struct ldb_request *req,
 			guidfound = true;
 		}
 		/*
-		 * We expect to find the GUID in the object,
-		 * if it turns out not to be the case sometimes
-		 * we will uncomment the code below
+		 * We expect to find the GUID in the object
 		 */
 		SMB_ASSERT(guidfound == true);
 		return ldb_module_send_entry(dsc->req, msg, controls);
diff --git a/source4/kdc/db-glue.c b/source4/kdc/db-glue.c
index cf606d3e6dd..90be0434c36 100644
--- a/source4/kdc/db-glue.c
+++ b/source4/kdc/db-glue.c
@@ -2466,7 +2466,7 @@ static krb5_error_code samba_kdc_fetch_krbtgt(krb5_context context,
 		/* w2k8r2 sometimes gives us a kvno of 255 for inter-domain
 		   trust tickets. We don't yet know what this means, but we do
 		   seem to need to treat it as unspecified */
-		if (flags & SDB_F_KVNO_SPECIFIED) {
+		if (flags & (SDB_F_KVNO_SPECIFIED|SDB_F_RODC_NUMBER_SPECIFIED)) {
 			krbtgt_number = SAMBA_KVNO_GET_KRBTGT(kvno);
 			if (kdc_db_ctx->rodc) {
 				if (krbtgt_number != kdc_db_ctx->my_krbtgt_number) {
@@ -3413,7 +3413,8 @@ krb5_error_code samba_kdc_check_s4u2proxy_rbcd(
 	struct security_token *security_token = NULL;
 	uint32_t session_info_flags =
 		AUTH_SESSION_INFO_DEFAULT_GROUPS |
-		AUTH_SESSION_INFO_SIMPLE_PRIVILEGES;
+		AUTH_SESSION_INFO_SIMPLE_PRIVILEGES |
+		AUTH_SESSION_INFO_FORCE_COMPOUNDED_AUTHENTICATION;
 	/*
 	 * Testing shows that although Windows grants SEC_ADS_GENERIC_ALL access
 	 * in security descriptors it creates for RBCD, its KDC only requires
diff --git a/source4/kdc/hdb-samba4.c b/source4/kdc/hdb-samba4.c
index 7d80358c889..92e9e609196 100644
--- a/source4/kdc/hdb-samba4.c
+++ b/source4/kdc/hdb-samba4.c
@@ -215,7 +215,7 @@ static krb5_error_code hdb_samba4_kpasswd_fetch_kvno(krb5_context context, HDB *
 	flags &= ~HDB_F_KVNO_SPECIFIED;
 
 	/* Don't bother looking up a client or krbtgt. */
-	flags &= ~(SDB_F_GET_CLIENT|SDB_F_GET_KRBTGT);
+	flags &= ~(HDB_F_GET_CLIENT|HDB_F_GET_KRBTGT);
 
 	ret = hdb_samba4_fetch_kvno(context, db,
 				    kpasswd_principal,
diff --git a/source4/kdc/sdb.h b/source4/kdc/sdb.h
index cc04039ac6d..820648a0698 100644
--- a/source4/kdc/sdb.h
+++ b/source4/kdc/sdb.h
@@ -134,8 +134,9 @@ struct sdb_entry {
 				 SDB_F_ARMOR_PRINCIPAL| \
 				 SDB_F_USER2USER_PRINCIPAL)
 
-/* This is not supported by HDB */
+/* These are not supported by HDB */
 #define SDB_F_FORCE_CANON	16384	/* force canonicalization */
+#define SDB_F_RODC_NUMBER_SPECIFIED	32768	/* we want a particular RODC number */
 
 void sdb_key_free(struct sdb_key *key);
 void sdb_keys_free(struct sdb_keys *keys);
diff --git a/source4/kdc/wdc-samba4.c b/source4/kdc/wdc-samba4.c
index 1daf6d63f51..dc2fffad2e4 100644
--- a/source4/kdc/wdc-samba4.c
+++ b/source4/kdc/wdc-samba4.c
@@ -642,14 +642,6 @@ static krb5_error_code samba_wdc_verify_pac(void *priv, astgs_request_t r,
 			if (pac_kdc_signature_rodc_id != header_ticket_rodc_id) {
 				struct sdb_entry signing_krbtgt_sdb;
 
-				/*
-				 * If we didn't sign the ticket, then return an
-				 * error.
-				 */
-				if (pac_kdc_signature_rodc_id != 0) {
-					return KRB5KRB_AP_ERR_MODIFIED;
-				}
-
 				/*
 				 * Fetch our key from the database. To support
 				 * key rollover, we're going to need to try
@@ -659,8 +651,8 @@ static krb5_error_code samba_wdc_verify_pac(void *priv, astgs_request_t r,
 				ret = samba_kdc_fetch(context,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list