2006-01-10 17:12:58 +00:00
|
|
|
diff --exclude-from=exclude -N -u -r nsapolicycoreutils/scripts/genhomedircon policycoreutils-1.29.5/scripts/genhomedircon
|
|
|
|
--- nsapolicycoreutils/scripts/genhomedircon 2006-01-05 10:35:49.000000000 -0500
|
|
|
|
+++ policycoreutils-1.29.5/scripts/genhomedircon 2006-01-10 12:11:48.000000000 -0500
|
|
|
|
@@ -144,7 +144,7 @@
|
|
|
|
for i in fd.read().split('\n'):
|
|
|
|
if i.find("HOME_ROOT") == 0:
|
|
|
|
i=i.replace("HOME_ROOT", homedir)
|
|
|
|
- ret = i+"\n"
|
|
|
|
+ ret += i+"\n"
|
|
|
|
fd.close()
|
|
|
|
if ret=="":
|
|
|
|
errorExit("No Home Root Context Found")
|
|
|
|
@@ -240,7 +240,7 @@
|
|
|
|
i=i.replace("HOME_DIR", home)
|
|
|
|
i=i.replace("ROLE", role)
|
|
|
|
i=i.replace("system_u", user)
|
|
|
|
- ret = ret+i+"\n"
|
|
|
|
+ ret += i+"\n"
|
|
|
|
fd.close()
|
|
|
|
return ret
|
|
|
|
|
|
|
|
@@ -252,7 +252,7 @@
|
|
|
|
i=i.replace("USER", user)
|
|
|
|
i=i.replace("ROLE", role)
|
|
|
|
i=i.replace("system_u", sel_user)
|
|
|
|
- ret=ret+i+"\n"
|
|
|
|
+ ret = i+"\n"
|
|
|
|
fd.close()
|
|
|
|
return ret
|
|
|
|
|
|
|
|
diff --exclude-from=exclude -N -u -r nsapolicycoreutils/semanage/Makefile policycoreutils-1.29.5/semanage/Makefile
|
|
|
|
--- nsapolicycoreutils/semanage/Makefile 2005-11-29 10:55:01.000000000 -0500
|
|
|
|
+++ policycoreutils-1.29.5/semanage/Makefile 2006-01-06 14:34:47.000000000 -0500
|
|
|
|
@@ -2,6 +2,8 @@
|
|
|
|
PREFIX ?= ${DESTDIR}/usr
|
|
|
|
SBINDIR ?= $(PREFIX)/sbin
|
|
|
|
MANDIR = $(PREFIX)/share/man
|
|
|
|
+PYLIBVER ?= python2.4
|
|
|
|
+PYTHONLIBDIR ?= $(LIBDIR)/$(PYLIBVER)
|
|
|
|
|
|
|
|
TARGETS=semanage
|
|
|
|
|
|
|
|
@@ -12,6 +14,8 @@
|
|
|
|
-mkdir -p $(SBINDIR)
|
|
|
|
install -m 755 semanage $(SBINDIR)
|
|
|
|
install -m 644 semanage.8 $(MANDIR)/man8
|
|
|
|
+ test -d $(PYTHONLIBDIR)/site-packages || install -m 755 -d $(PYTHONLIBDIR)/site-packages
|
|
|
|
+ install -m 755 seobject.py $(PYTHONLIBDIR)/site-packages
|
|
|
|
|
|
|
|
clean:
|
|
|
|
|
|
|
|
diff --exclude-from=exclude -N -u -r nsapolicycoreutils/semanage/semanage policycoreutils-1.29.5/semanage/semanage
|
2006-01-05 21:39:11 +00:00
|
|
|
--- nsapolicycoreutils/semanage/semanage 2006-01-05 10:35:49.000000000 -0500
|
2006-01-10 17:12:58 +00:00
|
|
|
+++ policycoreutils-1.29.5/semanage/semanage 2006-01-06 14:41:04.000000000 -0500
|
|
|
|
@@ -20,345 +20,9 @@
|
2006-01-05 21:39:11 +00:00
|
|
|
# 02111-1307 USA
|
|
|
|
#
|
|
|
|
#
|
2006-01-10 17:12:58 +00:00
|
|
|
-import commands, sys, os, pwd, string, getopt, pwd
|
|
|
|
-from semanage import *;
|
2006-01-05 21:39:11 +00:00
|
|
|
-class loginRecords:
|
2006-01-10 17:12:58 +00:00
|
|
|
- def __init__(self):
|
|
|
|
- self.sh = semanage_handle_create()
|
|
|
|
- self.semanaged = semanage_is_managed(self.sh)
|
|
|
|
- if self.semanaged:
|
|
|
|
- semanage_connect(self.sh)
|
|
|
|
-
|
|
|
|
- def add(self, name, sename, serange):
|
|
|
|
- if serange == "":
|
|
|
|
- serange = "s0"
|
|
|
|
- if sename == "":
|
|
|
|
- sename = "user_u"
|
|
|
|
-
|
|
|
|
- (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s" % name)
|
|
|
|
-
|
|
|
|
- (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- raise ValueError("SELinux User %s mapping already defined" % name)
|
|
|
|
- try:
|
|
|
|
- pwd.getpwnam(name)
|
|
|
|
- except:
|
|
|
|
- raise ValueError("Linux User %s does not exist" % name)
|
|
|
|
-
|
|
|
|
- (rc,u) = semanage_seuser_create(self.sh)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create seuser for %s" % name)
|
|
|
|
-
|
|
|
|
- semanage_seuser_set_name(self.sh, u, name)
|
|
|
|
- semanage_seuser_set_mlsrange(self.sh, u, serange)
|
|
|
|
- semanage_seuser_set_sename(self.sh, u, sename)
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_seuser_add(self.sh, k, u)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to add SELinux user mapping")
|
|
|
|
-
|
|
|
|
- def modify(self, name, sename = "", serange = ""):
|
|
|
|
- (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s" % name)
|
|
|
|
-
|
|
|
|
- if sename == "" and serange == "":
|
|
|
|
- raise ValueError("Requires, seuser or serange")
|
|
|
|
-
|
|
|
|
- (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- (rc,u) = semanage_seuser_query(self.sh, k)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not query seuser for %s" % name)
|
|
|
|
- else:
|
|
|
|
- raise ValueError("SELinux user %s mapping is not defined." % name)
|
|
|
|
-
|
|
|
|
- if serange != "":
|
|
|
|
- semanage_seuser_set_mlsrange(self.sh, u, serange)
|
|
|
|
- if sename != "":
|
|
|
|
- semanage_seuser_set_sename(self.sh, u, sename)
|
|
|
|
- semanage_begin_transaction(self.sh)
|
2006-01-05 21:39:11 +00:00
|
|
|
- semanage_seuser_modify(self.sh, k, u)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to modify SELinux user mapping")
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- def delete(self, name):
|
|
|
|
- (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s" % name)
|
|
|
|
-
|
|
|
|
- (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
- if not exists:
|
|
|
|
- raise ValueError("SELinux user %s mapping is not defined." % name)
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_seuser_del(self.sh, k)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("SELinux User %s mapping not defined" % name)
|
|
|
|
-
|
|
|
|
- def list(self,heading=1):
|
|
|
|
- if heading:
|
|
|
|
- print "\n%-25s %-25s %-25s\n" % ("Login Name", "SELinux User", "MLS/MCS Range")
|
|
|
|
- (status, self.ulist, self.usize) = semanage_seuser_list(self.sh)
|
|
|
|
- for idx in range(self.usize):
|
|
|
|
- u = semanage_seuser_by_idx(self.ulist, idx)
|
|
|
|
- name = semanage_seuser_get_name(u)
|
|
|
|
- print "%-25s %-25s %-25s" % (name, semanage_seuser_get_sename(u), semanage_seuser_get_mlsrange(u))
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
-class seluserRecords:
|
2006-01-10 17:12:58 +00:00
|
|
|
- def __init__(self):
|
2006-01-05 21:39:11 +00:00
|
|
|
- roles = []
|
|
|
|
- self.sh = semanage_handle_create()
|
|
|
|
- self.semanaged = semanage_is_managed(self.sh)
|
|
|
|
- if self.semanaged:
|
|
|
|
- semanage_connect(self.sh)
|
2006-01-10 17:12:58 +00:00
|
|
|
-
|
|
|
|
- def add(self, name, roles, selevel, serange):
|
|
|
|
- if serange == "":
|
|
|
|
- serange = "s0"
|
|
|
|
- if selevel == "":
|
|
|
|
- selevel = "s0"
|
|
|
|
-
|
|
|
|
- (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s" % name)
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_user_exists_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if not exists:
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_user_exists(self.sh, k)
|
|
|
|
- if not exists:
|
|
|
|
- raise ValueError("SELinux user %s is already defined." % name)
|
2006-01-10 17:12:58 +00:00
|
|
|
-
|
|
|
|
- (rc,u) = semanage_user_create(self.sh)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create login mapping for %s" % name)
|
|
|
|
-
|
|
|
|
- semanage_user_set_name(self.sh, u, name)
|
|
|
|
- for r in roles:
|
|
|
|
- semanage_user_add_role(self.sh, u, r)
|
|
|
|
- semanage_user_set_mlsrange(self.sh, u, serange)
|
|
|
|
- semanage_user_set_mlslevel(self.sh, u, selevel)
|
|
|
|
- (rc,key) = semanage_user_key_extract(self.sh,u)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not extract key for %s" % name)
|
|
|
|
-
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_user_add_local(self.sh, k, u)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to add SELinux user")
|
|
|
|
-
|
|
|
|
- def modify(self, name, roles = [], selevel = "", serange = ""):
|
|
|
|
- if len(roles) == 0 and serange == "" and selevel == "":
|
|
|
|
- raise ValueError("Requires, roles, level or range")
|
|
|
|
-
|
|
|
|
- (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s" % name)
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_user_exists_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if exists:
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,u) = semanage_user_query_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- else:
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_user_exists(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- (rc,u) = semanage_user_query(self.sh, k)
|
|
|
|
- else:
|
|
|
|
- raise ValueError("SELinux user %s mapping is not defined." % name)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not query user for %s" % name)
|
|
|
|
-
|
|
|
|
- if serange != "":
|
|
|
|
- semanage_user_set_mlsrange(self.sh, u, serange)
|
|
|
|
- if selevel != "":
|
|
|
|
- semanage_user_set_mlslevel(self.sh, u, selevel)
|
|
|
|
- if len(roles) < 0:
|
|
|
|
- for r in roles:
|
|
|
|
- semanage_user_add_role(self.sh, u, r)
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_user_modify_local(self.sh, k, u)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to modify SELinux user")
|
|
|
|
-
|
|
|
|
- def delete(self, name):
|
|
|
|
- (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not crpppeate a key for %s" % name)
|
2006-01-05 21:39:11 +00:00
|
|
|
-
|
|
|
|
- (rc,exists) = semanage_user_exists_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if not exists:
|
|
|
|
- raise ValueError("user %s is not defined" % name)
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_user_del_local(self.sh, k)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Login User %s not defined" % name)
|
|
|
|
-
|
|
|
|
- def list(self, heading=1):
|
|
|
|
- if heading:
|
|
|
|
- print "\n%-15s %-10s %-20s" % ("", "MLS/", "MLS/")
|
|
|
|
- print "%-15s %-10s %-15s %-20s\n" % ("SELinux User", "MCS Level", "MCS Range", "SELinux Roles")
|
|
|
|
- (status, self.ulist, self.usize) = semanage_user_list(self.sh)
|
|
|
|
- for idx in range(self.usize):
|
|
|
|
- u = semanage_user_by_idx(self.ulist, idx)
|
|
|
|
- name = semanage_user_get_name(u)
|
|
|
|
- (status, rlist, rlist_size) = semanage_user_get_roles(self.sh, u)
|
|
|
|
- roles = ""
|
|
|
|
-
|
|
|
|
- if rlist_size:
|
|
|
|
- roles += char_by_idx(rlist, 0)
|
|
|
|
- for ridx in range (1,rlist_size):
|
|
|
|
- roles += " " + char_by_idx(rlist, ridx)
|
|
|
|
- print "%-15s %-10s %-15s %s" % (semanage_user_get_name(u), semanage_user_get_mlslevel(u), semanage_user_get_mlsrange(u), roles)
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
-class portRecords:
|
2006-01-10 17:12:58 +00:00
|
|
|
- def __init__(self):
|
2006-01-05 21:39:11 +00:00
|
|
|
- self.sh = semanage_handle_create()
|
|
|
|
- self.semanaged = semanage_is_managed(self.sh)
|
|
|
|
- if self.semanaged:
|
|
|
|
- semanage_connect(self.sh)
|
2006-01-10 17:12:58 +00:00
|
|
|
-
|
|
|
|
- def __genkey(self, port, proto):
|
|
|
|
- if proto == "tcp":
|
|
|
|
- proto_d=SEMANAGE_PROTO_TCP
|
|
|
|
- else:
|
|
|
|
- if proto == "udp":
|
|
|
|
- proto_d=SEMANAGE_PROTO_UDP
|
|
|
|
- else:
|
|
|
|
- raise ValueError("Protocol udp or tcp is required")
|
|
|
|
- if port == "":
|
|
|
|
- raise ValueError("Port is required")
|
2006-01-05 21:39:11 +00:00
|
|
|
-
|
2006-01-10 17:12:58 +00:00
|
|
|
- ports=port.split("-")
|
|
|
|
- if len(ports) == 1:
|
|
|
|
- low=string.atoi(ports[0])
|
|
|
|
- high=string.atoi(ports[0])
|
|
|
|
- else:
|
|
|
|
- low=string.atoi(ports[0])
|
|
|
|
- high=string.atoi(ports[1])
|
|
|
|
-
|
|
|
|
- (rc,k) = semanage_port_key_create(self.sh, low, high, proto_d)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create a key for %s/%s" % (proto, port))
|
|
|
|
- return ( k, proto_d, low, high )
|
|
|
|
-
|
|
|
|
- def add(self, port, proto, serange, type):
|
|
|
|
- if serange == "":
|
|
|
|
- serange="s0"
|
|
|
|
-
|
|
|
|
- if type == "":
|
|
|
|
- raise ValueError("Type is required")
|
|
|
|
-
|
|
|
|
- ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
|
|
|
-
|
|
|
|
- (rc,exists) = semanage_port_exists(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- raise ValueError("Port %s/%s already defined" % (proto, port))
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_port_exists_local(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- raise ValueError("Port %s/%s already defined locally" % (proto, port))
|
|
|
|
-
|
2006-01-10 17:12:58 +00:00
|
|
|
- (rc,p) = semanage_port_create(self.sh)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create port for %s/%s" % (proto, port))
|
|
|
|
-
|
|
|
|
- semanage_port_set_proto(p, proto_d)
|
|
|
|
- semanage_port_set_range(p, low, high)
|
|
|
|
- (rc, con) = semanage_context_create(self.sh)
|
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not create context for %s/%s" % (proto, port))
|
|
|
|
-
|
|
|
|
- semanage_context_set_user(self.sh, con, "system_u")
|
|
|
|
- semanage_context_set_role(self.sh, con, "object_r")
|
|
|
|
- semanage_context_set_type(self.sh, con, type)
|
|
|
|
- semanage_context_set_mls(self.sh, con, serange)
|
2006-01-05 21:39:11 +00:00
|
|
|
- semanage_port_set_con(p, con)
|
2006-01-10 17:12:58 +00:00
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_port_add_local(self.sh, k, p)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to add port")
|
|
|
|
-
|
|
|
|
- def modify(self, port, proto, serange, setype):
|
|
|
|
- if serange == "" and setype == "":
|
|
|
|
- raise ValueError("Requires, setype or serange")
|
|
|
|
-
|
|
|
|
- ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
|
|
|
-
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_port_exists_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if exists:
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,p) = semanage_port_query_local(self.sh, k)
|
|
|
|
- (rc,exists) = semanage_port_exists(self.sh, k)
|
|
|
|
- if exists:
|
|
|
|
- (rc,p) = semanage_port_query(self.sh, k)
|
|
|
|
- else:
|
|
|
|
- raise ValueError("port %s/%s is not defined." % (proto,port))
|
2006-01-10 17:12:58 +00:00
|
|
|
+import sys, getopt
|
|
|
|
+import seobject
|
2006-01-05 21:39:11 +00:00
|
|
|
|
2006-01-10 17:12:58 +00:00
|
|
|
- if rc < 0:
|
|
|
|
- raise ValueError("Could not query port for %s/%s" % (proto, port))
|
|
|
|
-
|
|
|
|
- con = semanage_port_get_con(p)
|
2006-01-05 21:39:11 +00:00
|
|
|
- semanage_context_set_mls(self.sh, con, serange)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if serange != "":
|
|
|
|
- semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
- if setype != "":
|
|
|
|
- semanage_context_set_type(self.sh, con, setype)
|
2006-01-05 21:39:11 +00:00
|
|
|
- semanage_port_set_con(p, con)
|
2006-01-10 17:12:58 +00:00
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_port_modify_local(self.sh, k, p)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Failed to add port")
|
|
|
|
-
|
|
|
|
- def delete(self, port, proto):
|
|
|
|
- ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
2006-01-05 21:39:11 +00:00
|
|
|
- (rc,exists) = semanage_port_exists_local(self.sh, k)
|
2006-01-10 17:12:58 +00:00
|
|
|
- if not exists:
|
2006-01-05 21:39:11 +00:00
|
|
|
- raise ValueError("port %s/%s is not defined localy." % (proto,port))
|
2006-01-10 17:12:58 +00:00
|
|
|
-
|
|
|
|
- semanage_begin_transaction(self.sh)
|
|
|
|
- semanage_port_del_local(self.sh, k)
|
|
|
|
- if semanage_commit(self.sh) < 0:
|
|
|
|
- raise ValueError("Port %s/%s not defined" % (proto,port))
|
|
|
|
-
|
|
|
|
- def list(self, heading=1):
|
|
|
|
- (status, self.plist, self.psize) = semanage_port_list(self.sh)
|
|
|
|
- if heading:
|
|
|
|
- print "%-30s %-8s %s\n" % ("SELinux Port Name", "Proto", "Port Number")
|
|
|
|
- dict={}
|
|
|
|
- for idx in range(self.psize):
|
|
|
|
- u = semanage_port_by_idx(self.plist, idx)
|
|
|
|
- con = semanage_port_get_con(u)
|
|
|
|
- name = semanage_context_get_type(con)
|
|
|
|
- proto=semanage_port_get_proto_str(u)
|
|
|
|
- low=semanage_port_get_low(u)
|
|
|
|
- high = semanage_port_get_high(u)
|
|
|
|
- if (name, proto) not in dict.keys():
|
|
|
|
- dict[(name,proto)]=[]
|
|
|
|
- if low == high:
|
|
|
|
- dict[(name,proto)].append("%d" % low)
|
|
|
|
- else:
|
|
|
|
- dict[(name,proto)].append("%d-%d" % (low, high))
|
2006-01-05 21:39:11 +00:00
|
|
|
- (status, self.plist, self.psize) = semanage_port_list_local(self.sh)
|
|
|
|
- for idx in range(self.psize):
|
|
|
|
- u = semanage_port_by_idx(self.plist, idx)
|
|
|
|
- con = semanage_port_get_con(u)
|
|
|
|
- name = semanage_context_get_type(con)
|
|
|
|
- proto=semanage_port_get_proto_str(u)
|
|
|
|
- low=semanage_port_get_low(u)
|
|
|
|
- high = semanage_port_get_high(u)
|
|
|
|
- if (name, proto) not in dict.keys():
|
|
|
|
- dict[(name,proto)]=[]
|
|
|
|
- if low == high:
|
|
|
|
- dict[(name,proto)].append("%d" % low)
|
|
|
|
- else:
|
|
|
|
- dict[(name,proto)].append("%d-%d" % (low, high))
|
|
|
|
- for i in dict.keys():
|
2006-01-10 17:12:58 +00:00
|
|
|
- rec = "%-30s %-8s " % i
|
|
|
|
- rec += "%s" % dict[i][0]
|
|
|
|
- for p in dict[i][1:]:
|
|
|
|
- rec += ", %s" % p
|
|
|
|
- print rec
|
|
|
|
-
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
|
|
|
def usage(message = ""):
|
|
|
|
@@ -366,8 +30,11 @@
|
|
|
|
semanage user [-admsRrh] SELINUX_USER\n\
|
|
|
|
semanage login [-admsrh] LOGIN_NAME\n\
|
|
|
|
semanage port [-admth] PORT | PORTRANGE\n\
|
|
|
|
+semanage interface [-admth] INTERFACE\n\
|
|
|
|
+semanage fcontext [-admhfst] INTERFACE\n\
|
|
|
|
-a, --add Add a OBJECT record NAME\n\
|
|
|
|
-d, --delete Delete a OBJECT record NAME\n\
|
|
|
|
+ -f, --ftype File Type of OBJECT \n\
|
|
|
|
-h, --help display this message\n\
|
|
|
|
-l, --list List the OBJECTS\n\
|
|
|
|
-n, --noheading Do not print heading when listing OBJECTS\n\
|
|
|
|
@@ -391,7 +58,7 @@
|
|
|
|
#
|
|
|
|
#
|
|
|
|
try:
|
|
|
|
- objectlist = ("login", "user", "port")
|
|
|
|
+ objectlist = ("login", "user", "port", "interface", "fcontext")
|
|
|
|
input = sys.stdin
|
|
|
|
output = sys.stdout
|
|
|
|
serange = ""
|
|
|
|
@@ -399,6 +66,7 @@
|
|
|
|
proto = ""
|
|
|
|
selevel = ""
|
|
|
|
setype = ""
|
|
|
|
+ ftype = ""
|
|
|
|
roles = ""
|
|
|
|
seuser = ""
|
|
|
|
heading=1
|
|
|
|
@@ -416,9 +84,10 @@
|
|
|
|
|
|
|
|
args = sys.argv[2:]
|
|
|
|
gopts, cmds = getopt.getopt(args,
|
|
|
|
- 'adlhmnp:P:s:R:r:t:v',
|
|
|
|
+ 'adf:lhmnp:P:s:R:r:t:v',
|
|
|
|
['add',
|
|
|
|
'delete',
|
|
|
|
+ 'ftype=',
|
|
|
|
'help',
|
|
|
|
'list',
|
|
|
|
'modify',
|
|
|
|
@@ -441,6 +110,8 @@
|
|
|
|
if modify or add:
|
|
|
|
usage()
|
|
|
|
delete = 1
|
|
|
|
+ if o == "-f" or o == "--ftype":
|
|
|
|
+ ftype=a
|
|
|
|
if o == "-h" or o == "--help":
|
|
|
|
usage()
|
|
|
|
|
|
|
|
@@ -474,13 +145,19 @@
|
|
|
|
verbose = 1
|
|
|
|
|
|
|
|
if object == "login":
|
|
|
|
- OBJECT = loginRecords()
|
|
|
|
+ OBJECT = seobject.loginRecords()
|
|
|
|
|
|
|
|
if object == "user":
|
|
|
|
- OBJECT = seluserRecords()
|
|
|
|
+ OBJECT = seobject.seluserRecords()
|
|
|
|
|
|
|
|
if object == "port":
|
|
|
|
- OBJECT = portRecords()
|
|
|
|
+ OBJECT = seobject.portRecords()
|
|
|
|
+
|
|
|
|
+ if object == "interface":
|
|
|
|
+ OBJECT = seobject.interfaceRecords()
|
|
|
|
+
|
|
|
|
+ if object == "fcontext":
|
|
|
|
+ OBJECT = seobject.fcontextRecords()
|
|
|
|
|
|
|
|
if list:
|
|
|
|
OBJECT.list(heading)
|
|
|
|
@@ -504,6 +181,11 @@
|
|
|
|
if object == "port":
|
|
|
|
OBJECT.add(target, proto, serange, setype)
|
|
|
|
|
|
|
|
+ if object == "interface":
|
|
|
|
+ OBJECT.add(target, serange, setype)
|
|
|
|
+
|
|
|
|
+ if object == "fcontext":
|
|
|
|
+ OBJECT.add(target, setype, ftype, serange, seuser)
|
|
|
|
sys.exit(0);
|
|
|
|
|
|
|
|
if modify:
|
|
|
|
@@ -516,7 +198,13 @@
|
|
|
|
|
|
|
|
if object == "port":
|
|
|
|
OBJECT.modify(target, proto, serange, setype)
|
|
|
|
- sys.exit(0);
|
|
|
|
+
|
|
|
|
+ if object == "interface":
|
|
|
|
+ OBJECT.modify(target, serange, setype)
|
|
|
|
+
|
|
|
|
+ if object == "fcontext":
|
|
|
|
+ OBJECT.modify(target, setype, ftype, serange, seuser)
|
|
|
|
+
|
|
|
|
sys.exit(0);
|
|
|
|
|
|
|
|
if delete:
|
|
|
|
diff --exclude-from=exclude -N -u -r nsapolicycoreutils/semanage/seobject.py policycoreutils-1.29.5/semanage/seobject.py
|
|
|
|
--- nsapolicycoreutils/semanage/seobject.py 1969-12-31 19:00:00.000000000 -0500
|
|
|
|
+++ policycoreutils-1.29.5/semanage/seobject.py 2006-01-06 14:30:39.000000000 -0500
|
|
|
|
@@ -0,0 +1,722 @@
|
|
|
|
+#! /usr/bin/env python
|
|
|
|
+# Copyright (C) 2005 Red Hat
|
|
|
|
+# see file 'COPYING' for use and warranty information
|
|
|
|
+#
|
|
|
|
+# semanage is a tool for managing SELinux configuration files
|
|
|
|
+#
|
|
|
|
+# This program is free software; you can redistribute it and/or
|
|
|
|
+# modify it under the terms of the GNU General Public License as
|
|
|
|
+# published by the Free Software Foundation; either version 2 of
|
|
|
|
+# the License, or (at your option) any later version.
|
|
|
|
+#
|
|
|
|
+# This program is distributed in the hope that it will be useful,
|
|
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
+# GNU General Public License for more details.
|
|
|
|
+#
|
|
|
|
+# You should have received a copy of the GNU General Public License
|
|
|
|
+# along with this program; if not, write to the Free Software
|
|
|
|
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
|
|
+# 02111-1307 USA
|
|
|
|
+#
|
|
|
|
+#
|
|
|
|
+
|
|
|
|
+import pwd, string
|
|
|
|
+from semanage import *;
|
|
|
|
+class semanageRecords:
|
|
|
|
+ def __init__(self):
|
|
|
|
+ self.sh = semanage_handle_create()
|
|
|
|
+ self.semanaged = semanage_is_managed(self.sh)
|
|
|
|
+ if self.semanaged:
|
|
|
|
+ semanage_connect(self.sh)
|
|
|
|
+
|
|
|
|
+class loginRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+
|
|
|
|
+ def add(self, name, sename, serange):
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange = "s0"
|
|
|
|
+ if sename == "":
|
|
|
|
+ sename = "user_u"
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s" % name)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ raise ValueError("SELinux User %s mapping already defined" % name)
|
|
|
|
+ try:
|
|
|
|
+ pwd.getpwnam(name)
|
|
|
|
+ except:
|
|
|
|
+ raise ValueError("Linux User %s does not exist" % name)
|
|
|
|
+
|
|
|
|
+ (rc,u) = semanage_seuser_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create seuser for %s" % name)
|
|
|
|
+
|
|
|
|
+ semanage_seuser_set_name(self.sh, u, name)
|
|
|
|
+ semanage_seuser_set_mlsrange(self.sh, u, serange)
|
|
|
|
+ semanage_seuser_set_sename(self.sh, u, sename)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_seuser_add(self.sh, k, u)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add SELinux user mapping")
|
|
|
|
+
|
|
|
|
+ def modify(self, name, sename = "", serange = ""):
|
|
|
|
+ (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s" % name)
|
|
|
|
+
|
|
|
|
+ if sename == "" and serange == "":
|
|
|
|
+ raise ValueError("Requires, seuser or serange")
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,u) = semanage_seuser_query(self.sh, k)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query seuser for %s" % name)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("SELinux user %s mapping is not defined." % name)
|
|
|
|
+
|
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_seuser_set_mlsrange(self.sh, u, serange)
|
|
|
|
+ if sename != "":
|
|
|
|
+ semanage_seuser_set_sename(self.sh, u, sename)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_seuser_modify_local(self.sh, k, u)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to modify SELinux user mapping")
|
|
|
|
+ def delete(self, name):
|
|
|
|
+ (rc,k) = semanage_seuser_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s" % name)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_seuser_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("SELinux user %s mapping is not defined." % name)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_seuser_del(self.sh, k)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("SELinux User %s mapping not defined" % name)
|
|
|
|
+
|
|
|
|
+ def get_all(self):
|
|
|
|
+ dict={}
|
|
|
|
+ (status, self.ulist, self.usize) = semanage_seuser_list(self.sh)
|
|
|
|
+ for idx in range(self.usize):
|
|
|
|
+ u = semanage_seuser_by_idx(self.ulist, idx)
|
|
|
|
+ name = semanage_seuser_get_name(u)
|
|
|
|
+ dict[name]=(semanage_seuser_get_sename(u), semanage_seuser_get_mlsrange(u))
|
|
|
|
+ return dict
|
|
|
|
+
|
|
|
|
+ def list(self,heading=1):
|
|
|
|
+ if heading:
|
|
|
|
+ print "\n%-25s %-25s %-25s\n" % ("Login Name", "SELinux User", "MLS/MCS Range")
|
|
|
|
+ dict=self.get_all()
|
|
|
|
+ keys=dict.keys()
|
|
|
|
+ keys.sort()
|
|
|
|
+ for k in keys:
|
|
|
|
+ print "%-25s %-25s %-25s" % (k, dict[k][0], dict[k][1])
|
|
|
|
+
|
|
|
|
+class seluserRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+
|
|
|
|
+ def add(self, name, roles, selevel, serange):
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange = "s0"
|
|
|
|
+ if selevel == "":
|
|
|
|
+ selevel = "s0"
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s" % name)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_user_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("SELinux user %s is already defined." % name)
|
|
|
|
+
|
|
|
|
+ (rc,u) = semanage_user_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create login mapping for %s" % name)
|
|
|
|
+
|
|
|
|
+ semanage_user_set_name(self.sh, u, name)
|
|
|
|
+ for r in roles:
|
|
|
|
+ semanage_user_add_role(self.sh, u, r)
|
|
|
|
+ semanage_user_set_mlsrange(self.sh, u, serange)
|
|
|
|
+ semanage_user_set_mlslevel(self.sh, u, selevel)
|
|
|
|
+ (rc,key) = semanage_user_key_extract(self.sh,u)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not extract key for %s" % name)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_user_add_local(self.sh, k, u)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add SELinux user")
|
|
|
|
+
|
|
|
|
+ def modify(self, name, roles = [], selevel = "", serange = ""):
|
|
|
|
+ if len(roles) == 0 and serange == "" and selevel == "":
|
|
|
|
+ raise ValueError("Requires, roles, level or range")
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s" % name)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_user_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,u) = semanage_user_query(self.sh, k)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("SELinux user %s mapping is not defined locally." % name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query user for %s" % name)
|
|
|
|
+
|
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_user_set_mlsrange(self.sh, u, serange)
|
|
|
|
+ if selevel != "":
|
|
|
|
+ semanage_user_set_mlslevel(self.sh, u, selevel)
|
|
|
|
+ if len(roles) != 0:
|
|
|
|
+ for r in roles:
|
|
|
|
+ semanage_user_add_role(self.sh, u, r)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_user_modify_local(self.sh, k, u)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to modify SELinux user")
|
|
|
|
+
|
|
|
|
+ def delete(self, name):
|
|
|
|
+ (rc,k) = semanage_user_key_create(self.sh, name)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not crpppeate a key for %s" % name)
|
|
|
|
+ (rc,exists) = semanage_user_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("user %s is not defined" % name)
|
|
|
|
+ else:
|
|
|
|
+ (rc,exists) = semanage_user_exists_local(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("user %s is not defined locally, can not delete " % name)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_user_del_local(self.sh, k)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Login User %s not defined" % name)
|
|
|
|
+
|
|
|
|
+ def get_all(self):
|
|
|
|
+ dict={}
|
|
|
|
+ (status, self.ulist, self.usize) = semanage_user_list(self.sh)
|
|
|
|
+ for idx in range(self.usize):
|
|
|
|
+ u = semanage_user_by_idx(self.ulist, idx)
|
|
|
|
+ name = semanage_user_get_name(u)
|
|
|
|
+ (status, rlist, rlist_size) = semanage_user_get_roles(self.sh, u)
|
|
|
|
+ roles = ""
|
|
|
|
+
|
|
|
|
+ if rlist_size:
|
|
|
|
+ roles += char_by_idx(rlist, 0)
|
|
|
|
+ for ridx in range (1,rlist_size):
|
|
|
|
+ roles += " " + char_by_idx(rlist, ridx)
|
|
|
|
+ dict[semanage_user_get_name(u)] = (semanage_user_get_mlslevel(u), semanage_user_get_mlsrange(u), roles)
|
|
|
|
+
|
|
|
|
+ return dict
|
|
|
|
+
|
|
|
|
+ def list(self, heading=1):
|
|
|
|
+ if heading:
|
|
|
|
+ print "\n%-15s %-10s %-20s" % ("", "MLS/", "MLS/")
|
|
|
|
+ print "%-15s %-10s %-15s %-20s\n" % ("SELinux User", "MCS Level", "MCS Range", "SELinux Roles")
|
|
|
|
+ dict=self.get_all()
|
|
|
|
+ keys=dict.keys()
|
|
|
|
+ keys.sort()
|
|
|
|
+ for k in keys:
|
|
|
|
+ print "%-15s %-10s %-15s %s" % (k, dict[k][0], dict[k][1], dict[k][2])
|
|
|
|
+
|
|
|
|
+class portRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+
|
|
|
|
+ def __genkey(self, port, proto):
|
|
|
|
+ if proto == "tcp":
|
|
|
|
+ proto_d=SEMANAGE_PROTO_TCP
|
|
|
|
+ else:
|
|
|
|
+ if proto == "udp":
|
|
|
|
+ proto_d=SEMANAGE_PROTO_UDP
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("Protocol udp or tcp is required")
|
|
|
|
+ if port == "":
|
|
|
|
+ raise ValueError("Port is required")
|
|
|
|
+
|
|
|
|
+ ports=port.split("-")
|
|
|
|
+ if len(ports) == 1:
|
|
|
|
+ low=string.atoi(ports[0])
|
|
|
|
+ high=string.atoi(ports[0])
|
|
|
|
+ else:
|
|
|
|
+ low=string.atoi(ports[0])
|
|
|
|
+ high=string.atoi(ports[1])
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_port_key_create(self.sh, low, high, proto_d)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create a key for %s/%s" % (proto, port))
|
|
|
|
+ return ( k, proto_d, low, high )
|
|
|
|
+
|
|
|
|
+ def add(self, port, proto, serange, type):
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange="s0"
|
|
|
|
+
|
|
|
|
+ if type == "":
|
|
|
|
+ raise ValueError("Type is required")
|
|
|
|
+
|
|
|
|
+ ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_port_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ raise ValueError("Port %s/%s already defined" % (proto, port))
|
|
|
|
+
|
|
|
|
+ (rc,p) = semanage_port_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create port for %s/%s" % (proto, port))
|
|
|
|
+
|
|
|
|
+ semanage_port_set_proto(p, proto_d)
|
|
|
|
+ semanage_port_set_range(p, low, high)
|
|
|
|
+ (rc, con) = semanage_context_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create context for %s/%s" % (proto, port))
|
|
|
|
+
|
|
|
|
+ semanage_context_set_user(self.sh, con, "system_u")
|
|
|
|
+ semanage_context_set_role(self.sh, con, "object_r")
|
|
|
|
+ semanage_context_set_type(self.sh, con, type)
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_port_set_con(p, con)
|
|
|
|
+ semanage_port_add_local(self.sh, k, p)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add port")
|
|
|
|
+
|
|
|
|
+ def modify(self, port, proto, serange, setype):
|
|
|
|
+ if serange == "" and setype == "":
|
|
|
|
+ raise ValueError("Requires, setype or serange")
|
|
|
|
+
|
|
|
|
+ ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
|
|
|
+
|
|
|
|
+ (rc,exists) = semanage_port_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,p) = semanage_port_query(self.sh, k)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("port %s/%s is not defined." % (proto,port))
|
|
|
|
+
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query port for %s/%s" % (proto, port))
|
|
|
|
+
|
|
|
|
+ con = semanage_port_get_con(p)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not get port context for %s/%s" % (proto, port))
|
|
|
|
+
|
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ if setype != "":
|
|
|
|
+ semanage_context_set_type(self.sh, con, setype)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_port_modify_local(self.sh, k, p)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add port")
|
|
|
|
+
|
|
|
|
+ def delete(self, port, proto):
|
|
|
|
+ ( k, proto_d, low, high ) = self.__genkey(port, proto)
|
|
|
|
+ (rc,exists) = semanage_port_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("port %s/%s is not defined." % (proto,port))
|
|
|
|
+ else:
|
|
|
|
+ (rc,exists) = semanage_port_exists_local(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("port %s/%s is not defined localy, can not be deleted." % (proto,port))
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_port_del_local(self.sh, k)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Port %s/%s not defined" % (proto,port))
|
|
|
|
+
|
|
|
|
+ def get_all(self):
|
|
|
|
+ dict={}
|
|
|
|
+ (status, self.plist, self.psize) = semanage_port_list(self.sh)
|
|
|
|
+ for idx in range(self.psize):
|
|
|
|
+ u = semanage_port_by_idx(self.plist, idx)
|
|
|
|
+ con = semanage_port_get_con(u)
|
|
|
|
+ name = semanage_context_get_type(con)
|
|
|
|
+ proto=semanage_port_get_proto_str(u)
|
|
|
|
+ low=semanage_port_get_low(u)
|
|
|
|
+ high = semanage_port_get_high(u)
|
|
|
|
+ if (name, proto) not in dict.keys():
|
|
|
|
+ dict[(name,proto)]=[]
|
|
|
|
+ if low == high:
|
|
|
|
+ dict[(name,proto)].append("%d" % low)
|
|
|
|
+ else:
|
|
|
|
+ dict[(name,proto)].append("%d-%d" % (low, high))
|
|
|
|
+ return dict
|
|
|
|
+
|
|
|
|
+ def list(self, heading=1):
|
|
|
|
+ if heading:
|
|
|
|
+ print "%-30s %-8s %s\n" % ("SELinux Port Name", "Proto", "Port Number")
|
|
|
|
+ dict=self.get_all()
|
2006-01-05 21:39:11 +00:00
|
|
|
+ keys=dict.keys()
|
|
|
|
+ keys.sort()
|
|
|
|
+ for i in keys:
|
2006-01-10 17:12:58 +00:00
|
|
|
+ rec = "%-30s %-8s " % i
|
|
|
|
+ rec += "%s" % dict[i][0]
|
|
|
|
+ for p in dict[i][1:]:
|
|
|
|
+ rec += ", %s" % p
|
|
|
|
+ print rec
|
|
|
|
+
|
2006-01-05 21:39:11 +00:00
|
|
|
+class interfaceRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+
|
|
|
|
+ def add(self, interface, serange, type):
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange="s0"
|
|
|
|
+
|
|
|
|
+ if type == "":
|
2006-01-10 17:12:58 +00:00
|
|
|
+ raise ValueError("SELinux Type is required")
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_iface_key_create(self.sh, interface)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % interface)
|
|
|
|
+ (rc,exists) = semanage_iface_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ raise ValueError("Interface %s already defined" % interface)
|
|
|
|
+
|
|
|
|
+ (rc,iface) = semanage_iface_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create interface for %s" % (interface))
|
|
|
|
+
|
|
|
|
+ rc = semanage_iface_set_name(self.sh, iface, interface)
|
|
|
|
+ (rc, con) = semanage_context_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create context for %s" % interface)
|
|
|
|
+
|
|
|
|
+ semanage_context_set_user(self.sh, con, "system_u")
|
|
|
|
+ semanage_context_set_role(self.sh, con, "object_r")
|
|
|
|
+ semanage_context_set_type(self.sh, con, type)
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_iface_set_ifcon(iface, con)
|
|
|
|
+ semanage_iface_set_msgcon(iface, con)
|
|
|
|
+ semanage_iface_add_local(self.sh, k, iface)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add interface")
|
|
|
|
+
|
|
|
|
+ def modify(self, interface, serange, setype):
|
|
|
|
+ if serange == "" and setype == "":
|
|
|
|
+ raise ValueError("Requires, setype or serange")
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_iface_key_create(self.sh, interface)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't creater key for %s" % interface)
|
|
|
|
+ (rc,exists) = semanage_iface_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,p) = semanage_iface_query(self.sh, k)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("interface %s is not defined." % interface)
|
|
|
|
+
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query interface for %s" % interface)
|
|
|
|
+
|
|
|
|
+ con = semanage_iface_get_ifcon(p)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not get interface context for %s" % interface)
|
|
|
|
+
|
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ if setype != "":
|
|
|
|
+ semanage_context_set_type(self.sh, con, setype)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_iface_modify_local(self.sh, k, p)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add interface")
|
|
|
|
+
|
|
|
|
+ def delete(self, interface):
|
|
|
|
+ (rc,k) = semanage_iface_key_create(self.sh, interface)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % interface)
|
|
|
|
+ (rc,exists) = semanage_iface_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("interface %s is not defined." % interface)
|
|
|
|
+ else:
|
|
|
|
+ (rc,exists) = semanage_iface_exists_local(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("interface %s is not defined localy, can not be deleted." % interface)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_iface_del_local(self.sh, k)
|
2006-01-04 18:53:16 +00:00
|
|
|
+ if semanage_commit(self.sh) < 0:
|
2006-01-05 21:39:11 +00:00
|
|
|
+ raise ValueError("Interface %s not defined" % interface)
|
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ def get_all(self):
|
|
|
|
+ dict={}
|
2006-01-05 21:39:11 +00:00
|
|
|
+ (status, self.plist, self.psize) = semanage_iface_list(self.sh)
|
|
|
|
+ if status < 0:
|
|
|
|
+ raise ValueError("Unable to list interfaces")
|
2006-01-10 17:12:58 +00:00
|
|
|
+ for idx in range(self.psize):
|
|
|
|
+ interface = semanage_iface_by_idx(self.plist, idx)
|
|
|
|
+ con = semanage_iface_get_ifcon(interface)
|
|
|
|
+ dict[semanage_iface_get_name(interface)]=(semanage_context_get_user(con), semanage_context_get_role(con), semanage_context_get_type(con), semanage_context_get_mls(con))
|
|
|
|
+
|
|
|
|
+ return dict
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ def list(self, heading=1):
|
2006-01-05 21:39:11 +00:00
|
|
|
+ if heading:
|
|
|
|
+ print "%-30s %s\n" % ("SELinux Interface", "Context")
|
2006-01-10 17:12:58 +00:00
|
|
|
+ dict=self.get_all()
|
|
|
|
+ keys=dict.keys()
|
|
|
|
+ keys.sort()
|
|
|
|
+ for k in keys:
|
|
|
|
+ print "%-30s %s:%s:%s:%s " % (k,dict[k][0], dict[k][1],dict[k][2], dict[k][3])
|
|
|
|
+
|
|
|
|
+class fcontextRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+ self.file_types={}
|
|
|
|
+ self.file_types[""] = SEMANAGE_FCONTEXT_ALL;
|
|
|
|
+ self.file_types["all files"] = SEMANAGE_FCONTEXT_ALL;
|
|
|
|
+ self.file_types["--"] = SEMANAGE_FCONTEXT_REG;
|
|
|
|
+ self.file_types["regular file"] = SEMANAGE_FCONTEXT_REG;
|
|
|
|
+ self.file_types["-d"] = SEMANAGE_FCONTEXT_DIR;
|
|
|
|
+ self.file_types["directory"] = SEMANAGE_FCONTEXT_DIR;
|
|
|
|
+ self.file_types["-c"] = SEMANAGE_FCONTEXT_CHAR;
|
|
|
|
+ self.file_types["character device"] = SEMANAGE_FCONTEXT_CHAR;
|
|
|
|
+ self.file_types["-b"] = SEMANAGE_FCONTEXT_BLOCK;
|
|
|
|
+ self.file_types["block device"] = SEMANAGE_FCONTEXT_BLOCK;
|
|
|
|
+ self.file_types["-s"] = SEMANAGE_FCONTEXT_SOCK;
|
|
|
|
+ self.file_types["socket"] = SEMANAGE_FCONTEXT_SOCK;
|
|
|
|
+ self.file_types["symbolic link"] = SEMANAGE_FCONTEXT_LINK;
|
|
|
|
+ self.file_types["-p"] = SEMANAGE_FCONTEXT_PIPE;
|
|
|
|
+ self.file_types["named pipe"] = SEMANAGE_FCONTEXT_PIPE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ def add(self, target, type, ftype="", serange="s0", seuser="system_u"):
|
|
|
|
+ if seuser == "":
|
|
|
|
+ seuser="system_u"
|
|
|
|
+
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange="s0"
|
|
|
|
+
|
|
|
|
+ if type == "":
|
|
|
|
+ raise ValueError("SELinux Type is required")
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ print (rc, exists, target)
|
|
|
|
+ if exists:
|
|
|
|
+ raise ValueError("fcontext %s already defined" % target)
|
|
|
|
+ (rc,fcontext) = semanage_fcontext_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create fcontext for %s" % target)
|
|
|
|
+
|
|
|
|
+ rc = semanage_fcontext_set_expr(self.sh, fcontext, target)
|
|
|
|
+ (rc, con) = semanage_context_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create context for %s" % target)
|
|
|
|
+
|
|
|
|
+ semanage_context_set_user(self.sh, con, seuser)
|
|
|
|
+ semanage_context_set_role(self.sh, con, "object_r")
|
|
|
|
+ semanage_context_set_type(self.sh, con, type)
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ semanage_fcontext_set_type(fcontext, self.file_types[ftype])
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_set_con(fcontext, con)
|
|
|
|
+ semanage_fcontext_add_local(self.sh, k, fcontext)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add fcontext")
|
|
|
|
+
|
|
|
|
+ def modify(self, target, setype, ftype, serange, seuser):
|
|
|
|
+ if serange == "" and setype == "" and seuser == "":
|
|
|
|
+ raise ValueError("Requires, setype, serange or seuser")
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't creater key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,p) = semanage_fcontext_query(self.sh, k)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("fcontext %s is not defined." % target)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query fcontext for %s" % target)
|
|
|
|
+ con = semanage_fcontext_get_con(p)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not get fcontext context for %s" % target)
|
|
|
|
+
|
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ if seuser != "":
|
|
|
|
+ semanage_context_set_user(self.sh, con, seuser)
|
|
|
|
+ if setype != "":
|
|
|
|
+ semanage_context_set_type(self.sh, con, setype)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_modify_local(self.sh, k, p)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add fcontext")
|
|
|
|
+
|
|
|
|
+ def delete(self, target):
|
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("fcontext %s is not defined." % target)
|
|
|
|
+ else:
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists_local(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("fcontext %s is not defined localy, can not be deleted." % target)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_del_local(self.sh, k)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("fcontext %s not defined" % target)
|
|
|
|
+
|
|
|
|
+ def get_all(self):
|
2006-01-05 21:39:11 +00:00
|
|
|
+ dict={}
|
2006-01-10 17:12:58 +00:00
|
|
|
+ (status, self.plist, self.psize) = semanage_fcontext_list(self.sh)
|
|
|
|
+ if status < 0:
|
|
|
|
+ raise ValueError("Unable to list fcontexts")
|
|
|
|
+
|
2006-01-05 21:39:11 +00:00
|
|
|
+ for idx in range(self.psize):
|
2006-01-10 17:12:58 +00:00
|
|
|
+ fcontext = semanage_fcontext_by_idx(self.plist, idx)
|
|
|
|
+ expr=semanage_fcontext_get_expr(fcontext)
|
|
|
|
+ ftype=semanage_fcontext_get_type_str(fcontext)
|
|
|
|
+ con = semanage_fcontext_get_con(fcontext)
|
|
|
|
+ if con:
|
|
|
|
+ dict[expr, ftype]=(semanage_context_get_user(con), semanage_context_get_role(con), semanage_context_get_type(con), semanage_context_get_mls(con))
|
|
|
|
+ else:
|
|
|
|
+ dict[expr, ftype]=con
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ return dict
|
|
|
|
+
|
|
|
|
+ def list(self, heading=1):
|
|
|
|
+ if heading:
|
|
|
|
+ print "%-50s %-18s %s\n" % ("SELinux fcontext", "type", "Context")
|
|
|
|
+ dict=self.get_all()
|
|
|
|
+ keys=dict.keys()
|
|
|
|
+ for k in keys:
|
|
|
|
+ if dict[k]:
|
|
|
|
+ print "%-50s %-18s %s:%s:%s:%s " % (k[0], k[1], dict[k][0], dict[k][1],dict[k][2], dict[k][3])
|
|
|
|
+ else:
|
|
|
|
+ print "%-50s %-18s <<None>>" % (k[0], k[1])
|
|
|
|
+
|
|
|
|
+class booleanRecords(semanageRecords):
|
|
|
|
+ def __init__(self):
|
|
|
|
+ semanageRecords.__init__(self)
|
|
|
|
+
|
|
|
|
+ def add(self, target, type, ftype="", serange="s0", seuser="system_u"):
|
|
|
|
+ if seuser == "":
|
|
|
|
+ seuser="system_u"
|
|
|
|
+
|
|
|
|
+ if serange == "":
|
|
|
|
+ serange="s0"
|
|
|
|
+
|
|
|
|
+ if type == "":
|
|
|
|
+ raise ValueError("SELinux Type is required")
|
|
|
|
+
|
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ print (rc, exists, target)
|
|
|
|
+ if exists:
|
|
|
|
+ raise ValueError("fcontext %s already defined" % target)
|
|
|
|
+ (rc,fcontext) = semanage_fcontext_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create fcontext for %s" % target)
|
|
|
|
+
|
|
|
|
+ rc = semanage_fcontext_set_expr(self.sh, fcontext, target)
|
|
|
|
+ (rc, con) = semanage_context_create(self.sh)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not create context for %s" % target)
|
|
|
|
+
|
|
|
|
+ semanage_context_set_user(self.sh, con, seuser)
|
|
|
|
+ semanage_context_set_role(self.sh, con, "object_r")
|
|
|
|
+ semanage_context_set_type(self.sh, con, type)
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ semanage_fcontext_set_type(fcontext, self.file_types[ftype])
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_set_con(fcontext, con)
|
|
|
|
+ semanage_fcontext_add_local(self.sh, k, fcontext)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add fcontext")
|
|
|
|
+
|
|
|
|
+ def modify(self, target, setype, ftype, serange, seuser):
|
|
|
|
+ if serange == "" and setype == "" and seuser == "":
|
|
|
|
+ raise ValueError("Requires, setype, serange or seuser")
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't creater key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ if exists:
|
|
|
|
+ (rc,p) = semanage_fcontext_query(self.sh, k)
|
|
|
|
+ else:
|
|
|
|
+ raise ValueError("fcontext %s is not defined." % target)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not query fcontext for %s" % target)
|
|
|
|
+ con = semanage_fcontext_get_con(p)
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Could not get fcontext context for %s" % target)
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ if serange != "":
|
|
|
|
+ semanage_context_set_mls(self.sh, con, serange)
|
|
|
|
+ if seuser != "":
|
|
|
|
+ semanage_context_set_user(self.sh, con, seuser)
|
|
|
|
+ if setype != "":
|
|
|
|
+ semanage_context_set_type(self.sh, con, setype)
|
|
|
|
+
|
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_modify_local(self.sh, k, p)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("Failed to add fcontext")
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ def delete(self, target):
|
|
|
|
+ (rc,k) = semanage_fcontext_key_create(self.sh, target, self.file_types[ftype])
|
|
|
|
+ if rc < 0:
|
|
|
|
+ raise ValueError("Can't create key for %s" % target)
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("fcontext %s is not defined." % target)
|
|
|
|
+ else:
|
|
|
|
+ (rc,exists) = semanage_fcontext_exists_local(self.sh, k)
|
|
|
|
+ if not exists:
|
|
|
|
+ raise ValueError("fcontext %s is not defined localy, can not be deleted." % target)
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ semanage_begin_transaction(self.sh)
|
|
|
|
+ semanage_fcontext_del_local(self.sh, k)
|
|
|
|
+ if semanage_commit(self.sh) < 0:
|
|
|
|
+ raise ValueError("fcontext %s not defined" % target)
|
|
|
|
+
|
|
|
|
+ def get_all(self):
|
|
|
|
+ dict={}
|
|
|
|
+ (status, self.plist, self.psize) = semanage_fcontext_list(self.sh)
|
|
|
|
+ if status < 0:
|
|
|
|
+ raise ValueError("Unable to list fcontexts")
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ for idx in range(self.psize):
|
|
|
|
+ fcontext = semanage_fcontext_by_idx(self.plist, idx)
|
|
|
|
+ expr=semanage_fcontext_get_expr(fcontext)
|
|
|
|
+ ftype=semanage_fcontext_get_type_str(fcontext)
|
|
|
|
+ con = semanage_fcontext_get_con(fcontext)
|
|
|
|
+ if con:
|
|
|
|
+ dict[expr, ftype]=(semanage_context_get_user(con), semanage_context_get_role(con), semanage_context_get_type(con), semanage_context_get_mls(con))
|
|
|
|
+ else:
|
|
|
|
+ dict[expr, ftype]=con
|
2006-01-05 21:39:11 +00:00
|
|
|
+
|
2006-01-10 17:12:58 +00:00
|
|
|
+ return dict
|
|
|
|
+
|
|
|
|
+ def list(self, heading=1):
|
|
|
|
+ if heading:
|
|
|
|
+ print "%-50s %-18s %s\n" % ("SELinux fcontext", "type", "Context")
|
|
|
|
+ dict=self.get_all()
|
|
|
|
+ keys=dict.keys()
|
|
|
|
+ for k in keys:
|
|
|
|
+ if dict[k]:
|
|
|
|
+ print "%-50s %-18s %s:%s:%s:%s " % (k[0], k[1], dict[k][0], dict[k][1],dict[k][2], dict[k][3])
|
|
|
|
+ else:
|
|
|
|
+ print "%-50s %-18s <<None>>" % (k[0], k[1])
|
|
|
|
+
|
|
|
|
+
|