Blame src/pywrap-test.py

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())