xref: /aosp_15_r20/external/libcap-ng/bindings/python3/test/capng-test.py (revision 8dd5e09d5faf27a871e8654ddaa2d2af7c696578)
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