Imported Upstream version 1.17
[platform/upstream/krb5.git] / src / tests / t_dump.py
1 from k5test import *
2 from filecmp import cmp
3
4 def dump_compare(realm, opt, srcfile):
5     mark('dump comparison against %s' % os.path.basename(srcfile))
6     realm.run([kdb5_util, 'dump'] + opt + [dumpfile])
7     if not cmp(srcfile, dumpfile, False):
8         fail('Dump output does not match %s' % srcfile)
9
10
11 def load_dump_check_compare(realm, opt, srcfile):
12     mark('load check from %s' % os.path.basename(srcfile))
13     realm.run([kdb5_util, 'destroy', '-f'])
14     realm.run([kdb5_util, 'load'] + opt + [srcfile])
15     realm.run([kadminl, 'getprincs'], expected_msg='user@')
16     realm.run([kadminl, 'getprinc', 'nokeys'],
17               expected_msg='Number of keys: 0')
18     realm.run([kadminl, 'getpols'], expected_msg='testpol')
19     dump_compare(realm, opt, srcfile)
20
21
22 for realm in multidb_realms(start_kdc=False):
23
24     # Make sure we can dump and load an ordinary database, and that
25     # principals and policies survive a dump/load cycle.
26
27     realm.run([kadminl, 'addpol', 'fred'])
28
29     # Create a dump file.
30     dumpfile = os.path.join(realm.testdir, 'dump')
31     realm.run([kdb5_util, 'dump', dumpfile])
32
33     # Write additional policy records to the dump.  Use the 1.8 format for
34     # one of them, to test retroactive compatibility (for issue #8213).
35     f = open('testdir/dump', 'a')
36     f.write('policy\tcompat\t0\t0\t3\t4\t5\t0\t0\t0\t0\n')
37     f.write('policy\tbarney\t0\t0\t1\t1\t1\t0\t0\t0\t0\t0\t0\t0\t-\t1\t2\t28\t'
38             'fd100f5064625f6372656174696f6e404b5242544553542e434f4d00\n')
39     f.close()
40
41     # Destroy and load the database; check that the policies exist.
42     # Spot-check principal and policy fields.
43     mark('reload after dump')
44     realm.run([kdb5_util, 'destroy', '-f'])
45     realm.run([kdb5_util, 'load', dumpfile])
46     out = realm.run([kadminl, 'getprincs'])
47     if realm.user_princ not in out or realm.host_princ not in out:
48         fail('Missing principal after load')
49     out = realm.run([kadminl, 'getprinc', realm.user_princ])
50     if 'Expiration date: [never]' not in out or 'MKey: vno 1' not in out:
51         fail('Principal has wrong value after load')
52     out = realm.run([kadminl, 'getpols'])
53     if 'fred\n' not in out or 'barney\n' not in out:
54         fail('Missing policy after load')
55     realm.run([kadminl, 'getpol', 'compat'],
56               expected_msg='Number of old keys kept: 5')
57     realm.run([kadminl, 'getpol', 'barney'],
58               expected_msg='Number of old keys kept: 1')
59
60     # Dump/load again, and make sure everything is still there.
61     mark('second reload')
62     realm.run([kdb5_util, 'dump', dumpfile])
63     realm.run([kdb5_util, 'load', dumpfile])
64     out = realm.run([kadminl, 'getprincs'])
65     if realm.user_princ not in out or realm.host_princ not in out:
66         fail('Missing principal after load')
67     out = realm.run([kadminl, 'getpols'])
68     if 'compat\n' not in out or 'fred\n' not in out or 'barney\n' not in out:
69         fail('Missing policy after second load')
70
71     srcdumpdir = os.path.join(srctop, 'tests', 'dumpfiles')
72     srcdump = os.path.join(srcdumpdir, 'dump')
73     srcdump_r18 = os.path.join(srcdumpdir, 'dump.r18')
74     srcdump_r13 = os.path.join(srcdumpdir, 'dump.r13')
75     srcdump_b7 = os.path.join(srcdumpdir, 'dump.b7')
76     srcdump_ov = os.path.join(srcdumpdir, 'dump.ov')
77
78     # Load a dump file from the source directory.
79     realm.run([kdb5_util, 'destroy', '-f'])
80     realm.run([kdb5_util, 'load', srcdump])
81     realm.run([kdb5_util, 'stash', '-P', 'master'])
82
83     # Dump the resulting DB in each non-iprop format and compare with
84     # expected outputs.
85     dump_compare(realm, [], srcdump)
86     dump_compare(realm, ['-r18'], srcdump_r18)
87     dump_compare(realm, ['-r13'], srcdump_r13)
88     dump_compare(realm, ['-b7'], srcdump_b7)
89     dump_compare(realm, ['-ov'], srcdump_ov)
90
91     # Load each format of dump, check it, re-dump it, and compare.
92     load_dump_check_compare(realm, ['-r18'], srcdump_r18)
93     load_dump_check_compare(realm, ['-r13'], srcdump_r13)
94     load_dump_check_compare(realm, ['-b7'], srcdump_b7)
95
96     # Loading the last (-b7 format) dump won't have loaded the
97     # per-principal kadm data.  Load that incrementally with -ov.
98     realm.run([kadminl, 'getprinc', 'user'], expected_msg='Policy: [none]')
99     realm.run([kdb5_util, 'load', '-update', '-ov', srcdump_ov])
100     realm.run([kadminl, 'getprinc', 'user'], expected_msg='Policy: testpol')
101
102 success('Dump/load tests')