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