|
From: <kma...@us...> - 2006-11-27 19:17:14
|
Revision: 2106
http://svn.sourceforge.net/selinux/?rev=2106&view=rev
Author: kmacmillan
Date: 2006-11-27 11:17:08 -0800 (Mon, 27 Nov 2006)
Log Message:
-----------
Author: Michael C Thompson
Email: tho...@us...
Subject: genhomedircon
Date: Thu, 16 Nov 2006 11:24:03 -0600
I've noticed that genhomedircon does not have the proper return codes on
some error and success paths. This patch addresses these return codes as
follow:
* usage function by default returns 0, and the desired return code can
be specified via a parameter. This facilitates the fix to the current
behaviour that 1 is returned on 'genhomedircon -h'.
* I have noticed that as secadm (this is a bug? will start a separate
thread) fails to successfully call semanage_connect(). The result of
this operation is now checked, and the script will exit on error.
* If the attempt to write the homedir contexts out fails, a proper error
code will be returned (previously, 1 would be returned).
This also moves the parsing of /etc/shells to after the uid check for a
minimal time savings.
Thanks,
Mike
Signed-of-by: Michael Thompson <mct...@us...>
Acked-by: Karl MacMillan <kma...@me...>
Acked-by: Stephen Smalley <sd...@ty...>
Modified Paths:
--------------
trunk/policycoreutils/ChangeLog
trunk/policycoreutils/scripts/genhomedircon
Modified: trunk/policycoreutils/ChangeLog
===================================================================
--- trunk/policycoreutils/ChangeLog 2006-11-27 19:11:08 UTC (rev 2105)
+++ trunk/policycoreutils/ChangeLog 2006-11-27 19:17:08 UTC (rev 2106)
@@ -1,3 +1,6 @@
+1.33.5 2006-11-27
+ * Merged patch from Micheal C Thompson to clean up genhomedircon
+ error handling.
1.33.4 2006-11-21
* Merged po file updates from Dan Walsh.
Modified: trunk/policycoreutils/scripts/genhomedircon
===================================================================
--- trunk/policycoreutils/scripts/genhomedircon 2006-11-27 19:11:08 UTC (rev 2105)
+++ trunk/policycoreutils/scripts/genhomedircon 2006-11-27 19:17:08 UTC (rev 2106)
@@ -29,17 +29,6 @@
import gettext
gettext.install('policycoreutils')
-try:
- fd = open("/etc/shells", 'r')
- VALID_SHELLS = fd.read().split("\n")
- fd.close()
- if "/sbin/nologin" in VALID_SHELLS:
- VALID_SHELLS.remove("/sbin/nologin")
- if "" in VALID_SHELLS:
- VALID_SHELLS.remove("")
-except:
- VALID_SHELLS = ['/bin/sh', '/bin/bash', '/bin/ash', '/bin/bsh', '/bin/ksh', '/usr/bin/ksh', '/usr/bin/pdksh', '/bin/tcsh', '/bin/csh', '/bin/zsh']
-
def grep(file, var):
ret = ""
fd = open(file, 'r')
@@ -114,12 +103,13 @@
return val
return "targeted"
-def usage(error = ""):
+def usage(rc=0, error = ""):
if error != "":
sys.stderr.write("%s\n" % error)
+ rc = 1
sys.stderr.write("Usage: %s [ -d selinuxdir ] [-n | --nopasswd] [-t selinuxtype ]\n" % sys.argv[0])
sys.stderr.flush()
- sys.exit(1)
+ sys.exit(rc)
def warning(warning = ""):
sys.stderr.write("%s\n" % warning)
@@ -136,7 +126,9 @@
self.semanageHandle = semanage_handle_create()
self.semanaged = semanage_is_managed(self.semanageHandle)
if self.semanaged:
- semanage_connect(self.semanageHandle)
+ rc = semanage_connect(self.semanageHandle)
+ if rc:
+ errorExit("Unable to connect to semanage")
(status, self.ulist) = semanage_user_list(self.semanageHandle)
self.type = type
self.selinuxdir = selinuxdir +"/"
@@ -336,18 +328,25 @@
print self.genoutput()
def write(self):
- try:
- fd = open(self.getFileContextDir()+"/file_contexts.homedirs", "w")
- fd.write(self.genoutput())
- fd.close()
- except IOError, error:
- sys.stderr.write("%s: %s\n" % ( sys.argv[0], error ))
+ fd = open(self.getFileContextDir()+"/file_contexts.homedirs", "w")
+ fd.write(self.genoutput())
+ fd.close()
-
if os.getuid() > 0 or os.geteuid() > 0:
print _("You must be root to run %s.") % sys.argv[0]
sys.exit(1)
+try:
+ fd = open("/etc/shells", 'r')
+ VALID_SHELLS = fd.read().split("\n")
+ fd.close()
+ if "/sbin/nologin" in VALID_SHELLS:
+ VALID_SHELLS.remove("/sbin/nologin")
+ if "" in VALID_SHELLS:
+ VALID_SHELLS.remove("")
+except:
+ VALID_SHELLS = ['/bin/sh', '/bin/bash', '/bin/ash', '/bin/bsh', '/bin/ksh', '/usr/bin/ksh', '/usr/bin/pdksh', '/bin/tcsh', '/bin/csh', '/bin/zsh']
+
#
# This script will generate home dir file context
# based off the homedir_template file, entries in the password file, and
@@ -369,15 +368,19 @@
directory = a
if o == '--help' or o == "-h":
usage()
+except getopt.error, error:
+ errorExit(_("Options Error %s ") % error)
+if type == None:
+ type = getSELinuxType(directory)
- if type == None:
- type = getSELinuxType(directory)
+if len(cmds) != 0:
+ usage(1)
- if len(cmds) != 0:
- usage()
- selconf = selinuxConfig(directory, type, usepwd)
+selconf = selinuxConfig(directory, type, usepwd)
+try:
selconf.write()
+except IOError, error:
+ sys.stderr.write("%s: %s\n" % ( sys.argv[0], error ))
+ sys.exit(1)
-except getopt.error, error:
- errorExit(_("Options Error %s ") % error)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|