Path: blob/main/crypto/krb5/src/tests/gssapi/t_credstore.py
34907 views
from k5test import *12realm = K5Realm()34mark('gss_store_cred_into() and ccache/keytab')5storagecache = 'FILE:' + os.path.join(realm.testdir, 'user_store')6servicekeytab = os.path.join(realm.testdir, 'kt')7service_cs = 'service/cs@%s' % realm.realm8realm.addprinc(service_cs)9realm.extract_keytab(service_cs, servicekeytab)10realm.kinit(service_cs, None, ['-k', '-t', servicekeytab])11msgs = ('Storing %s -> %s in MEMORY:' % (service_cs, realm.krbtgt_princ),12'Moving ccache MEMORY:',13'Retrieving %s from FILE:%s' % (service_cs, servicekeytab))14realm.run(['./t_credstore', '-s', 'p:' + service_cs, 'ccache', storagecache,15'keytab', servicekeytab], expected_trace=msgs)1617mark('matching')18scc = 'FILE:' + os.path.join(realm.testdir, 'service_cache')19realm.kinit(realm.host_princ, flags=['-k', '-c', scc])20realm.run(['./t_credstore', '-i', 'p:' + realm.host_princ, 'ccache', scc])21realm.run(['./t_credstore', '-i', 'h:host', 'ccache', scc])22realm.run(['./t_credstore', '-i', 'h:host@' + hostname, 'ccache', scc])23realm.run(['./t_credstore', '-i', 'p:wrong', 'ccache', scc],24expected_code=1, expected_msg='does not match desired name')25realm.run(['./t_credstore', '-i', 'h:host@-nomatch-', 'ccache', scc],26expected_code=1, expected_msg='does not match desired name')27realm.run(['./t_credstore', '-i', 'h:svc', 'ccache', scc],28expected_code=1, expected_msg='does not match desired name')2930mark('matching (fallback)')31canonname = canonicalize_hostname(hostname)32if canonname != hostname:33canonprinc = 'host/%s@%s' % (canonname, realm.realm)34realm.addprinc(canonprinc)35realm.extract_keytab(canonprinc, realm.keytab)36realm.kinit(canonprinc, flags=['-k', '-c', scc])37realm.run(['./t_credstore', '-i', 'h:host', 'ccache', scc])38realm.run(['./t_credstore', '-i', 'h:host@' + hostname, 'ccache', scc])39realm.run(['./t_credstore', '-i', 'h:host@' + canonname, 'ccache', scc])40realm.run(['./t_credstore', '-i', 'p:' + canonprinc, 'ccache', scc])41realm.run(['./t_credstore', '-i', 'p:' + realm.host_princ, 'ccache', scc],42expected_code=1, expected_msg='does not match desired name')43realm.run(['./t_credstore', '-i', 'h:host@-nomatch-', 'ccache', scc],44expected_code=1, expected_msg='does not match desired name')45else:46skipped('fallback matching test',47'%s does not canonicalize to a different name' % hostname)4849mark('rcache')50# t_credstore -r should produce a replay error normally, but not with51# rcache set to "none:".52realm.run(['./t_credstore', '-r', '-a', 'p:' + realm.host_princ],53expected_code=1,54expected_msg='gss_accept_sec_context(2): Request is a replay')55realm.run(['./t_credstore', '-r', '-a', 'p:' + realm.host_princ,56'rcache', 'none:'])5758# Test password feature.59mark('password')60# Must be used with a desired name.61realm.run(['./t_credstore', '-i', '', 'password', 'pw'],62expected_code=1, expected_msg='An invalid name was supplied')63# Must not be used with a client keytab.64realm.run(['./t_credstore', '-i', 'u:' + realm.user_princ,65'password', 'pw', 'client_keytab', servicekeytab],66expected_code=1, expected_msg='Credential usage type is unknown')67# Must not be used with a ccache.68realm.run(['./t_credstore', '-i', 'u:' + realm.user_princ,69'password', 'pw', 'ccache', storagecache],70expected_code=1, expected_msg='Credential usage type is unknown')71# Must be acquiring initiator credentials.72realm.run(['./t_credstore', '-a', 'u:' + realm.user_princ, 'password', 'pw'],73expected_code=1, expected_msg='Credential usage type is unknown')74msgs = ('Getting initial credentials for %s' % realm.user_princ,75'Storing %s -> %s in MEMORY:' % (realm.user_princ, realm.krbtgt_princ),76'Destroying ccache MEMORY:')77realm.run(['./t_credstore', '-i', 'u:' + realm.user_princ, 'password',78password('user')], expected_trace=msgs)7980mark('verify')81msgs = ('Getting initial credentials for %s' % realm.user_princ,82'Storing %s -> %s in MEMORY:' % (realm.user_princ, realm.krbtgt_princ),83'Getting credentials %s -> %s' % (realm.user_princ, service_cs),84'Storing %s -> %s in MEMORY:' % (realm.user_princ, service_cs))85realm.run(['./t_credstore', '-i', 'u:' + realm.user_princ, 'password',86password('user'), 'keytab', servicekeytab, 'verify',87service_cs], expected_trace=msgs)88# Try again with verification failing due to key mismatch.89realm.run([kadminl, 'cpw', '-randkey', service_cs])90realm.run([kadminl, 'modprinc', '-kvno', '1', service_cs])91errmsg = 'Cannot decrypt ticket for %s' % service_cs92realm.run(['./t_credstore', '-i', 'u:' + realm.user_princ, 'password',93password('user'), 'keytab', servicekeytab, 'verify',94service_cs], expected_code=1, expected_msg=errmsg)9596success('Credential store tests')979899