xref: /aosp_15_r20/external/selinux/mcstrans/share/util/mlstrans-test (revision 2d543d20722ada2425b5bdab9d0d1d29470e7bba)
1*2d543d20SAndroid Build Coastguard Worker#!/usr/bin/python3 -E
2*2d543d20SAndroid Build Coastguard Workerimport sys
3*2d543d20SAndroid Build Coastguard Workerimport selinux
4*2d543d20SAndroid Build Coastguard Worker
5*2d543d20SAndroid Build Coastguard Worker
6*2d543d20SAndroid Build Coastguard Workerverbose = 0
7*2d543d20SAndroid Build Coastguard Workererrors = 0
8*2d543d20SAndroid Build Coastguard Worker
9*2d543d20SAndroid Build Coastguard Worker
10*2d543d20SAndroid Build Coastguard Workerdef untrans(trans, val):
11*2d543d20SAndroid Build Coastguard Worker    global errors, verbose
12*2d543d20SAndroid Build Coastguard Worker    (rc, raw) = selinux.selinux_trans_to_raw_context(trans)
13*2d543d20SAndroid Build Coastguard Worker    if raw != val:
14*2d543d20SAndroid Build Coastguard Worker        print("untrans: '%s' -> '%s' != '%s' FAILED" % (trans, raw, val))
15*2d543d20SAndroid Build Coastguard Worker        errors += 1
16*2d543d20SAndroid Build Coastguard Worker    else:
17*2d543d20SAndroid Build Coastguard Worker        if verbose:
18*2d543d20SAndroid Build Coastguard Worker            print("untrans: '%s' -> '%s' == '%s' SUCCESS" % (trans, raw, val))
19*2d543d20SAndroid Build Coastguard Worker
20*2d543d20SAndroid Build Coastguard Worker
21*2d543d20SAndroid Build Coastguard Workerdef trans(raw, val):
22*2d543d20SAndroid Build Coastguard Worker    global errors, verbose
23*2d543d20SAndroid Build Coastguard Worker    (rc, trans) = selinux.selinux_raw_to_trans_context(raw)
24*2d543d20SAndroid Build Coastguard Worker    if trans != val:
25*2d543d20SAndroid Build Coastguard Worker        print("trans: '%s' -> '%s' != '%s' FAILED" % (raw, trans, val))
26*2d543d20SAndroid Build Coastguard Worker        errors += 1
27*2d543d20SAndroid Build Coastguard Worker    else:
28*2d543d20SAndroid Build Coastguard Worker        if verbose:
29*2d543d20SAndroid Build Coastguard Worker            print("trans: '%s' -> '%s' == '%s' SUCCESS" % (raw, trans, val))
30*2d543d20SAndroid Build Coastguard Worker
31*2d543d20SAndroid Build Coastguard Worker
32*2d543d20SAndroid Build Coastguard Workerif len(sys.argv) > 1 and sys.argv[1] == "-v":
33*2d543d20SAndroid Build Coastguard Worker    verbose = 1
34*2d543d20SAndroid Build Coastguard Worker
35*2d543d20SAndroid Build Coastguard Workerfor arg in sys.argv[1:]:
36*2d543d20SAndroid Build Coastguard Worker    f = open(arg, 'r')
37*2d543d20SAndroid Build Coastguard Worker    for line in f:
38*2d543d20SAndroid Build Coastguard Worker        if line.startswith('#'):
39*2d543d20SAndroid Build Coastguard Worker            continue
40*2d543d20SAndroid Build Coastguard Worker        if not line.strip():
41*2d543d20SAndroid Build Coastguard Worker            continue
42*2d543d20SAndroid Build Coastguard Worker        line = line.rstrip('\n')
43*2d543d20SAndroid Build Coastguard Worker        if line.find("==") != -1:
44*2d543d20SAndroid Build Coastguard Worker            t, r = line.split("==")
45*2d543d20SAndroid Build Coastguard Worker            untrans("a:b:c:" + t, "a:b:c:" + r)
46*2d543d20SAndroid Build Coastguard Worker            trans("a:b:c:" + r, "a:b:c:" + t)
47*2d543d20SAndroid Build Coastguard Worker        else:
48*2d543d20SAndroid Build Coastguard Worker            t, r = line.split("=")
49*2d543d20SAndroid Build Coastguard Worker            untrans("a:b:c:" + t, "a:b:c:" + r)
50*2d543d20SAndroid Build Coastguard Worker    f.close()
51*2d543d20SAndroid Build Coastguard Worker
52*2d543d20SAndroid Build Coastguard Workers = "s"
53*2d543d20SAndroid Build Coastguard Workerif errors == 1:
54*2d543d20SAndroid Build Coastguard Worker    s = ""
55*2d543d20SAndroid Build Coastguard Workerprint("mlstrans-test done with %d error%s" % (errors, s))
56*2d543d20SAndroid Build Coastguard Worker
57*2d543d20SAndroid Build Coastguard Workersys.exit(errors)
58