tests/krb5: Allow specifying parameters specific to the inner FAST request body
authorJoseph Sutton <josephsutton@catalyst.net.nz>
Fri, 27 Aug 2021 01:26:45 +0000 (13:26 +1200)
committerJule Anger <janger@samba.org>
Wed, 8 Sep 2021 12:32:11 +0000 (12:32 +0000)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14770
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14817

Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
Reviewed-by: Andreas Schneider <asn@samba.org>
(cherry picked from commit c6d7e19ecfb264c6f79df5a20e830e4ea6fdb340)

python/samba/tests/krb5/fast_tests.py
python/samba/tests/krb5/raw_testcase.py

index 2a423402c7ac4f160c0d3d3b3be76b529a5d4c52..fb5c0fc28f81850a54da47b728ea96955a05a73c 100755 (executable)
@@ -1340,7 +1340,9 @@ class FAST_Tests(KDCBaseTest):
                 auth_data = None
 
             if not use_fast:
+                self.assertNotIn('inner_req', kdc_dict)
                 self.assertNotIn('outer_req', kdc_dict)
+            inner_req = kdc_dict.pop('inner_req', None)
             outer_req = kdc_dict.pop('outer_req', None)
 
             if rep_type == KRB_AS_REP:
@@ -1370,6 +1372,7 @@ class FAST_Tests(KDCBaseTest):
                     armor_tgt=armor_tgt,
                     armor_subkey=armor_subkey,
                     kdc_options=kdc_options,
+                    inner_req=inner_req,
                     outer_req=outer_req)
             else:  # KRB_TGS_REP
                 kdc_exchange_dict = self.tgs_exchange_dict(
@@ -1398,6 +1401,7 @@ class FAST_Tests(KDCBaseTest):
                     auth_data=auth_data,
                     body_checksum_type=None,
                     kdc_options=kdc_options,
+                    inner_req=inner_req,
                     outer_req=outer_req)
 
             repeat = kdc_dict.pop('repeat', 1)
index 4e7891ae89a6209aabb98a060ea064ffb749bc97..15873d69fa6322e8357783baee572403a952639d 100644 (file)
@@ -1553,6 +1553,9 @@ class RawKerberosTest(TestCaseInTempDir):
         expected_error_mode = kdc_exchange_dict['expected_error_mode']
         kdc_options = kdc_exchange_dict['kdc_options']
 
+        # Parameters specific to the inner request body
+        inner_req = kdc_exchange_dict['inner_req']
+
         # Parameters specific to the outer request body
         outer_req = kdc_exchange_dict['outer_req']
 
@@ -1582,6 +1585,12 @@ class RawKerberosTest(TestCaseInTempDir):
             EncAuthorizationData_usage=EncAuthorizationData_usage)
 
         inner_req_body = dict(req_body)
+        if inner_req is not None:
+            for key, value in inner_req.items():
+                if value is not None:
+                    inner_req_body[key] = value
+                else:
+                    del inner_req_body[key]
         if outer_req is not None:
             for key, value in outer_req.items():
                 if value is not None:
@@ -1734,6 +1743,7 @@ class RawKerberosTest(TestCaseInTempDir):
                          armor_subkey=None,
                          auth_data=None,
                          kdc_options='',
+                         inner_req=None,
                          outer_req=None):
         kdc_exchange_dict = {
             'req_msg_type': KRB_AS_REQ,
@@ -1765,6 +1775,7 @@ class RawKerberosTest(TestCaseInTempDir):
             'armor_subkey': armor_subkey,
             'auth_data': auth_data,
             'kdc_options': kdc_options,
+            'inner_req': inner_req,
             'outer_req': outer_req
         }
         if expected_cname_private is not None:
@@ -1802,6 +1813,7 @@ class RawKerberosTest(TestCaseInTempDir):
                           auth_data=None,
                           body_checksum_type=None,
                           kdc_options='',
+                          inner_req=None,
                           outer_req=None):
         kdc_exchange_dict = {
             'req_msg_type': KRB_TGS_REQ,
@@ -1833,6 +1845,7 @@ class RawKerberosTest(TestCaseInTempDir):
             'auth_data': auth_data,
             'authenticator_subkey': authenticator_subkey,
             'kdc_options': kdc_options,
+            'inner_req': inner_req,
             'outer_req': outer_req
         }
         if expected_cname_private is not None: