Path: blob/main/crypto/krb5/src/tests/t_changepw.py
34870 views
from k5test import *12# Also listen on a UNIX domain sockets for kpasswd.3unix_conf = {'realms': {'$realm': {4'kdc_listen': '$port0, $testdir/krb5.sock',5'kadmind_listen': '$port1, $testdir/kadmin.sock',6'kpasswd_listen': '$port2, $testdir/kpasswd.sock'}}}7realm = K5Realm(create_host=False,get_creds=False, kdc_conf=unix_conf)8realm.start_kadmind()9realm.prep_kadmin()1011# Mark a principal as expired and change its password through kinit.12mark('password change via kinit')13realm.run([kadminl, 'modprinc', '-pwexpire', '1 day ago', 'user'])14pwinput = password('user') + '\nabcd\nabcd\n'15realm.run([kinit, realm.user_princ], input=pwinput)1617# Regression test for #7868 (preauth options ignored when18# krb5_get_init_creds_password() initiates a password change). This19# time use the REQUIRES_PWCHANGE bit instead of the password20# expiration time.21mark('password change via kinit with FAST')22realm.run([kadminl, 'modprinc', '+needchange', 'user'])23pwinput = 'abcd\nefgh\nefgh\n'24out, trace = realm.run([kinit, '-T', realm.ccache, realm.user_princ],25input=pwinput, return_trace=True)26# Check that FAST was used when getting the kadmin/changepw ticket.27getting_changepw = fast_used_for_changepw = False28for line in trace.splitlines():29if 'Getting initial credentials for user@' in line:30getting_changepw_ticket = False31if 'Setting initial creds service to kadmin/changepw' in line:32getting_changepw_ticket = True33if getting_changepw_ticket and 'Using FAST' in line:34fast_used_for_changepw = True35if not fast_used_for_changepw:36fail('FAST was not used to get kadmin/changepw ticket')3738# Test that passwords specified via kadmin and kpasswd are usable with39# kinit.40mark('password change usability by kinit')41realm.run([kadminl, 'addprinc', '-pw', 'pw1', 'testprinc'])42# Run kpasswd with an active cache to exercise automatic FAST use.43realm.kinit('testprinc', 'pw1')44realm.run([kpasswd, 'testprinc'], input='pw1\npw2\npw2\n')45realm.kinit('testprinc', 'pw2')46realm.run([kdestroy])47realm.run([kpasswd, 'testprinc'], input='pw2\npw3\npw3\n')48realm.kinit('testprinc', 'pw3')49realm.run([kdestroy])50realm.run_kadmin(['cpw', '-pw', 'pw4', 'testprinc'])51realm.kinit('testprinc', 'pw4')52realm.run([kdestroy])53realm.run([kadminl, 'delprinc', 'testprinc'])5455mark('password change over UNIX domain socket')5657unix_cli_conf = {'realms': {'$realm': {58'kdc': '$testdir/krb5.sock',59'admin_server': '$testdir/kadmin.sock',60'kpasswd_server': '$testdir/kpasswd.sock'}}}61unix_cli = realm.special_env('unix_cli', False, krb5_conf=unix_cli_conf)6263realm.run([kadminl, 'addprinc', '-pw', 'pw1', 'testprinc'])64msgs = ('Sending TCP request to UNIX domain socket',)65realm.run([kpasswd, 'testprinc'], input='pw1\npw2\npw2\n', env=unix_cli,66expected_trace=msgs)67realm.run([kadminl, 'delprinc', 'testprinc'])6869success('Password change tests')707172