Blame src/tests/t_dump.py

Packit fd8b60
from k5test import *
Packit fd8b60
from filecmp import cmp
Packit fd8b60
Packit fd8b60
def dump_compare(realm, opt, srcfile):
Packit fd8b60
    mark('dump comparison against %s' % os.path.basename(srcfile))
Packit fd8b60
    realm.run([kdb5_util, 'dump'] + opt + [dumpfile])
Packit fd8b60
    if not cmp(srcfile, dumpfile, False):
Packit fd8b60
        fail('Dump output does not match %s' % srcfile)
Packit fd8b60
Packit fd8b60
Packit fd8b60
def load_dump_check_compare(realm, opt, srcfile):
Packit fd8b60
    mark('load check from %s' % os.path.basename(srcfile))
Packit fd8b60
    realm.run([kdb5_util, 'destroy', '-f'])
Packit fd8b60
    realm.run([kdb5_util, 'load'] + opt + [srcfile])
Packit fd8b60
    realm.run([kadminl, 'getprincs'], expected_msg='user@')
Packit fd8b60
    realm.run([kadminl, 'getprinc', 'nokeys'],
Packit fd8b60
              expected_msg='Number of keys: 0')
Packit fd8b60
    realm.run([kadminl, 'getpols'], expected_msg='testpol')
Packit fd8b60
    dump_compare(realm, opt, srcfile)
Packit fd8b60
Packit fd8b60
Packit fd8b60
for realm in multidb_realms(start_kdc=False):
Packit fd8b60
Packit fd8b60
    # Make sure we can dump and load an ordinary database, and that
Packit fd8b60
    # principals and policies survive a dump/load cycle.
Packit fd8b60
Packit fd8b60
    realm.run([kadminl, 'addpol', 'fred'])
Packit fd8b60
Packit fd8b60
    # Create a dump file.
Packit fd8b60
    dumpfile = os.path.join(realm.testdir, 'dump')
Packit fd8b60
    realm.run([kdb5_util, 'dump', dumpfile])
Packit fd8b60
Packit fd8b60
    # Write additional policy records to the dump.  Use the 1.8 format for
Packit fd8b60
    # one of them, to test retroactive compatibility (for issue #8213).
Packit fd8b60
    f = open('testdir/dump', 'a')
Packit fd8b60
    f.write('policy\tcompat\t0\t0\t3\t4\t5\t0\t0\t0\t0\n')
Packit fd8b60
    f.write('policy\tbarney\t0\t0\t1\t1\t1\t0\t0\t0\t0\t0\t0\t0\t-\t1\t2\t28\t'
Packit fd8b60
            'fd100f5064625f6372656174696f6e404b5242544553542e434f4d00\n')
Packit fd8b60
    f.close()
Packit fd8b60
Packit fd8b60
    # Destroy and load the database; check that the policies exist.
Packit fd8b60
    # Spot-check principal and policy fields.
Packit fd8b60
    mark('reload after dump')
Packit fd8b60
    realm.run([kdb5_util, 'destroy', '-f'])
Packit fd8b60
    realm.run([kdb5_util, 'load', dumpfile])
Packit fd8b60
    out = realm.run([kadminl, 'getprincs'])
Packit fd8b60
    if realm.user_princ not in out or realm.host_princ not in out:
Packit fd8b60
        fail('Missing principal after load')
Packit fd8b60
    out = realm.run([kadminl, 'getprinc', realm.user_princ])
Packit fd8b60
    if 'Expiration date: [never]' not in out or 'MKey: vno 1' not in out:
Packit fd8b60
        fail('Principal has wrong value after load')
Packit fd8b60
    out = realm.run([kadminl, 'getpols'])
Packit fd8b60
    if 'fred\n' not in out or 'barney\n' not in out:
Packit fd8b60
        fail('Missing policy after load')
Packit fd8b60
    realm.run([kadminl, 'getpol', 'compat'],
Packit fd8b60
              expected_msg='Number of old keys kept: 5')
Packit fd8b60
    realm.run([kadminl, 'getpol', 'barney'],
Packit fd8b60
              expected_msg='Number of old keys kept: 1')
Packit fd8b60
Packit fd8b60
    # Dump/load again, and make sure everything is still there.
Packit fd8b60
    mark('second reload')
Packit fd8b60
    realm.run([kdb5_util, 'dump', dumpfile])
Packit fd8b60
    realm.run([kdb5_util, 'load', dumpfile])
Packit fd8b60
    out = realm.run([kadminl, 'getprincs'])
Packit fd8b60
    if realm.user_princ not in out or realm.host_princ not in out:
Packit fd8b60
        fail('Missing principal after load')
Packit fd8b60
    out = realm.run([kadminl, 'getpols'])
Packit fd8b60
    if 'compat\n' not in out or 'fred\n' not in out or 'barney\n' not in out:
Packit fd8b60
        fail('Missing policy after second load')
Packit fd8b60
Packit fd8b60
    srcdumpdir = os.path.join(srctop, 'tests', 'dumpfiles')
Packit fd8b60
    srcdump = os.path.join(srcdumpdir, 'dump')
Packit fd8b60
    srcdump_r18 = os.path.join(srcdumpdir, 'dump.r18')
Packit fd8b60
    srcdump_r13 = os.path.join(srcdumpdir, 'dump.r13')
Packit fd8b60
    srcdump_b7 = os.path.join(srcdumpdir, 'dump.b7')
Packit fd8b60
Packit fd8b60
    # Load a dump file from the source directory.
Packit fd8b60
    realm.run([kdb5_util, 'destroy', '-f'])
Packit fd8b60
    realm.run([kdb5_util, 'load', srcdump])
Packit fd8b60
    realm.run([kdb5_util, 'stash', '-P', 'master'])
Packit fd8b60
Packit fd8b60
    # Dump the resulting DB in each non-iprop format and compare with
Packit fd8b60
    # expected outputs.
Packit fd8b60
    dump_compare(realm, [], srcdump)
Packit fd8b60
    dump_compare(realm, ['-r18'], srcdump_r18)
Packit fd8b60
    dump_compare(realm, ['-r13'], srcdump_r13)
Packit fd8b60
    dump_compare(realm, ['-b7'], srcdump_b7)
Packit fd8b60
Packit fd8b60
    # Load each format of dump, check it, re-dump it, and compare.
Packit fd8b60
    load_dump_check_compare(realm, ['-r18'], srcdump_r18)
Packit fd8b60
    load_dump_check_compare(realm, ['-r13'], srcdump_r13)
Packit fd8b60
    load_dump_check_compare(realm, ['-b7'], srcdump_b7)
Packit fd8b60
Packit fd8b60
success('Dump/load tests')