All of lore.kernel.org
 help / color / mirror / Atom feed
* semanage patch
@ 2006-04-14 11:08 Russell Coker
  2006-04-14 17:08 ` Stephen Smalley
  0 siblings, 1 reply; 6+ messages in thread
From: Russell Coker @ 2006-04-14 11:08 UTC (permalink / raw)
  To: SE-Linux; +Cc: Daniel J Walsh

[-- Attachment #1: Type: text/plain, Size: 1035 bytes --]

The attached patch against the semanage utility in rawhide allows it to create 
and modify prefixes.

Also when testing semanage I noticed that it let me remove a SE Linux user 
when a login still referred to it.  After doing so it then wouldn't let me 
recreate the user (with a confusing error message).  But as that bug didn't 
stop me from doing my work I haven't taken the time to fix it.

As the complexity of the semanage utility continues to increase I think that 
we need to split it into separate programs selogin, seuser, seport, 
seinterface, sefcontext, and setranslation.  This will make the man page 
easier to understand and generally increase ease of use.  It will also allow 
shell command-completion to do more of the work for the sysadmin.  What do 
you think?

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page

[-- Attachment #2: diff --]
[-- Type: text/x-diff, Size: 4170 bytes --]

--- seobject.py	2006-04-14 20:36:08.000000000 +1000
+++ /usr/lib/python2.4/site-packages/seobject.py	2006-04-14 20:56:04.000000000 +1000
@@ -381,7 +381,7 @@
 	def __init__(self):
 		semanageRecords.__init__(self)
 
-	def add(self, name, roles, selevel, serange):
+	def add(self, name, roles, selevel, serange, prefix):
 		if is_mls_enabled == 1:
 			if serange == "":
 				serange = "s0"
@@ -427,6 +427,9 @@
 				if rc < 0:
 					raise ValueError("Could not set MLS level for %s" % name)
 
+			rc = semanage_user_set_prefix(self.sh, u, prefix)
+			if rc < 0:
+				raise ValueError("Could not add prefix %s for %s" % (r, prefix))
 			(rc,key) = semanage_user_key_extract(self.sh,u)
 			if rc < 0:
 				raise ValueError("Could not extract key for %s" % name)
@@ -451,13 +454,13 @@
 		semanage_user_key_free(k)
 		semanage_user_free(u)
 
-	def modify(self, name, roles = [], selevel = "", serange = ""):
+	def modify(self, name, roles = [], selevel = "", serange = "", prefix = ""):
 		try:
-			if len(roles) == 0  and serange == "" and selevel == "":
+			if prefix == "" and len(roles) == 0  and serange == "" and selevel == "":
 				if is_mls_enabled == 1:
-					raise ValueError("Requires roles, level or range")
+					raise ValueError("Requires prefix, roles, level or range")
 				else:
-					raise ValueError("Requires roles")
+					raise ValueError("Requires prefix or roles")
 
 			(rc,k) = semanage_user_key_create(self.sh, name)
 			if rc < 0:
@@ -478,6 +481,9 @@
 			if selevel != "":
 				semanage_user_set_mlslevel(self.sh, u, untranslate(selevel))
 
+			if prefix != "":
+				semanage_user_set_prefix(self.sh, u, prefix)
+
 			if len(roles) != 0:
 				for r in roles:
 					semanage_user_add_role(self.sh, u, r)
--- semanage	2006-04-14 20:46:23.000000000 +1000
+++ /usr/sbin/semanage	2006-04-14 20:56:56.000000000 +1000
@@ -32,7 +32,7 @@
 		print '\
 semanage {login|user|port|interface|fcontext|translation} -l [-n] \n\
 semanage login -{a|d|m} [-sr] login_name\n\
-semanage user -{a|d|m} [-LrR] selinux_name\n\
+semanage user -{a|d|m} [-LrRP] selinux_name\n\
 semanage port -{a|d|m} [-tr] [ -p protocol ] port | port_range\n\
 semanage interface -{a|d|m} [-tr] interface_spec\n\
 semanage fcontext -{a|d|m} [-frst] file_spec\n\
@@ -60,6 +60,7 @@
 		-p (named pipe) \n\n\
 \
 	-p, --proto      Port protocol (tcp or udp)\n\
+	-P, --prefix     Prefix for home directory labeling\n\
 	-L, --level      Default SELinux Level (MLS/MCS Systems only)\n\
 	-R, --roles      SELinux Roles (ex: "sysadm_r staff_r")\n\
 	-T, --trans      SELinux Level Translation (MLS/MCS Systems only)\n\n\
@@ -83,7 +84,7 @@
 		valid_option["login"] = []
 		valid_option["login"] += valid_everyone + [ '-s', '--seuser', '-r', '--range']
 		valid_option["user"] = []
-		valid_option["user"] += valid_everyone + [ '-L', '--level', '-r', '--range', '-R', '--roles' ] 
+		valid_option["user"] += valid_everyone + [ '-L', '--level', '-r', '--range', '-R', '--roles', '-P', '--prefix' ] 
 		valid_option["port"] = []
 		valid_option["port"] += valid_everyone + [ '-t', '--type', '-r', '--range', '-p', '--protocol' ] 
 		valid_option["interface"] = []
@@ -109,6 +110,7 @@
 		setrans = ""
 		roles = ""
 		seuser = ""
+		prefix = ""
 		heading=1
 
 		add = 0
@@ -126,7 +128,7 @@
 		args = sys.argv[2:]
 
 		gopts, cmds = getopt.getopt(args,
-					    'adf:lhmnp:s:R:L:r:t:T:',
+					    'adf:lhmnp:s:R:L:r:t:T:P:',
 					    ['add',
 					     'delete',
 					     'ftype=',
@@ -140,7 +142,8 @@
 					     'level=',
 					     'roles=',
 					     'type=',
-					     'trans='
+					     'trans=',
+					     'prefix='
 					     ])
 		for o, a in gopts:
 			if o not in option_dict[object]:
@@ -185,6 +188,9 @@
 			if o == "-p" or o == '--proto':
 				proto = a
 
+			if o == "-P" or o == '--prefix':
+				prefix = a
+
 			if o == "-R" or o == '--roles':
 				roles = roles + " " + a
 
@@ -235,7 +241,7 @@
 				rlist = roles.split()
 				if len(rlist) == 0:
 					raise ValueError("You must specify a role")
-				OBJECT.add(target, rlist, selevel, serange)
+				OBJECT.add(target, rlist, selevel, serange, prefix)
 
 			if object == "port":
 				OBJECT.add(target, proto, serange, setype)

^ permalink raw reply	[flat|nested] 6+ messages in thread
[parent not found: <C92C0B59.BBA5F%csellers@tresys.com>]
* semanage patch
@ 2006-01-14 11:19 Russell Coker
  0 siblings, 0 replies; 6+ messages in thread
From: Russell Coker @ 2006-01-14 11:19 UTC (permalink / raw)
  To: SE-Linux, Daniel Walsh

[-- Attachment #1: Type: text/plain, Size: 649 bytes --]

The attached patch fixes a bug in a check for user existence that prevented 
adding a new user, allows specifying the default level for users via the -L 
option, and fixes a mis-spelling of "delete" in code.

Also attached a re-written man page that uses better formatting and more 
precision in the SYNOPSIS section.  The changes were significant enough that 
diff wouldn't do anything useful.

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page

[-- Attachment #2: diff --]
[-- Type: text/x-diff, Size: 1233 bytes --]

--- seobject.py.orig	2006-01-15 07:06:59.000000000 +1100
+++ seobject.py	2006-01-15 07:07:03.000000000 +1100
@@ -134,7 +134,7 @@
 			raise ValueError("Could not create a key for %s" % name)
 
 		(rc,exists) = semanage_user_exists(self.sh, k)
-		if not exists:
+		if exists:
 			raise ValueError("SELinux user %s is already defined." % name)
 
 		(rc,u) = semanage_user_create(self.sh)
--- semanage.orig	2006-01-15 07:03:30.000000000 +1100
+++ semanage	2006-01-15 07:08:52.000000000 +1100
@@ -84,7 +84,7 @@
 			
 		args = sys.argv[2:]
 		gopts, cmds = getopt.getopt(args,
-					    'adf:lhmnp:P:s:R:r:t:v',
+					    'adf:lhmnp:P:s:R:L:r:t:v',
 					    ['add',
 					     'delete',
 					     'ftype=',
@@ -96,6 +96,7 @@
 					     'proto=',
 					     'seuser=',
 					     'range=',
+					     'level=',
 					     'roles=',
 					     'type=',
 					     'verbose'
@@ -106,7 +107,7 @@
 					usage()
 				add = 1
 				
-			if o == "-d"  or o == "--delese":
+			if o == "-d"  or o == "--delete":
 				if modify or add:
 					usage()
 				delete = 1
@@ -126,6 +127,9 @@
 			if o == "-r" or o == '--range':
 				serange = a
 
+			if o == "-L" or o == '--level':
+				selevel = a
+
 			if o == "-P" or o == '--proto':
 				proto = a
 

[-- Attachment #3: semanage.8 --]
[-- Type: application/x-troff, Size: 1299 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-12-14 13:23 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-14 11:08 semanage patch Russell Coker
2006-04-14 17:08 ` Stephen Smalley
2006-04-15  3:49   ` Russell Coker
2006-04-15 13:05     ` Steve Grubb
     [not found] <C92C0B59.BBA5F%csellers@tresys.com>
2010-12-14 13:23 ` Semanage Patch Daniel J Walsh
  -- strict thread matches above, loose matches on Subject: below --
2006-01-14 11:19 semanage patch Russell Coker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.