diff options
| author | Cy Schubert <cy@FreeBSD.org> | 2017-07-07 17:03:42 +0000 |
|---|---|---|
| committer | Cy Schubert <cy@FreeBSD.org> | 2017-07-07 17:03:42 +0000 |
| commit | 33a9b234e7087f573ef08cd7318c6497ba08b439 (patch) | |
| tree | d0ea40ad3bf5463a3c55795977c71bcb7d781b4b /src/tests/t_princflags.py | |
Diffstat (limited to 'src/tests/t_princflags.py')
| -rwxr-xr-x | src/tests/t_princflags.py | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/src/tests/t_princflags.py b/src/tests/t_princflags.py new file mode 100755 index 000000000000..6378ef94fce2 --- /dev/null +++ b/src/tests/t_princflags.py @@ -0,0 +1,139 @@ +#!/usr/bin/python +from k5test import * +from princflags import * +import re + +realm = K5Realm(create_host=False, get_creds=False) + +# Regex pattern to match an empty attribute line from kadmin getprinc +emptyattr = re.compile('^Attributes:$', re.MULTILINE) + + +# Regex pattern to match a kadmin getprinc output for a flag tuple +def attr_pat(ftuple): + return re.compile('^Attributes: ' + ftuple.flagname() + '$', + re.MULTILINE) + + +# Test one flag tuple for kadmin ank. +def one_kadmin_flag(ftuple): + pat = attr_pat(ftuple) + realm.run([kadminl, 'ank', ftuple.setspec(), + '-pw', 'password', 'test']) + out = realm.run([kadminl, 'getprinc', 'test']) + if not pat.search(out): + fail('Failed to set flag ' + ftuple.flagname()) + + realm.run([kadminl, 'modprinc', ftuple.clearspec(), 'test']) + out = realm.run([kadminl, 'getprinc', 'test']) + if not emptyattr.search(out): + fail('Failed to clear flag ' + ftuple.flagname()) + realm.run([kadminl, 'delprinc', 'test']) + + +# Generate a custom kdc.conf with default_principal_flags set +# according to ftuple. +def genkdcconf(ftuple): + d = { 'realms': { '$realm': { + 'default_principal_flags': ftuple.setspec() + }}} + return realm.special_env('tmp', True, kdc_conf=d) + + +# Test one ftuple for kdc.conf default_principal_flags. +def one_kdcconf(ftuple): + e = genkdcconf(ftuple) + pat = attr_pat(ftuple) + realm.run([kadminl, 'ank', '-pw', 'password', 'test'], env=e) + out = realm.run([kadminl, 'getprinc', 'test']) + if not pat.search(out): + fail('Failed to set flag ' + ftuple.flagname() + ' via kdc.conf') + + realm.run([kadminl, 'delprinc', 'test']) + + +# Principal name for kadm5.acl line +def ftuple2pname(ftuple, doset): + pname = 'set_' if doset else 'clear_' + return pname + ftuple.flagname() + + +# Translate a strconv ftuple to a spec string for kadmin. +def ftuple2kadm_spec(ftuple, doset): + ktuple = kadmin_itable[ftuple.flag] + if ktuple.invert != ftuple.invert: + # Could do: + # doset = not doset + # but this shouldn't happen. + raise ValueError + return ktuple.spec(doset) + + +# Generate a line for kadm5.acl. +def acl_line(ftuple, doset): + pname = ftuple2pname(ftuple, doset) + spec = ftuple.spec(doset) + return "%s * %s %s\n" % (realm.admin_princ, pname, spec) + + +# Test one kadm5.acl line for a ftuple. +def one_aclcheck(ftuple, doset): + pname = ftuple2pname(ftuple, doset) + pat = attr_pat(ftuple) + outname = ftuple.flagname() + # Create the principal and check that the flag is correctly set or + # cleared. + realm.run_kadmin(['ank', '-pw', 'password', pname]) + out = realm.run([kadminl, 'getprinc', pname]) + if doset: + if not pat.search(out): + fail('Failed to set flag ' + outname + ' via kadm5.acl') + else: + if not emptyattr.search(out): + fail('Failed to clear flag ' + outname + ' via kadm5.acl') + # If acl forces flag to be set, try to clear it, and vice versa. + spec = ftuple2kadm_spec(ftuple, not doset) + realm.run_kadmin(['modprinc', spec, pname]) + out = realm.run([kadminl, 'getprinc', pname]) + if doset: + if not pat.search(out): + fail('Failed to keep flag ' + outname + ' set') + else: + if not emptyattr.search(out): + fail('Failed to keep flag ' + outname + ' clear') + + +# Set all flags simultaneously, even the ones that aren't defined yet. +def lamptest(): + pat = re.compile('^Attributes: ' + + ' '.join(flags2namelist(0xffffffff)) + + '$', re.MULTILINE) + realm.run([kadminl, 'ank', '-pw', 'password', '+0xffffffff', 'test']) + out = realm.run([kadminl, 'getprinc', 'test']) + if not pat.search(out): + fail('Failed to simultaenously set all flags') + realm.run([kadminl, 'delprinc', 'test']) + + +for ftuple in kadmin_ftuples: + one_kadmin_flag(ftuple) + +for ftuple in strconv_ftuples: + one_kdcconf(ftuple) + +f = open(os.path.join(realm.testdir, 'acl'), 'w') +for ftuple in strconv_ftuples: + f.write(acl_line(ftuple, True)) + f.write(acl_line(ftuple, False)) +f.close() + +realm.start_kadmind() +realm.prep_kadmin() + +for ftuple in strconv_ftuples: + one_aclcheck(ftuple, True) + one_aclcheck(ftuple, False) + +lamptest() + +success('KDB principal flags') |
