|
Packit |
366192 |
#!/usr/bin/env python
|
|
Packit |
366192 |
from __future__ import print_function
|
|
Packit |
366192 |
|
|
Packit |
366192 |
import sys
|
|
Packit |
366192 |
import getopt
|
|
Packit |
366192 |
import semanage
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
usage = "\
|
|
Packit |
366192 |
Choose one of the following tests:\n\
|
|
Packit |
366192 |
-m for modules\n\
|
|
Packit |
366192 |
-u for users\n\
|
|
Packit |
366192 |
-U for add user (warning this will write!)\n\
|
|
Packit |
366192 |
-s for seusers\n\
|
|
Packit |
366192 |
-S for add seuser (warning this will write!)\n\
|
|
Packit |
366192 |
-p for ports\n\
|
|
Packit |
366192 |
-P for add port (warning this will write!)\n\
|
|
Packit |
366192 |
-f for file contexts \n\
|
|
Packit |
366192 |
-F for add file context (warning this will write!)\n\
|
|
Packit |
366192 |
-i for network interfaces \n\
|
|
Packit |
366192 |
-I for add network interface (warning this will write!)\n\
|
|
Packit |
366192 |
-b for booleans \n\
|
|
Packit |
366192 |
-B for add boolean (warning this will write!)\n\
|
|
Packit |
366192 |
-c for aCtive booleans\n\
|
|
Packit |
366192 |
-C for set aCtive boolean (warning this will write!)\n\n\
|
|
Packit |
366192 |
-n for network nodes\n\
|
|
Packit |
366192 |
-N for add node (warning this will write!)\n\n\
|
|
Packit |
366192 |
Other options:\n\
|
|
Packit |
366192 |
-h for this help\n\
|
|
Packit |
366192 |
-v for verbose output\
|
|
Packit |
366192 |
"
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
class Usage(Exception):
|
|
Packit |
366192 |
def __init__(self, msg):
|
|
Packit |
366192 |
Exception.__init__(self)
|
|
Packit |
366192 |
self.msg = msg
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
class Status(Exception):
|
|
Packit |
366192 |
def __init__(self, msg):
|
|
Packit |
366192 |
Exception.__init__(self)
|
|
Packit |
366192 |
self.msg = msg
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
class Error(Exception):
|
|
Packit |
366192 |
def __init__(self, msg):
|
|
Packit |
366192 |
Exception.__init__(self)
|
|
Packit |
366192 |
self.msg = msg
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
class Tests:
|
|
Packit |
366192 |
def __init__(self):
|
|
Packit |
366192 |
self.all = False
|
|
Packit |
366192 |
self.users = False
|
|
Packit |
366192 |
self.writeuser = False
|
|
Packit |
366192 |
self.seusers = False
|
|
Packit |
366192 |
self.writeseuser = False
|
|
Packit |
366192 |
self.ports = False
|
|
Packit |
366192 |
self.writeport = False
|
|
Packit |
366192 |
self.fcontexts = False
|
|
Packit |
366192 |
self.writefcontext = False
|
|
Packit |
366192 |
self.interfaces = False
|
|
Packit |
366192 |
self.writeinterface = False
|
|
Packit |
366192 |
self.booleans = False
|
|
Packit |
366192 |
self.writeboolean = False
|
|
Packit |
366192 |
self.abooleans = False
|
|
Packit |
366192 |
self.writeaboolean = False
|
|
Packit |
366192 |
self.nodes = False
|
|
Packit |
366192 |
self.writenode = False
|
|
Packit |
366192 |
self.modules = False
|
|
Packit |
366192 |
self.verbose = False
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def selected(self):
|
|
Packit |
366192 |
return (
|
|
Packit |
366192 |
self.all or
|
|
Packit |
366192 |
self.users or
|
|
Packit |
366192 |
self.modules or
|
|
Packit |
366192 |
self.seusers or
|
|
Packit |
366192 |
self.ports or
|
|
Packit |
366192 |
self.fcontexts or
|
|
Packit |
366192 |
self.interfaces or
|
|
Packit |
366192 |
self.booleans or
|
|
Packit |
366192 |
self.abooleans or
|
|
Packit |
366192 |
self.writeuser or
|
|
Packit |
366192 |
self.writeseuser or
|
|
Packit |
366192 |
self.writeport or
|
|
Packit |
366192 |
self.writefcontext or
|
|
Packit |
366192 |
self.writeinterface or
|
|
Packit |
366192 |
self.writeboolean or
|
|
Packit |
366192 |
self.writeaboolean or
|
|
Packit |
366192 |
self.nodes or
|
|
Packit |
366192 |
self.writenode)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def run(self, handle):
|
|
Packit |
366192 |
if self.users or self.all:
|
|
Packit |
366192 |
self.test_users(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.seusers or self.all:
|
|
Packit |
366192 |
self.test_seusers(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.ports or self.all:
|
|
Packit |
366192 |
self.test_ports(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.modules or self.all:
|
|
Packit |
366192 |
self.test_modules(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.fcontexts or self.all:
|
|
Packit |
366192 |
self.test_fcontexts(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.interfaces or self.all:
|
|
Packit |
366192 |
self.test_interfaces(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.booleans or self.all:
|
|
Packit |
366192 |
self.test_booleans(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.abooleans or self.all:
|
|
Packit |
366192 |
self.test_abooleans(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.nodes or self.all:
|
|
Packit |
366192 |
self.test_nodes(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeuser or self.all:
|
|
Packit |
366192 |
self.test_writeuser(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeseuser or self.all:
|
|
Packit |
366192 |
self.test_writeseuser(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeport or self.all:
|
|
Packit |
366192 |
self.test_writeport(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writefcontext or self.all:
|
|
Packit |
366192 |
self.test_writefcontext(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeinterface or self.all:
|
|
Packit |
366192 |
self.test_writeinterface(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeboolean or self.all:
|
|
Packit |
366192 |
self.test_writeboolean(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writeaboolean or self.all:
|
|
Packit |
366192 |
self.test_writeaboolean(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
if self.writenode or self.all:
|
|
Packit |
366192 |
self.test_writenode(handle)
|
|
Packit |
366192 |
print("")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_modules(self, sh):
|
|
Packit |
366192 |
print("Testing modules...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(trans_cnt, mlist, mlist_size) = semanage.semanage_module_list(sh)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Transaction number: %s" % trans_cnt)
|
|
Packit |
366192 |
print("Module list size: %s" % mlist_size)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("List reference: %s" % mlist)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if mlist_size == 0:
|
|
Packit |
366192 |
print("No modules installed!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for idx in range(mlist_size):
|
|
Packit |
366192 |
module = semanage.semanage_module_list_nth(mlist, idx)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Module reference: %s" % module)
|
|
Packit |
366192 |
print("Module name: %s" % semanage.semanage_module_get_name(module))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_seusers(self, sh):
|
|
Packit |
366192 |
print("Testing seusers...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, slist) = semanage.semanage_seuser_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list seusers")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(slist) == 0:
|
|
Packit |
366192 |
print("No seusers found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for seuser in slist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("seseuser reference: %s" % seuser)
|
|
Packit |
366192 |
print("seuser name: %s" % semanage.semanage_seuser_get_name(seuser))
|
|
Packit |
366192 |
print(" seuser mls range: %s" % semanage.semanage_seuser_get_mlsrange(seuser))
|
|
Packit |
366192 |
print(" seuser sename: %s" % semanage.semanage_seuser_get_sename(seuser))
|
|
Packit |
366192 |
semanage.semanage_seuser_free(seuser)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_users(self, sh):
|
|
Packit |
366192 |
print("Testing users...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, ulist) = semanage.semanage_user_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list users")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(ulist) == 0:
|
|
Packit |
366192 |
print("No users found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for user in ulist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User reference: %s" % user)
|
|
Packit |
366192 |
print("User name: %s" % semanage.semanage_user_get_name(user))
|
|
Packit |
366192 |
print(" User labeling prefix: %s" % semanage.semanage_user_get_prefix(user))
|
|
Packit |
366192 |
print(" User mls level: %s" % semanage.semanage_user_get_mlslevel(user))
|
|
Packit |
366192 |
print(" User mls range: %s" % semanage.semanage_user_get_mlsrange(user))
|
|
Packit |
366192 |
print(" User number of roles: %s" % semanage.semanage_user_get_num_roles(user))
|
|
Packit |
366192 |
print(" User roles: ")
|
|
Packit |
366192 |
(status, rlist) = semanage.semanage_user_get_roles(sh, user)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not get user roles")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
for role in rlist:
|
|
Packit |
366192 |
print(" %s" % role)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_user_free(user)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_ports(self, sh):
|
|
Packit |
366192 |
print("Testing ports...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, plist) = semanage.semanage_port_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list ports")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(plist) == 0:
|
|
Packit |
366192 |
print("No ports found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for port in plist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Port reference: %s" % port)
|
|
Packit |
366192 |
low = semanage.semanage_port_get_low(port)
|
|
Packit |
366192 |
high = semanage.semanage_port_get_high(port)
|
|
Packit |
366192 |
con = semanage.semanage_port_get_con(port)
|
|
Packit |
366192 |
proto = semanage.semanage_port_get_proto(port)
|
|
Packit |
366192 |
proto_str = semanage.semanage_port_get_proto_str(proto)
|
|
Packit |
366192 |
if low == high:
|
|
Packit |
366192 |
range_str = str(low)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
range_str = str(low) + "-" + str(high)
|
|
Packit |
366192 |
(rc, con_str) = semanage.semanage_context_to_string(sh, con)
|
|
Packit |
366192 |
if rc < 0:
|
|
Packit |
366192 |
con_str = ""
|
|
Packit |
366192 |
print("Port: %s %s Context: %s" % (range_str, proto_str, con_str))
|
|
Packit |
366192 |
semanage.semanage_port_free(port)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_fcontexts(self, sh):
|
|
Packit |
366192 |
print("Testing file contexts...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, flist) = semanage.semanage_fcontext_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list file contexts")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(flist) == 0:
|
|
Packit |
366192 |
print("No file contexts found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for fcon in flist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("File Context reference: %s" % fcon)
|
|
Packit |
366192 |
expr = semanage.semanage_fcontext_get_expr(fcon)
|
|
Packit |
366192 |
type = semanage.semanage_fcontext_get_type(fcon)
|
|
Packit |
366192 |
type_str = semanage.semanage_fcontext_get_type_str(type)
|
|
Packit |
366192 |
con = semanage.semanage_fcontext_get_con(fcon)
|
|
Packit |
366192 |
if not con:
|
|
Packit |
366192 |
con_str = "<<none>>"
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
(rc, con_str) = semanage.semanage_context_to_string(sh, con)
|
|
Packit |
366192 |
if rc < 0:
|
|
Packit |
366192 |
con_str = ""
|
|
Packit |
366192 |
print("File Expr: %s [%s] Context: %s" % (expr, type_str, con_str))
|
|
Packit |
366192 |
semanage.semanage_fcontext_free(fcon)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_interfaces(self, sh):
|
|
Packit |
366192 |
print("Testing network interfaces...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, ilist) = semanage.semanage_iface_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list interfaces")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(ilist) == 0:
|
|
Packit |
366192 |
print("No network interfaces found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for iface in ilist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Interface reference: %s" % iface)
|
|
Packit |
366192 |
name = semanage.semanage_iface_get_name(iface)
|
|
Packit |
366192 |
msg_con = semanage.semanage_iface_get_msgcon(iface)
|
|
Packit |
366192 |
if_con = semanage.semanage_iface_get_ifcon(iface)
|
|
Packit |
366192 |
(rc, msg_con_str) = semanage.semanage_context_to_string(sh, msg_con)
|
|
Packit |
366192 |
if rc < 0:
|
|
Packit |
366192 |
msg_con_str = ""
|
|
Packit |
366192 |
(rc, if_con_str) = semanage.semanage_context_to_string(sh, if_con)
|
|
Packit |
366192 |
if rc < 0:
|
|
Packit |
366192 |
if_con_str = ""
|
|
Packit |
366192 |
print("Interface: %s Context: %s Message Context: %s" % (name, if_con_str, msg_con_str))
|
|
Packit |
366192 |
semanage.semanage_iface_free(iface)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_booleans(self, sh):
|
|
Packit |
366192 |
print("Testing booleans...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, blist) = semanage.semanage_bool_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list booleans")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(blist) == 0:
|
|
Packit |
366192 |
print("No booleans found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for pbool in blist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Boolean reference: %s" % pbool)
|
|
Packit |
366192 |
name = semanage.semanage_bool_get_name(pbool)
|
|
Packit |
366192 |
value = semanage.semanage_bool_get_value(pbool)
|
|
Packit |
366192 |
print("Boolean: %s Value: %s" % (name, value))
|
|
Packit |
366192 |
semanage.semanage_bool_free(pbool)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_abooleans(self, sh):
|
|
Packit |
366192 |
print("Testing active booleans...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, ablist) = semanage.semanage_bool_list_active(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list active booleans")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(ablist) == 0:
|
|
Packit |
366192 |
print("No active booleans found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for abool in ablist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Active boolean reference: %s" % abool)
|
|
Packit |
366192 |
name = semanage.semanage_bool_get_name(abool)
|
|
Packit |
366192 |
value = semanage.semanage_bool_get_value(abool)
|
|
Packit |
366192 |
print("Active Boolean: %s Value: %s" % (name, value))
|
|
Packit |
366192 |
semanage.semanage_bool_free(abool)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_nodes(self, sh):
|
|
Packit |
366192 |
print("Testing network nodes...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, nlist) = semanage.semanage_node_list(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not list network nodes")
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if len(nlist) == 0:
|
|
Packit |
366192 |
print("No network nodes found!")
|
|
Packit |
366192 |
print("This is not necessarily a test failure.")
|
|
Packit |
366192 |
return
|
|
Packit |
366192 |
for node in nlist:
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Network node reference: %s" % node)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, addr) = semanage.semanage_node_get_addr(sh, node)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
addr = ""
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, mask) = semanage.semanage_node_get_mask(sh, node)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
mask = ""
|
|
Packit |
366192 |
|
|
Packit |
366192 |
proto = semanage.semanage_node_get_proto(node)
|
|
Packit |
366192 |
proto_str = semanage.semanage_node_get_proto_str(proto)
|
|
Packit |
366192 |
con = semanage.semanage_node_get_con(node)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, con_str) = semanage.semanage_context_to_string(sh, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
con_str = ""
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Network Node: %s/%s (%s) Context: %s" % (addr, mask, proto_str, con_str))
|
|
Packit |
366192 |
semanage.semanage_node_free(node)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeuser(self, sh):
|
|
Packit |
366192 |
print("Testing user write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, user) = semanage.semanage_user_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create user object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User object created")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_set_name(sh, user, "testPyUser")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set user name")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User name set: %s" % semanage.semanage_user_get_name(user))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_add_role(sh, user, "user_r")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not add role")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_set_prefix(sh, user, "user")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set labeling prefix")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User prefix set: %s" % semanage.semanage_user_get_prefix(user))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_set_mlsrange(sh, user, "s0")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set MLS range")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User mlsrange: %s" % semanage.semanage_user_get_mlsrange(user))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_set_mlslevel(sh, user, "s0")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set MLS level")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User mlslevel: %s" % semanage.semanage_user_get_mlslevel(user))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_user_key_extract(sh, user)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract user key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_user_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if user exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_user) = semanage.semanage_user_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction..")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_user_modify_local(sh, key, user)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify user")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing user...")
|
|
Packit |
366192 |
status = semanage.semanage_user_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting user...")
|
|
Packit |
366192 |
status = semanage.semanage_user_modify_local(sh, key, old_user)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("User modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_user_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_user_free(user)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_user_free(old_user)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeseuser(self, sh):
|
|
Packit |
366192 |
print("Testing seuser write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, seuser) = semanage.semanage_seuser_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEUser object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEUser object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_seuser_set_name(sh, seuser, "testPySEUser")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set name")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEUser name set: %s" % semanage.semanage_seuser_get_name(seuser))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_seuser_set_sename(sh, seuser, "root")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set sename")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEUser seuser: %s" % semanage.semanage_seuser_get_sename(seuser))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_seuser_set_mlsrange(sh, seuser, "s0:c0.c255")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set MLS range")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEUser mlsrange: %s" % semanage.semanage_seuser_get_mlsrange(seuser))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_seuser_key_extract(sh, seuser)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SEUser key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEUser key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_seuser_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SEUser exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_seuser) = semanage.semanage_seuser_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEUser")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_seuser_modify_local(sh, key, seuser)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEUser")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing seuser...")
|
|
Packit |
366192 |
status = semanage.semanage_seuser_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SEUser")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Seuser delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting seuser...")
|
|
Packit |
366192 |
status = semanage.semanage_seuser_modify_local(sh, key, old_seuser)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SEUser")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Seuser modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_seuser_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_seuser_free(seuser)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_seuser_free(old_seuser)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeport(self, sh):
|
|
Packit |
366192 |
print("Testing port write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, port) = semanage.semanage_port_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEPort object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEPort object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_port_set_range(port, 150, 200)
|
|
Packit |
366192 |
low = semanage.semanage_port_get_low(port)
|
|
Packit |
366192 |
high = semanage.semanage_port_get_high(port)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEPort range set: %s-%s" % (low, high))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_port_set_proto(port, semanage.SEMANAGE_PROTO_TCP)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEPort protocol set: %s" % semanage.semanage_port_get_proto_str(semanage.SEMANAGE_PROTO_TCP))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, con) = semanage.semanage_context_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEContext object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext object created (for port).")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_user(sh, con, "system_u")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext user: %s" % semanage.semanage_context_get_user(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_role(sh, con, "object_r")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context role")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext role: %s" % semanage.semanage_context_get_role(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_type(sh, con, "http_port_t")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context type")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext type: %s" % semanage.semanage_context_get_type(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context MLS fields")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_port_set_con(sh, port, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SEPort context")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEPort context set: %s" % con)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_port_key_extract(sh, port)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SEPort key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEPort key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_port_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SEPort exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_port) = semanage.semanage_port_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEPort")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_port_modify_local(sh, key, port)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEPort")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing port range...")
|
|
Packit |
366192 |
status = semanage.semanage_port_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SEPort")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Port range delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting port range...")
|
|
Packit |
366192 |
status = semanage.semanage_port_modify_local(sh, key, old_port)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SEPort")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Port range modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_context_free(con)
|
|
Packit |
366192 |
semanage.semanage_port_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_port_free(port)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_port_free(old_port)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writefcontext(self, sh):
|
|
Packit |
366192 |
print("Testing file context write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, fcon) = semanage.semanage_fcontext_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEFcontext object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEFcontext object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_fcontext_set_expr(sh, fcon, "/test/fcontext(/.*)?")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set expression")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEFContext expr set: %s" % semanage.semanage_fcontext_get_expr(fcon))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_fcontext_set_type(fcon, semanage.SEMANAGE_FCONTEXT_REG)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
ftype = semanage.semanage_fcontext_get_type(fcon)
|
|
Packit |
366192 |
print("SEFContext type set: %s" % semanage.semanage_fcontext_get_type_str(ftype))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, con) = semanage.semanage_context_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEContext object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext object created (for file context).")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_user(sh, con, "system_u")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext user: %s" % semanage.semanage_context_get_user(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_role(sh, con, "object_r")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context role")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext role: %s" % semanage.semanage_context_get_role(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_type(sh, con, "default_t")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context type")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext type: %s" % semanage.semanage_context_get_type(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context MLS fields")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_fcontext_set_con(sh, fcon, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SEFcontext context")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEFcontext context set: %s" % con)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_fcontext_key_extract(sh, fcon)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SEFcontext key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEFcontext key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_fcontext_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SEFcontext exists")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_fcontext) = semanage.semanage_fcontext_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEFcontext")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_fcontext_modify_local(sh, key, fcon)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEFcontext")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing file context...")
|
|
Packit |
366192 |
status = semanage.semanage_fcontext_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SEFcontext")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("File context delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting file context...")
|
|
Packit |
366192 |
status = semanage.semanage_fcontext_modify_local(sh, key, old_fcontext)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test FContext")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("File context modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_context_free(con)
|
|
Packit |
366192 |
semanage.semanage_fcontext_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_fcontext_free(fcon)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_fcontext_free(old_fcontext)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeinterface(self, sh):
|
|
Packit |
366192 |
print("Testing network interface write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, iface) = semanage.semanage_iface_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEIface object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEIface object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_iface_set_name(sh, iface, "test_iface")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SEIface name")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEIface name set: %s" % semanage.semanage_iface_get_name(iface))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, con) = semanage.semanage_context_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEContext object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext object created (for network interface)")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_user(sh, con, "system_u")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set interface context user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext user: %s" % semanage.semanage_context_get_user(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_role(sh, con, "object_r")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set interface context role")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext role: %s" % semanage.semanage_context_get_role(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_type(sh, con, "default_t")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set interface context type")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext type: %s" % semanage.semanage_context_get_type(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set interface context MLS fields")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_iface_set_ifcon(sh, iface, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SEIface interface context")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEIface interface context set: %s" % con)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_iface_set_msgcon(sh, iface, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SEIface message context")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEIface message context set: %s" % con)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_iface_key_extract(sh, iface)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SEIface key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEIface key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_iface_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SEIface exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_iface) = semanage.semanage_iface_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEIface")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not begin semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_iface_modify_local(sh, key, iface)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEIface")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not begin semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing interface...")
|
|
Packit |
366192 |
status = semanage.semanage_iface_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SEIface")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Interface delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting interface...")
|
|
Packit |
366192 |
status = semanage.semanage_iface_modify_local(sh, key, old_iface)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SEIface")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Interface modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_context_free(con)
|
|
Packit |
366192 |
semanage.semanage_iface_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_iface_free(iface)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_iface_free(old_iface)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeboolean(self, sh):
|
|
Packit |
366192 |
print("Testing boolean write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, pbool) = semanage.semanage_bool_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEBool object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_bool_set_name(sh, pbool, "allow_execmem")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set name")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool name set: %s" % semanage.semanage_bool_get_name(pbool))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_bool_set_value(pbool, 0)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEbool value set: %s" % semanage.semanage_bool_get_value(pbool))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_bool_key_extract(sh, pbool)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SEBool key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_bool_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SEBool exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_bool) = semanage.semanage_bool_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEBool")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_bool_modify_local(sh, key, pbool)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEBool")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing boolean...")
|
|
Packit |
366192 |
status = semanage.semanage_bool_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SEBool")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Boolean delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting boolean...")
|
|
Packit |
366192 |
status = semanage.semanage_bool_modify_local(sh, key, old_bool)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SEBool")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Boolean modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_bool_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_bool_free(pbool)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_bool_free(old_bool)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writeaboolean(self, sh):
|
|
Packit |
366192 |
print("Testing active boolean write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_bool_key_create(sh, "allow_execmem")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEBool key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool key created: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, old_bool) = semanage.semanage_bool_query_active(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SEBool")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, abool) = semanage.semanage_bool_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEBool object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_bool_set_name(sh, abool, "allow_execmem")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set name")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool name set: %s" % semanage.semanage_bool_get_name(abool))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_bool_set_value(abool, 0)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEbool value set: %s" % semanage.semanage_bool_get_value(abool))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_bool_set_active(sh, key, abool)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SEBool")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Resetting old active boolean...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_bool_set_active(sh, key, old_bool)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SEBool")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEBool active reset: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_bool_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_bool_free(abool)
|
|
Packit |
366192 |
semanage.semanage_bool_free(old_bool)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def test_writenode(self, sh):
|
|
Packit |
366192 |
print("Testing network node write...")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, node) = semanage.semanage_node_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SENode object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SENode object created.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_node_set_addr(sh, node, semanage.SEMANAGE_PROTO_IP6, "ffee:dddd::bbbb")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SENode address")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_node_set_mask(sh, node, semanage.SEMANAGE_PROTO_IP6, "::ffff:ffff:abcd:0000")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SENode netmask")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_node_set_proto(node, semanage.SEMANAGE_PROTO_IP6)
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SENode protocol set: %s" % semanage.semanage_node_get_proto_str(semanage.SEMANAGE_PROTO_IP6))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, con) = semanage.semanage_context_create(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not create SEContext object")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext object created (for node).")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_user(sh, con, "system_u")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context user")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext user: %s" % semanage.semanage_context_get_user(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_role(sh, con, "object_r")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context role")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext role: %s" % semanage.semanage_context_get_role(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_type(sh, con, "lo_node_t")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context type")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext type: %s" % semanage.semanage_context_get_type(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_context_set_mls(sh, con, "s0:c0.c255")
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set context MLS fields")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SEContext mls: %s" % semanage.semanage_context_get_mls(con))
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_node_set_con(sh, node, con)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not set SENode context")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SENode context set: %s" % con)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, key) = semanage.semanage_node_key_extract(sh, node)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not extract SENode key")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("SENode key extracted: %s" % key)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
(status, exists) = semanage.semanage_node_exists_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not check if SENode exists")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Exists status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
(status, old_node) = semanage.semanage_node_query_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not query old SENode")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Query status (commit number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
print("Starting transaction...")
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_node_modify_local(sh, key, node)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not modify SENode")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit test transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_begin_transaction(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not start semanage transaction")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not exists:
|
|
Packit |
366192 |
print("Removing network node...")
|
|
Packit |
366192 |
status = semanage.semanage_node_del_local(sh, key)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not delete test SENode")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Network node delete: %s" % status)
|
|
Packit |
366192 |
else:
|
|
Packit |
366192 |
print("Resetting network node...")
|
|
Packit |
366192 |
status = semanage.semanage_node_modify_local(sh, key, old_node)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not reset test SENode")
|
|
Packit |
366192 |
if self.verbose:
|
|
Packit |
366192 |
print("Network node modify: %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_commit(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not commit reset transaction")
|
|
Packit |
366192 |
print("Commit status (transaction number): %s" % status)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_context_free(con)
|
|
Packit |
366192 |
semanage.semanage_node_key_free(key)
|
|
Packit |
366192 |
semanage.semanage_node_free(node)
|
|
Packit |
366192 |
if exists:
|
|
Packit |
366192 |
semanage.semanage_node_free(old_node)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
def main(argv=None):
|
|
Packit |
366192 |
if argv is None:
|
|
Packit |
366192 |
argv = sys.argv
|
|
Packit |
366192 |
try:
|
|
Packit |
366192 |
try:
|
|
Packit |
366192 |
opts, args = getopt.getopt(
|
|
Packit |
366192 |
argv[1:], "hvmuspfibcUSPFIBCanN",
|
|
Packit |
366192 |
[
|
|
Packit |
366192 |
"help",
|
|
Packit |
366192 |
"verbose",
|
|
Packit |
366192 |
"modules",
|
|
Packit |
366192 |
"users",
|
|
Packit |
366192 |
"seusers",
|
|
Packit |
366192 |
"ports",
|
|
Packit |
366192 |
"file contexts",
|
|
Packit |
366192 |
"network interfaces",
|
|
Packit |
366192 |
"booleans",
|
|
Packit |
366192 |
"active booleans",
|
|
Packit |
366192 |
"network nodes",
|
|
Packit |
366192 |
"writeuser",
|
|
Packit |
366192 |
"writeseuser",
|
|
Packit |
366192 |
"writeport",
|
|
Packit |
366192 |
"writefcontext",
|
|
Packit |
366192 |
"writeinterface",
|
|
Packit |
366192 |
"writeboolean",
|
|
Packit |
366192 |
"writeaboolean",
|
|
Packit |
366192 |
"writenode",
|
|
Packit |
366192 |
"all",
|
|
Packit |
366192 |
])
|
|
Packit |
366192 |
tests = Tests()
|
|
Packit |
366192 |
for o, a in opts:
|
|
Packit |
366192 |
if o == "-v":
|
|
Packit |
366192 |
tests.verbose = True
|
|
Packit |
366192 |
print("Verbose output selected.")
|
|
Packit |
366192 |
if o == "-a":
|
|
Packit |
366192 |
tests.all = True
|
|
Packit |
366192 |
if o == "-u":
|
|
Packit |
366192 |
tests.users = True
|
|
Packit |
366192 |
if o == "-U":
|
|
Packit |
366192 |
tests.writeuser = True
|
|
Packit |
366192 |
if o == "-s":
|
|
Packit |
366192 |
tests.seusers = True
|
|
Packit |
366192 |
if o == "-S":
|
|
Packit |
366192 |
tests.writeseuser = True
|
|
Packit |
366192 |
if o == "-p":
|
|
Packit |
366192 |
tests.ports = True
|
|
Packit |
366192 |
if o == "-P":
|
|
Packit |
366192 |
tests.writeport = True
|
|
Packit |
366192 |
if o == "-f":
|
|
Packit |
366192 |
tests.fcontexts = True
|
|
Packit |
366192 |
if o == "-F":
|
|
Packit |
366192 |
tests.writefcontext = True
|
|
Packit |
366192 |
if o == "-i":
|
|
Packit |
366192 |
tests.interfaces = True
|
|
Packit |
366192 |
if o == "-I":
|
|
Packit |
366192 |
tests.writeinterface = True
|
|
Packit |
366192 |
if o == "-b":
|
|
Packit |
366192 |
tests.booleans = True
|
|
Packit |
366192 |
if o == "-B":
|
|
Packit |
366192 |
tests.writeboolean = True
|
|
Packit |
366192 |
if o == "-c":
|
|
Packit |
366192 |
tests.abooleans = True
|
|
Packit |
366192 |
if o == "-C":
|
|
Packit |
366192 |
tests.writeaboolean = True
|
|
Packit |
366192 |
if o == "-n":
|
|
Packit |
366192 |
tests.nodes = True
|
|
Packit |
366192 |
if o == "-N":
|
|
Packit |
366192 |
tests.writenode = True
|
|
Packit |
366192 |
if o == "-m":
|
|
Packit |
366192 |
tests.modules = True
|
|
Packit |
366192 |
if o == "-h":
|
|
Packit |
366192 |
raise Usage(usage)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if not tests.selected():
|
|
Packit |
366192 |
raise Usage("Please select a valid test.")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
except getopt.error as msg:
|
|
Packit |
366192 |
raise Usage(msg)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
sh = semanage.semanage_handle_create()
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if semanage.semanage_is_managed(sh) != 1:
|
|
Packit |
366192 |
raise Status("Unmanaged!")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_connect(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not establish semanage connection")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
tests.run(sh)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
status = semanage.semanage_disconnect(sh)
|
|
Packit |
366192 |
if status < 0:
|
|
Packit |
366192 |
raise Error("Could not disconnect")
|
|
Packit |
366192 |
|
|
Packit |
366192 |
semanage.semanage_handle_destroy(sh)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
except Usage as err:
|
|
Packit |
366192 |
print(err.msg, file=sys.stderr)
|
|
Packit |
366192 |
except Status as err:
|
|
Packit |
366192 |
print(err.msg, file=sys.stderr)
|
|
Packit |
366192 |
except Error as err:
|
|
Packit |
366192 |
print(err.msg, file=sys.stderr)
|
|
Packit |
366192 |
|
|
Packit |
366192 |
return 2
|
|
Packit |
366192 |
|
|
Packit |
366192 |
|
|
Packit |
366192 |
if __name__ == "__main__":
|
|
Packit |
366192 |
sys.exit(main())
|