1*8dd5e09dSSadaf Ebrahimi#!/usr/bin/env python3 2*8dd5e09dSSadaf Ebrahimi 3*8dd5e09dSSadaf Ebrahimiimport os 4*8dd5e09dSSadaf Ebrahimiimport sys 5*8dd5e09dSSadaf Ebrahimiimport time 6*8dd5e09dSSadaf Ebrahimiload_path = '../' 7*8dd5e09dSSadaf Ebrahimiif False: 8*8dd5e09dSSadaf Ebrahimi sys.path.insert(0, load_path) 9*8dd5e09dSSadaf Ebrahimi 10*8dd5e09dSSadaf Ebrahimiimport capng 11*8dd5e09dSSadaf Ebrahimi 12*8dd5e09dSSadaf Ebrahimilast = capng.CAP_LAST_CAP 13*8dd5e09dSSadaf Ebrahimitry: 14*8dd5e09dSSadaf Ebrahimi with open('/proc/sys/kernel/cap_last_cap', 'r') as f: 15*8dd5e09dSSadaf Ebrahimi last = int(f.readline()) 16*8dd5e09dSSadaf Ebrahimiexcept IOError as e: 17*8dd5e09dSSadaf Ebrahimi print("Error opening /proc/sys/kernel/cap_last_cap: {0}".format(e.strerror)) 18*8dd5e09dSSadaf Ebrahimi 19*8dd5e09dSSadaf Ebrahimiprint("Doing basic bit tests...") 20*8dd5e09dSSadaf Ebrahimicapng.capng_clear(capng.CAPNG_SELECT_BOTH) 21*8dd5e09dSSadaf Ebrahimiif capng.capng_have_capabilities(capng.CAPNG_SELECT_BOTH) != capng.CAPNG_NONE: 22*8dd5e09dSSadaf Ebrahimi print("Failed clearing capabilities\n") 23*8dd5e09dSSadaf Ebrahimi sys.exit(1) 24*8dd5e09dSSadaf Ebrahimi 25*8dd5e09dSSadaf Ebrahimicapng.capng_fill(capng.CAPNG_SELECT_BOTH) 26*8dd5e09dSSadaf Ebrahimiif capng.capng_have_capabilities(capng.CAPNG_SELECT_BOTH) != capng.CAPNG_FULL: 27*8dd5e09dSSadaf Ebrahimi print("Failed filling capabilities") 28*8dd5e09dSSadaf Ebrahimi sys.exit(1) 29*8dd5e09dSSadaf Ebrahimi 30*8dd5e09dSSadaf Ebrahimitext = capng.capng_print_caps_numeric(capng.CAPNG_PRINT_BUFFER, capng.CAPNG_SELECT_CAPS) 31*8dd5e09dSSadaf Ebrahimilen = len(text) 32*8dd5e09dSSadaf Ebrahimiif len < 80 and last > 30: 33*8dd5e09dSSadaf Ebrahimi last = 30 34*8dd5e09dSSadaf Ebrahimi 35*8dd5e09dSSadaf Ebrahimiprint("Doing advanced bit tests for %d capabilities...\n" % (last)) 36*8dd5e09dSSadaf Ebrahimifor i in range(last+1): 37*8dd5e09dSSadaf Ebrahimi capng.capng_clear(capng.CAPNG_SELECT_BOTH) 38*8dd5e09dSSadaf Ebrahimi rc = capng.capng_update(capng.CAPNG_ADD, capng.CAPNG_EFFECTIVE, i) 39*8dd5e09dSSadaf Ebrahimi if rc: 40*8dd5e09dSSadaf Ebrahimi print("Failed update test 1") 41*8dd5e09dSSadaf Ebrahimi sys.exit(1) 42*8dd5e09dSSadaf Ebrahimi 43*8dd5e09dSSadaf Ebrahimi rc = capng.capng_have_capability(capng.CAPNG_EFFECTIVE, int(i)) 44*8dd5e09dSSadaf Ebrahimi if rc <= capng.CAPNG_NONE: 45*8dd5e09dSSadaf Ebrahimi print("Failed have capability test 1") 46*8dd5e09dSSadaf Ebrahimi capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS) 47*8dd5e09dSSadaf Ebrahimi sys.exit(1) 48*8dd5e09dSSadaf Ebrahimi 49*8dd5e09dSSadaf Ebrahimi if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS) != capng.CAPNG_PARTIAL: 50*8dd5e09dSSadaf Ebrahimi print("Failed have capabilities test 1") 51*8dd5e09dSSadaf Ebrahimi sys.exit(1) 52*8dd5e09dSSadaf Ebrahimi 53*8dd5e09dSSadaf Ebrahimi capng.capng_fill(capng.CAPNG_SELECT_BOTH) 54*8dd5e09dSSadaf Ebrahimi rc = capng.capng_update(capng.CAPNG_DROP, capng.CAPNG_EFFECTIVE, i) 55*8dd5e09dSSadaf Ebrahimi if rc: 56*8dd5e09dSSadaf Ebrahimi print("Failed update test 3") 57*8dd5e09dSSadaf Ebrahimi sys.exit(1) 58*8dd5e09dSSadaf Ebrahimi 59*8dd5e09dSSadaf Ebrahimi if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS)!=capng.CAPNG_PARTIAL: 60*8dd5e09dSSadaf Ebrahimi print("Failed have capabilities test 3") 61*8dd5e09dSSadaf Ebrahimi capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS) 62*8dd5e09dSSadaf Ebrahimi sys.exit(1) 63*8dd5e09dSSadaf Ebrahimi 64*8dd5e09dSSadaf Ebrahimi rc = capng.capng_update(capng.CAPNG_ADD, capng.CAPNG_EFFECTIVE, i) 65*8dd5e09dSSadaf Ebrahimi if rc: 66*8dd5e09dSSadaf Ebrahimi print("Failed update test 4") 67*8dd5e09dSSadaf Ebrahimi sys.exit(1) 68*8dd5e09dSSadaf Ebrahimi 69*8dd5e09dSSadaf Ebrahimi if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS) != capng.CAPNG_FULL: 70*8dd5e09dSSadaf Ebrahimi print("Failed have capabilities test 4") 71*8dd5e09dSSadaf Ebrahimi capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS) 72*8dd5e09dSSadaf Ebrahimi sys.exit(1) 73*8dd5e09dSSadaf Ebrahimi 74*8dd5e09dSSadaf Ebrahimisys.exit(0) 75