11d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#!/usr/bin/env python
21d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
31d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichimport os
41d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichimport sys
51d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichimport time
61d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichload_path = '../'
71d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichif False:
81d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich    sys.path.insert(0, load_path)
91d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
101d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichimport capng
111d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichlast = capng.CAP_LAST_CAP
121d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
131d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichprint("Doing basic bit tests...")
141d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichcapng.capng_clear(capng.CAPNG_SELECT_BOTH)
151d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichif capng.capng_have_capabilities(capng.CAPNG_SELECT_BOTH) != capng.CAPNG_NONE:
161d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	print("Failed clearing capabilities\n")
171d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	sys.exit(1)
181d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
191d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichcapng.capng_fill(capng.CAPNG_SELECT_BOTH)
201d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichif capng.capng_have_capabilities(capng.CAPNG_SELECT_BOTH) != capng.CAPNG_FULL:
211d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	print("Failed filling capabilities")
221d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	sys.exit(1)
231d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
241d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichtext = capng.capng_print_caps_numeric(capng.CAPNG_PRINT_BUFFER, capng.CAPNG_SELECT_CAPS)
251d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichlen = len(text)
261d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichif len < 80 and last > 30:
271d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	last = 30
281d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
291d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichprint("Doing advanced bit tests for %d capabilities...\n" % (last))
301d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichfor i in range(last+1):
311d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	capng.capng_clear(capng.CAPNG_SELECT_BOTH)
321d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	rc = capng.capng_update(capng.CAPNG_ADD, capng.CAPNG_EFFECTIVE, i)
331d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if rc:
341d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed update test 1")
351d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
361d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
371d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	rc = capng.capng_have_capability(capng.CAPNG_EFFECTIVE, int(i))
381d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if rc <= capng.CAPNG_NONE:
391d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed have capability test 1")
401d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS)
411d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
421d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
431d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS) != capng.CAPNG_PARTIAL:
441d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed have capabilities test 1")
451d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
461d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
471d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	capng.capng_fill(capng.CAPNG_SELECT_BOTH)
481d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	rc = capng.capng_update(capng.CAPNG_DROP, capng.CAPNG_EFFECTIVE, i)
491d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if rc:
501d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed update test 3")
511d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
521d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
531d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS)!=capng.CAPNG_PARTIAL:
541d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed have capabilities test 3")
551d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS)
561d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
571d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
581d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	rc = capng.capng_update(capng.CAPNG_ADD, capng.CAPNG_EFFECTIVE, i)
591d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if rc:
601d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed update test 4")
611d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
621d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
631d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if capng.capng_have_capabilities(capng.CAPNG_SELECT_CAPS) != capng.CAPNG_FULL:
641d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		print("Failed have capabilities test 4")
651d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		capng.capng_print_caps_numeric(capng.CAPNG_PRINT_STDOUT, capng.CAPNG_SELECT_CAPS)
661d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		sys.exit(1)
671d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
681d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichsys.exit(0)
69