Blame src/tests/gssapi/t_negoex.py

Packit fd8b60
from k5test import *
Packit fd8b60
Packit fd8b60
# The next arc after 2.25 is supposed to be a single-integer UUID, but
Packit fd8b60
# since our gss_str_to_oid() can't handle arc values that don't fit in
Packit fd8b60
# an unsigned long, we use random unsigned 32-bit integers instead.
Packit fd8b60
# The final octet if the OID encoding will be used to identify the
Packit fd8b60
# mechanism when changing the behavior of just one mech.
Packit fd8b60
nxtest_oid1 = '2.25.1414534758' # final octet is 102 (0x66)
Packit fd8b60
nxtest_oid2 = '2.25.1175737388' # final octet is 44 (0x2C)
Packit fd8b60
nxtest_path = os.path.join(buildtop, 'plugins', 'gssapi', 'negoextest',
Packit fd8b60
                           'gss_negoextest.so')
Packit fd8b60
Packit fd8b60
# Test gss_add_cred().
Packit fd8b60
realm = K5Realm(create_kdb=False)
Packit fd8b60
with open(realm.gss_mech_config, 'w') as f:
Packit fd8b60
    f.write('negoextest %s %s\n' % (nxtest_oid1, nxtest_path))
Packit fd8b60
    f.write('negoextest %s %s\n' % (nxtest_oid2, nxtest_path))
Packit fd8b60
Packit fd8b60
def test(envvars, **kw):
Packit fd8b60
    # Python 3.5: e = {**realm.env, **vars}
Packit fd8b60
    e = realm.env.copy()
Packit fd8b60
    e.update(envvars)
Packit fd8b60
    realm.run(['./t_context', 'h:host'], env=e, **kw)
Packit fd8b60
Packit fd8b60
# Test varying numbers of hops, and spot-check that messages are sent
Packit fd8b60
# in the appropriate sequence.
Packit fd8b60
Packit fd8b60
mark('One hop')
Packit fd8b60
msgs = ('sending [0]INITIATOR_NEGO: c0a28569-66ac-0000-0000-000000000000 '
Packit fd8b60
        'd1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [1]INITIATOR_META_DATA: c0a28569-66ac',
Packit fd8b60
        'sending [2]INITIATOR_META_DATA: d1b08469-2ca8',
Packit fd8b60
        'sending [3]AP_REQUEST: c0a28569-66ac',
Packit fd8b60
        'sending [4]VERIFY: c0a28569-66ac',
Packit fd8b60
        'received [0]INITIATOR_NEGO: c0a28569-66ac-0000-0000-000000000000 '
Packit fd8b60
        'd1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'received [1]INITIATOR_META_DATA: c0a28569-66ac',
Packit fd8b60
        'received [2]INITIATOR_META_DATA: d1b08469-2ca8',
Packit fd8b60
        'received [3]AP_REQUEST: c0a28569-66ac',
Packit fd8b60
        'received [4]VERIFY: c0a28569-66ac',
Packit fd8b60
        'sending [5]ACCEPTOR_NEGO: c0a28569-66ac-0000-0000-000000000000 '
Packit fd8b60
        'd1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [6]ACCEPTOR_META_DATA: c0a28569-66ac',
Packit fd8b60
        'sending [7]ACCEPTOR_META_DATA: d1b08469-2ca8',
Packit fd8b60
        'sending [8]VERIFY: c0a28569-66ac',
Packit fd8b60
        'received [5]ACCEPTOR_NEGO: c0a28569-66ac-0000-0000-000000000000 '
Packit fd8b60
        'd1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'received [6]ACCEPTOR_META_DATA: c0a28569-66ac',
Packit fd8b60
        'received [7]ACCEPTOR_META_DATA: d1b08469-2ca8',
Packit fd8b60
        'received [8]VERIFY: c0a28569-66ac')
Packit fd8b60
test({'HOPS': '1'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('Two hops')
Packit fd8b60
msgs = ('sending [7]CHALLENGE', 'sending [8]VERIFY', 'received [8]VERIFY',
Packit fd8b60
        'sending [9]VERIFY')
Packit fd8b60
test({'HOPS': '2'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('Three hops')
Packit fd8b60
msgs = ('sending [8]AP_REQUEST', 'sending [9]VERIFY', 'received [8]AP_REQUEST',
Packit fd8b60
        'sending [10]VERIFY')
Packit fd8b60
test({'HOPS': '3'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('Four hops')
Packit fd8b60
msgs = ('sending [9]CHALLENGE', 'sending [10]VERIFY', 'received [9]CHALLENGE',
Packit fd8b60
        'sending [11]VERIFY')
Packit fd8b60
test({'HOPS': '4'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('Early keys, three hops')
Packit fd8b60
msgs = ('sending [4]VERIFY', 'sending [9]VERIFY', 'sending [10]AP_REQUEST')
Packit fd8b60
test({'HOPS': '3', 'KEY': 'always'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('Early keys, four hops')
Packit fd8b60
msgs = ('sending [4]VERIFY', 'sending [9]VERIFY', 'sending [10]AP_REQUEST',
Packit fd8b60
        'sending [11]CHALLENGE')
Packit fd8b60
test({'HOPS': '4', 'KEY': 'always'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('No keys')
Packit fd8b60
test({'KEY': 'never'}, expected_code=1, expected_msg='No NegoEx verify key')
Packit fd8b60
Packit fd8b60
mark('No optimistic token')
Packit fd8b60
msgs = ('sending [3]ACCEPTOR_NEGO', 'sending [6]AP_REQUEST',
Packit fd8b60
        'sending [7]VERIFY', 'sending [8]VERIFY')
Packit fd8b60
test({'NEGOEX_NO_OPTIMISTIC_TOKEN': ''}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('First mech initiator query fail')
Packit fd8b60
msgs = ('sending [0]INITIATOR_NEGO: d1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [2]AP_REQUEST', 'sending [3]VERIFY',
Packit fd8b60
        'sending [4]ACCEPTOR_NEGO: d1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [6]VERIFY')
Packit fd8b60
test({'INIT_QUERY_FAIL': '102'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('First mech acceptor query fail')
Packit fd8b60
msgs = ('sending [0]INITIATOR_NEGO: c0a28569-66ac-0000-0000-000000000000 '
Packit fd8b60
        'd1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [3]AP_REQUEST: c0a28569-66ac',
Packit fd8b60
        'sending [4]VERIFY: c0a28569-66ac',
Packit fd8b60
        'sending [5]ACCEPTOR_NEGO: d1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [7]AP_REQUEST: d1b08469-2ca8',
Packit fd8b60
        'sending [8]VERIFY: d1b08469-2ca8',
Packit fd8b60
        'sending [9]VERIFY: d1b08469-2ca8')
Packit fd8b60
test({'ACCEPT_QUERY_FAIL': '102'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
# Same messages as previous test.
Packit fd8b60
mark('First mech acceptor exchange fail')
Packit fd8b60
test({'ACCEPT_EXCHANGE_FAIL': '102'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
# Fail the optimistic mech's gss_exchange_meta_data() in the
Packit fd8b60
# initiator.  Since the acceptor has effectively selected the
Packit fd8b60
# optimistic mech, this causes the authentication to fail.
Packit fd8b60
mark('First mech initiator exchange fail, one hop')
Packit fd8b60
test({'HOPS': '1', 'INIT_EXCHANGE_FAIL': '102'}, expected_code=1,
Packit fd8b60
     expected_msg='No mutually supported NegoEx authentication schemes')
Packit fd8b60
mark('First mech initiator exchange fail, two hops, early keys')
Packit fd8b60
test({'HOPS': '2', 'INIT_EXCHANGE_FAIL': '102', 'KEY': 'always'},
Packit fd8b60
     expected_code=1,
Packit fd8b60
     expected_msg='No mutually supported NegoEx authentication schemes')
Packit fd8b60
mark('First mech initiator exchange fail, two hops')
Packit fd8b60
test({'HOPS': '2', 'INIT_EXCHANGE_FAIL': '102'}, expected_code=1,
Packit fd8b60
     expected_msg='No mutually supported NegoEx authentication schemes')
Packit fd8b60
Packit fd8b60
mark('First mech init_sec_context fail')
Packit fd8b60
msgs = ('sending [0]INITIATOR_NEGO: d1b08469-2ca8-0000-0000-000000000000',
Packit fd8b60
        'sending [2]AP_REQUEST', 'sending [3]VERIFY', 'sending [6]VERIFY')
Packit fd8b60
test({'INIT_FAIL': '102'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('First mech accept_sec_context fail')
Packit fd8b60
test({'HOPS': '2', 'ACCEPT_FAIL': '102'}, expected_code=1,
Packit fd8b60
     expected_msg='failure from acceptor')
Packit fd8b60
Packit fd8b60
mark('ALERT from acceptor to initiator')
Packit fd8b60
msgs = ('sending [3]AP_REQUEST', 'sending [4]VERIFY', 'sending [8]CHALLENGE',
Packit fd8b60
        'sending [9]ALERT', 'received [9]ALERT', 'sending [10]AP_REQUEST',
Packit fd8b60
        'sending [11]VERIFY', 'sending [12]VERIFY')
Packit fd8b60
test({'HOPS': '3', 'KEY': 'init-always'}, expected_trace=msgs)
Packit fd8b60
Packit fd8b60
mark('ALERT from initiator to acceptor')
Packit fd8b60
msgs = ('sending [3]AP_REQUEST', 'sending [7]CHALLENGE', 'sending [8]VERIFY',
Packit fd8b60
        'sending [9]AP_REQUEST', 'sending [10]ALERT', 'received [10]ALERT',
Packit fd8b60
        'sending [11]CHALLENGE', 'sending [12]VERIFY', 'sending [13]VERIFY')
Packit fd8b60
test({'HOPS': '4', 'KEY': 'accept-always'}, expected_trace=())
Packit fd8b60
Packit fd8b60
success('NegoEx tests')