[SCM] Samba Shared Repository - branch master updated

Joseph Sutton jsutton at samba.org
Mon Jan 17 20:56:01 UTC 2022


The branch, master has been updated
       via  19d9504b1b3 s4:kdc: improve DEBUG messages in samba_wdc_reget_pac2()
       via  84b76270ceb s4:auth: debug make_user_info_dc_pac() failures in kerberos_pac_to_user_info_dc()
       via  879eba2740a s4:torture: check for pac_blob==NULL in test_generate_session_info_pac() functions
       via  12154b981c4 s4:heimdal_build: make version_script optional to HEIMDAL_LIBRARY()
       via  6fc5f22978b kdc: Fix leak
       via  e9caa1edef8 tests/krb5: Update supported enctype checking
       via  775bfc72509 tests/krb5: Add AS-REQ PAC tests
       via  f94bdb41fcc tests/krb5: Check encrypted-pa-data if present
       via  48362a706f8 tests/krb5: Add FAST enc-pa-rep tests
       via  c51805f90c0 tests/krb5: Adjust expected error codes
       via  a107bb8b0d4 tests/krb5: Generate unique UPNs for AS-REQ enterprise tests
       via  492d9f083dc s4:torture: Remove netbios realm and lowercase realm tests
       via  3b26c714d42 s4:torture: Make etype list variables static
      from  493fe1a4315 build: reduce printf() calls in generated build_options.c

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


- Log -----------------------------------------------------------------
commit 19d9504b1b34ec7c52eaaf663d5ecf4f05066b6d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 22:44:10 2021 +0100

    s4:kdc: improve DEBUG messages in samba_wdc_reget_pac2()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    
    Autobuild-User(master): Joseph Sutton <jsutton at samba.org>
    Autobuild-Date(master): Mon Jan 17 20:55:41 UTC 2022 on sn-devel-184

commit 84b76270ceb38cbb0263f415f4089bafa751b3a3
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 22:53:13 2021 +0100

    s4:auth: debug make_user_info_dc_pac() failures in kerberos_pac_to_user_info_dc()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

commit 879eba2740ac5e5f456b93a3b47e9a6b70355415
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Dec 24 15:21:21 2021 +0100

    s4:torture: check for pac_blob==NULL in test_generate_session_info_pac() functions
    
    We should return an error instead of crashing for tickets without a PAC.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

commit 12154b981c40d619e4ddb53aceee9f86368a75fb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Dec 23 19:29:06 2021 +0100

    s4:heimdal_build: make version_script optional to HEIMDAL_LIBRARY()
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Joseph Sutton <josephsutton at catalyst.net.nz>

commit 6fc5f22978bd77e4775856359d116492eccc9be6
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 30 16:20:46 2021 +1300

    kdc: Fix leak
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit e9caa1edef846cdea2a719976ee0fd5bd8531048
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 23 15:59:21 2021 +1300

    tests/krb5: Update supported enctype checking
    
    We now do not expect the claims or compound ID bits to be set unless
    explicitly specified, nor the DES bits.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 775bfc72509bf98f3c637ca22cc5edf0e7fae794
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Dec 29 17:35:09 2021 +1300

    tests/krb5: Add AS-REQ PAC tests
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit f94bdb41fccdb085d8f8f5a1a5e4a56581839e8e
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Nov 30 09:45:13 2021 +1300

    tests/krb5: Check encrypted-pa-data if present
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 48362a706f8a6c35a17ecbf625bbf29802143185
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Tue Nov 30 09:42:10 2021 +1300

    tests/krb5: Add FAST enc-pa-rep tests
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit c51805f90c09b40236765c9594693fcb66a55715
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 16 14:21:18 2021 +1300

    tests/krb5: Adjust expected error codes
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit a107bb8b0d424bb1f8ee6df34e8f8e81dd499333
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 16 10:18:42 2021 +1300

    tests/krb5: Generate unique UPNs for AS-REQ enterprise tests
    
    This helps to avoid problems with account creation due to UPN uniqueness
    constraints.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 492d9f083dc23aff2c1fa12e21765861df1c1b38
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Wed Dec 22 16:08:43 2021 +1300

    s4:torture: Remove netbios realm and lowercase realm tests
    
    Tests for these are already present in
    samba.tests.krb5.as_canonicalization_tests. These tests cause problems
    with an upgraded Heimdal version, and we want to stop supporting
    non-canonical realm names, so this commit removes them.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 3b26c714d42fc5e4ab7d4138db987171edda6463
Author: Joseph Sutton <josephsutton at catalyst.net.nz>
Date:   Thu Dec 16 21:06:55 2021 +1300

    s4:torture: Make etype list variables static
    
    If they are not made static, these variables end up being used by the
    Kerberos libraries after they have gone out of scope.
    
    Signed-off-by: Joseph Sutton <josephsutton at catalyst.net.nz>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

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

Summary of changes:
 python/samba/tests/krb5/as_req_tests.py      |  24 ++-
 python/samba/tests/krb5/fast_tests.py        | 227 ++++++++++++++++++++++++++-
 python/samba/tests/krb5/kdc_base_test.py     |  25 ++-
 python/samba/tests/krb5/kdc_tgs_tests.py     |   5 +-
 python/samba/tests/krb5/raw_testcase.py      | 109 ++++++++++---
 python/samba/tests/krb5/rfc4120.asn1         |   4 +-
 python/samba/tests/krb5/rfc4120_constants.py |   3 +
 python/samba/tests/krb5/rfc4120_pyasn1.py    |  17 +-
 selftest/knownfail_heimdal_kdc               |   6 +
 selftest/knownfail_mit_kdc                   |   4 +
 source4/auth/kerberos/kerberos_pac.c         |   8 +-
 source4/heimdal_build/wscript_build          |   7 +-
 source4/kdc/wdc-samba4.c                     |  11 +-
 source4/torture/krb5/kdc-canon-heimdal.c     | 112 ++-----------
 source4/torture/krb5/kdc-heimdal.c           |   8 +-
 source4/torture/rpc/remote_pac.c             |   5 +
 source4/torture/winbind/winbind.c            |   5 +
 17 files changed, 419 insertions(+), 161 deletions(-)


Changeset truncated at 500 lines:

diff --git a/python/samba/tests/krb5/as_req_tests.py b/python/samba/tests/krb5/as_req_tests.py
index 263e77d4812..b52937530e6 100755
--- a/python/samba/tests/krb5/as_req_tests.py
+++ b/python/samba/tests/krb5/as_req_tests.py
@@ -345,9 +345,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             expect_edata=False)
 
     def test_as_req_enterprise_canon(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.USER,
-            opts={'upn': 'krb5_enterprise0'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm()
@@ -365,9 +366,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=krb5_asn1.KDCOptions('canonicalize'))
 
     def test_as_req_enterprise_canon_case(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.USER,
-            opts={'upn': 'krb5_enterprise1'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm().lower()
@@ -385,9 +387,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=krb5_asn1.KDCOptions('canonicalize'))
 
     def test_as_req_enterprise_canon_mac(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.COMPUTER,
-            opts={'upn': 'krb5_enterprise2'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm()
@@ -405,9 +408,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=krb5_asn1.KDCOptions('canonicalize'))
 
     def test_as_req_enterprise_canon_mac_case(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.COMPUTER,
-            opts={'upn': 'krb5_enterprise3'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm().lower()
@@ -425,9 +429,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=krb5_asn1.KDCOptions('canonicalize'))
 
     def test_as_req_enterprise_no_canon(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.USER,
-            opts={'upn': 'krb5_enterprise4'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm()
@@ -440,9 +445,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=0)
 
     def test_as_req_enterprise_no_canon_case(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.USER,
-            opts={'upn': 'krb5_enterprise5'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm().lower()
@@ -455,9 +461,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=0)
 
     def test_as_req_enterprise_no_canon_mac(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.COMPUTER,
-            opts={'upn': 'krb5_enterprise6'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm()
@@ -470,9 +477,10 @@ class AsReqKerberosTests(AsReqBaseTest):
             kdc_options=0)
 
     def test_as_req_enterprise_no_canon_mac_case(self):
+        upn = self.get_new_username()
         client_creds = self.get_cached_creds(
             account_type=self.AccountType.COMPUTER,
-            opts={'upn': 'krb5_enterprise7'})
+            opts={'upn': upn})
 
         user_name = client_creds.get_username()
         realm = client_creds.get_realm().lower()
diff --git a/python/samba/tests/krb5/fast_tests.py b/python/samba/tests/krb5/fast_tests.py
index 6a6fdfa786e..7e69d6c83df 100755
--- a/python/samba/tests/krb5/fast_tests.py
+++ b/python/samba/tests/krb5/fast_tests.py
@@ -53,6 +53,7 @@ from samba.tests.krb5.rfc4120_constants import (
     NT_SRV_INST,
     PADATA_FX_COOKIE,
     PADATA_FX_FAST,
+    PADATA_REQ_ENC_PA_REP,
 )
 import samba.tests.krb5.rfc4120_pyasn1 as krb5_asn1
 import samba.tests.krb5.kcrypto as kcrypto
@@ -112,6 +113,84 @@ class FAST_Tests(KDCBaseTest):
             }
         ], client_account=self.AccountType.COMPUTER)
 
+    def test_simple_as_req_self_no_auth_data(self):
+        self._run_test_sequence(
+            [
+                {
+                    'rep_type': KRB_AS_REP,
+                    'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                    'use_fast': False,
+                    'as_req_self': True
+                },
+                {
+                    'rep_type': KRB_AS_REP,
+                    'expected_error_mode': 0,
+                    'use_fast': False,
+                    'gen_padata_fn': self.generate_enc_timestamp_padata,
+                    'as_req_self': True,
+                    'expect_pac': True
+                }
+            ],
+            client_account=self.AccountType.COMPUTER,
+            client_opts={'no_auth_data_required': True})
+
+    def test_simple_as_req_self_pac_request_false(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'use_fast': False,
+                'as_req_self': True
+            },
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': 0,
+                'use_fast': False,
+                'gen_padata_fn': self.generate_enc_timestamp_padata,
+                'as_req_self': True,
+                'pac_request': False,
+                'expect_pac': False
+            }
+        ], client_account=self.AccountType.COMPUTER)
+
+    def test_simple_as_req_self_pac_request_none(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'use_fast': False,
+                'as_req_self': True
+            },
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': 0,
+                'use_fast': False,
+                'gen_padata_fn': self.generate_enc_timestamp_padata,
+                'as_req_self': True,
+                'pac_request': None,
+                'expect_pac': True
+            }
+        ], client_account=self.AccountType.COMPUTER)
+
+    def test_simple_as_req_self_pac_request_true(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'use_fast': False,
+                'as_req_self': True
+            },
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': 0,
+                'use_fast': False,
+                'gen_padata_fn': self.generate_enc_timestamp_padata,
+                'as_req_self': True,
+                'pac_request': True,
+                'expect_pac': True
+            }
+        ], client_account=self.AccountType.COMPUTER)
+
     def test_simple_tgs(self):
         self._run_test_sequence([
             {
@@ -122,6 +201,35 @@ class FAST_Tests(KDCBaseTest):
             }
         ])
 
+    def test_simple_enc_pa_rep(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'use_fast': False
+            },
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': 0,
+                'use_fast': False,
+                'gen_padata_fn': self.generate_enc_pa_rep_timestamp_padata,
+                'expected_flags': 'enc-pa-rep'
+            }
+        ])
+
+    # Currently we only send PADATA-REQ-ENC-PA-REP for AS-REQ requests.
+    def test_simple_tgs_enc_pa_rep(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_TGS_REP,
+                'expected_error_mode': 0,
+                'use_fast': False,
+                'gen_tgt_fn': self.get_user_tgt,
+                'gen_padata_fn': self.generate_enc_pa_rep_padata,
+                'expected_flags': 'enc-pa-rep'
+            }
+        ])
+
     def test_simple_no_sname(self):
         expected_sname = self.get_krbtgt_sname()
 
@@ -422,6 +530,7 @@ class FAST_Tests(KDCBaseTest):
             }
         ])
 
+    # Expected to fail against Windows - Windows does not produce an error.
     def test_fast_unknown_critical_option(self):
         self._run_test_sequence([
             {
@@ -572,6 +681,7 @@ class FAST_Tests(KDCBaseTest):
             }
         ])
 
+    # Expected to fail against Windows - Windows does not produce an error.
     def test_fast_encrypted_challenge_clock_skew(self):
         # The KDC is supposed to confirm that the timestamp is within its
         # current clock skew, and return KRB_APP_ERR_SKEW if it is not (RFC6113
@@ -605,7 +715,8 @@ class FAST_Tests(KDCBaseTest):
         self._run_test_sequence([
             {
                 'rep_type': KRB_AS_REP,
-                'expected_error_mode': KDC_ERR_POLICY,
+                'expected_error_mode': (KDC_ERR_POLICY,
+                                        KDC_ERR_S_PRINCIPAL_UNKNOWN),
                 'use_fast': True,
                 'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
                 'gen_armor_tgt_fn': self.get_user_service_ticket
@@ -620,7 +731,8 @@ class FAST_Tests(KDCBaseTest):
         self._run_test_sequence([
             {
                 'rep_type': KRB_AS_REP,
-                'expected_error_mode': KDC_ERR_POLICY,
+                'expected_error_mode': (KDC_ERR_POLICY,
+                                        KDC_ERR_S_PRINCIPAL_UNKNOWN),
                 'use_fast': True,
                 'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
                 'gen_armor_tgt_fn': self.get_mach_service_ticket
@@ -637,7 +749,8 @@ class FAST_Tests(KDCBaseTest):
         self._run_test_sequence([
             {
                 'rep_type': KRB_AS_REP,
-                'expected_error_mode': KDC_ERR_POLICY,
+                'expected_error_mode': (KDC_ERR_POLICY,
+                                        KDC_ERR_S_PRINCIPAL_UNKNOWN),
                 'use_fast': True,
                 'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
                 'gen_armor_tgt_fn': self.get_service_ticket_invalid_checksum
@@ -657,7 +770,8 @@ class FAST_Tests(KDCBaseTest):
             },
             {
                 'rep_type': KRB_AS_REP,
-                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'expected_error_mode': (KDC_ERR_PREAUTH_REQUIRED,
+                                        KDC_ERR_POLICY),
                 'use_fast': True,
                 'gen_padata_fn': self.generate_enc_timestamp_padata,
                 'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
@@ -743,6 +857,56 @@ class FAST_Tests(KDCBaseTest):
             }
         ])
 
+    def test_fast_enc_pa_rep(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': KDC_ERR_PREAUTH_REQUIRED,
+                'use_fast': True,
+                'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
+                'gen_armor_tgt_fn': self.get_mach_tgt,
+                'expected_flags': 'enc-pa-rep'
+            },
+            {
+                'rep_type': KRB_AS_REP,
+                'expected_error_mode': 0,
+                'use_fast': True,
+                'gen_padata_fn': self.generate_enc_pa_rep_challenge_padata,
+                'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
+                'gen_armor_tgt_fn': self.get_mach_tgt,
+                'expected_flags': 'enc-pa-rep'
+            }
+        ])
+
+    # Currently we only send PADATA-REQ-ENC-PA-REP for AS-REQ requests.
+    def test_fast_tgs_enc_pa_rep(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_TGS_REP,
+                'expected_error_mode': 0,
+                'use_fast': True,
+                'gen_tgt_fn': self.get_user_tgt,
+                'fast_armor': None,
+                'gen_padata_fn': self.generate_enc_pa_rep_padata,
+                'expected_flags': 'enc-pa-rep'
+            }
+        ])
+
+    # Currently we only send PADATA-REQ-ENC-PA-REP for AS-REQ requests.
+    def test_fast_tgs_armor_enc_pa_rep(self):
+        self._run_test_sequence([
+            {
+                'rep_type': KRB_TGS_REP,
+                'expected_error_mode': 0,
+                'use_fast': True,
+                'gen_tgt_fn': self.get_user_tgt,
+                'gen_armor_tgt_fn': self.get_mach_tgt,
+                'fast_armor': FX_FAST_ARMOR_AP_REQUEST,
+                'gen_padata_fn': self.generate_enc_pa_rep_padata,
+                'expected_flags': 'enc-pa-rep'
+            }
+        ])
+
     def test_fast_outer_wrong_realm(self):
         self._run_test_sequence([
             {
@@ -1295,14 +1459,16 @@ class FAST_Tests(KDCBaseTest):
         return fast_padata
 
     def _run_test_sequence(self, test_sequence,
-                           client_account=KDCBaseTest.AccountType.USER):
+                           client_account=KDCBaseTest.AccountType.USER,
+                           client_opts=None):
         if self.strict_checking:
             self.check_kdc_fast_support()
 
         kdc_options_default = str(krb5_asn1.KDCOptions('forwardable,'
                                                        'canonicalize'))
 
-        client_creds = self.get_cached_creds(account_type=client_account)
+        client_creds = self.get_cached_creds(account_type=client_account,
+                                             opts=client_opts)
         target_creds = self.get_service_creds()
         krbtgt_creds = self.get_krbtgt_creds()
 
@@ -1478,6 +1644,9 @@ class FAST_Tests(KDCBaseTest):
                                       padata):
                 return list(padata), req_body
 
+            pac_request = kdc_dict.pop('pac_request', None)
+            expect_pac = kdc_dict.pop('expect_pac', True)
+
             pac_options = kdc_dict.pop('pac_options', '1')  # claims support
 
             kdc_options = kdc_dict.pop('kdc_options', kdc_options_default)
@@ -1580,7 +1749,8 @@ class FAST_Tests(KDCBaseTest):
                     kdc_options=kdc_options,
                     inner_req=inner_req,
                     outer_req=outer_req,
-                    pac_request=True,
+                    expect_pac=expect_pac,
+                    pac_request=pac_request,
                     pac_options=pac_options,
                     fast_ap_options=fast_ap_options,
                     strict_edata_checking=strict_edata_checking,
@@ -1616,7 +1786,8 @@ class FAST_Tests(KDCBaseTest):
                     kdc_options=kdc_options,
                     inner_req=inner_req,
                     outer_req=outer_req,
-                    pac_request=None,
+                    expect_pac=expect_pac,
+                    pac_request=pac_request,
                     pac_options=pac_options,
                     fast_ap_options=fast_ap_options,
                     strict_edata_checking=strict_edata_checking,
@@ -1638,6 +1809,14 @@ class FAST_Tests(KDCBaseTest):
 
                     fast_cookie = None
                     preauth_etype_info2 = None
+
+                    # Check whether the ticket contains a PAC.
+                    ticket = kdc_exchange_dict['rep_ticket_creds']
+                    pac = self.get_ticket_pac(ticket, expect_pac=expect_pac)
+                    if expect_pac:
+                        self.assertIsNotNone(pac)
+                    else:
+                        self.assertIsNone(pac)
                 else:
                     self.check_error_rep(rep, expected_error_mode)
 
@@ -1656,6 +1835,38 @@ class FAST_Tests(KDCBaseTest):
             # Ensure we used all the parameters given to us.
             self.assertEqual({}, kdc_dict)
 
+    def generate_enc_pa_rep_padata(self,
+                                   kdc_exchange_dict,
+                                   callback_dict,
+                                   req_body):
+        padata = self.PA_DATA_create(PADATA_REQ_ENC_PA_REP, b'')
+
+        return [padata], req_body
+
+    def generate_enc_pa_rep_challenge_padata(self,
+                                             kdc_exchange_dict,
+                                             callback_dict,
+                                             req_body):
+        padata, req_body = self.generate_enc_challenge_padata(kdc_exchange_dict,
+                                                              callback_dict,
+                                                              req_body)
+
+        padata.append(self.PA_DATA_create(PADATA_REQ_ENC_PA_REP, b''))
+
+        return padata, req_body
+
+    def generate_enc_pa_rep_timestamp_padata(self,
+                                             kdc_exchange_dict,
+                                             callback_dict,
+                                             req_body):
+        padata, req_body = self.generate_enc_timestamp_padata(kdc_exchange_dict,
+                                                              callback_dict,
+                                                              req_body)
+
+        padata.append(self.PA_DATA_create(PADATA_REQ_ENC_PA_REP, b''))
+
+        return padata, req_body
+
     def generate_fast_armor_auth_data(self):
         auth_data = self.AuthorizationData_create(AD_FX_FAST_ARMOR, b'')
 
diff --git a/python/samba/tests/krb5/kdc_base_test.py b/python/samba/tests/krb5/kdc_base_test.py
index d6cbaac60e0..9c79411d487 100644
--- a/python/samba/tests/krb5/kdc_base_test.py
+++ b/python/samba/tests/krb5/kdc_base_test.py
@@ -598,13 +598,21 @@ class KDCBaseTest(RawKerberosTest):
         creds.set_tgs_supported_enctypes(supported_enctypes)
         creds.set_ap_supported_enctypes(supported_enctypes)
 
-    def creds_set_default_enctypes(self, creds, fast_support=False):
+    def creds_set_default_enctypes(self, creds,
+                                   fast_support=False,
+                                   claims_support=False,
+                                   compound_id_support=False):
         default_enctypes = self.get_default_enctypes()
         supported_enctypes = KerberosCredentials.etypes_to_bits(
             default_enctypes)
 
         if fast_support:
-            supported_enctypes |= KerberosCredentials.fast_supported_bits
+            supported_enctypes |= security.KERB_ENCTYPE_FAST_SUPPORTED
+        if claims_support:
+            supported_enctypes |= security.KERB_ENCTYPE_CLAIMS_SUPPORTED
+        if compound_id_support:
+            supported_enctypes |= (
+                security.KERB_ENCTYPE_COMPOUND_IDENTITY_SUPPORTED)
 
         creds.set_as_supported_enctypes(supported_enctypes)
         creds.set_tgs_supported_enctypes(supported_enctypes)
@@ -919,7 +927,11 @@ class KDCBaseTest(RawKerberosTest):
             # The RODC krbtgt account should support the default enctypes,
             # although it might not have the msDS-SupportedEncryptionTypes
             # attribute.
-            self.creds_set_default_enctypes(creds)
+            self.creds_set_default_enctypes(
+                creds,
+                fast_support=self.kdc_fast_support,
+                claims_support=self.kdc_claims_support,
+                compound_id_support=self.kdc_compound_id_support)
 
             return creds
 
@@ -1010,8 +1022,11 @@ class KDCBaseTest(RawKerberosTest):
             # The krbtgt account should support the default enctypes, although
             # it might not (on Samba) have the msDS-SupportedEncryptionTypes
             # attribute.
-            self.creds_set_default_enctypes(creds,
-                                            fast_support=self.kdc_fast_support)
+            self.creds_set_default_enctypes(
+                creds,
+                fast_support=self.kdc_fast_support,
+                claims_support=self.kdc_claims_support,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list