* Improve Python 3 support in policycoreutils
@ 2015-07-21 0:38 Michal Srb
2015-07-21 0:38 ` [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3 Michal Srb
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Michal Srb @ 2015-07-21 0:38 UTC (permalink / raw)
To: selinux
Hello,
These patches try to add Python 3 support to the following places under policycoreutils/:
audit2allow/
sandbox/
scripts/
semanage/ (except seobject.py)
Patch for the seobject.py should follow later.
Thanks
Michal
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
@ 2015-07-21 0:38 ` Michal Srb
2015-07-21 0:38 ` [PATCH 2/4] policycoreutils/sandbox: " Michal Srb
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Michal Srb @ 2015-07-21 0:38 UTC (permalink / raw)
To: selinux
- replace print statement with print function
- use reserved word `as` in try-except
- replace deprecated assert_() method with assertTrue() in unit tests
Signed-off-by: Michal Srb <msrb@redhat.com>
---
policycoreutils/audit2allow/audit2allow | 66 ++++++++++++-------------
policycoreutils/audit2allow/audit2why | 64 ++++++++++++------------
policycoreutils/audit2allow/sepolgen-ifgen | 12 ++---
policycoreutils/audit2allow/test_audit2allow.py | 8 +--
4 files changed, 75 insertions(+), 75 deletions(-)
diff --git a/policycoreutils/audit2allow/audit2allow b/policycoreutils/audit2allow/audit2allow
index c9713a2..0688b63 100644
--- a/policycoreutils/audit2allow/audit2allow
+++ b/policycoreutils/audit2allow/audit2allow
@@ -135,13 +135,13 @@ class AuditToPolicy:
elif self.__options.audit:
try:
messages = audit.get_audit_msgs()
- except OSError, e:
+ except OSError as e:
sys.stderr.write('could not run ausearch - "%s"\n' % str(e))
sys.exit(1)
elif self.__options.boot:
try:
messages = audit.get_audit_boot_msgs()
- except OSError, e:
+ except OSError as e:
sys.stderr.write('could not run ausearch - "%s"\n' % str(e))
sys.exit(1)
else:
@@ -152,7 +152,7 @@ class AuditToPolicy:
if filename is not None:
try:
f = open(filename)
- except IOError, e:
+ except IOError as e:
sys.stderr.write('could not open file %s - "%s"\n' % (filename, str(e)))
sys.exit(1)
@@ -214,7 +214,7 @@ class AuditToPolicy:
try:
fd = open(filename, "w")
- except IOError, e:
+ except IOError as e:
sys.stderr.write("could not write output file: %s\n" % str(e))
sys.exit(1)
@@ -225,8 +225,8 @@ class AuditToPolicy:
try:
mc.create_module_package(filename, self.__options.refpolicy)
- except RuntimeError, e:
- print e
+ except RuntimeError as e:
+ print(e)
sys.exit(1)
sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
@@ -240,44 +240,44 @@ class AuditToPolicy:
rc = i.type
data = i.data
if rc >= 0:
- print "%s\n\tWas caused by:" % i.message
+ print("%s\n\tWas caused by:" % i.message)
if rc == audit2why.ALLOW:
- print "\t\tUnknown - would be allowed by active policy\n",
- print "\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n"
- print "\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n"
+ print("\t\tUnknown - would be allowed by active policy")
+ print("\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n")
+ print("\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n")
continue
if rc == audit2why.DONTAUDIT:
- print "\t\tUnknown - should be dontaudit'd by active policy\n",
- print "\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n"
- print "\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n"
+ print("\t\tUnknown - should be dontaudit'd by active policy")
+ print("\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n")
+ print("\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n")
continue
if rc == audit2why.BOOLEAN:
if len(data) > 1:
- print "\tOne of the following booleans was set incorrectly."
+ print("\tOne of the following booleans was set incorrectly.")
for b in data:
- print "\tDescription:\n\t%s\n" % seobject.boolean_desc(b[0])
- print "\tAllow access by executing:\n\t# setsebool -P %s %d" % (b[0], b[1])
+ print("\tDescription:\n\t%s\n" % seobject.boolean_desc(b[0]))
+ print("\tAllow access by executing:\n\t# setsebool -P %s %d" % (b[0], b[1]))
else:
- print "\tThe boolean %s was set incorrectly. " % (data[0][0])
- print "\tDescription:\n\t%s\n" % seobject.boolean_desc(data[0][0])
- print "\tAllow access by executing:\n\t# setsebool -P %s %d" % (data[0][0], data[0][1])
+ print("\tThe boolean %s was set incorrectly. " % (data[0][0]))
+ print("\tDescription:\n\t%s\n" % seobject.boolean_desc(data[0][0]))
+ print("\tAllow access by executing:\n\t# setsebool -P %s %d" % (data[0][0], data[0][1]))
continue
if rc == audit2why.TERULE:
- print "\t\tMissing type enforcement (TE) allow rule.\n"
- print "\t\tYou can use audit2allow to generate a loadable module to allow this access.\n"
+ print("\t\tMissing type enforcement (TE) allow rule.\n")
+ print("\t\tYou can use audit2allow to generate a loadable module to allow this access.\n")
continue
if rc == audit2why.CONSTRAINT:
- print #!!!! This avc is a constraint violation. You would need to modify the attributes of either the source or target types to allow this access.\n"
- print "#Constraint rule:"
- print "\n\t" + data[0]
+ print() #!!!! This avc is a constraint violation. You would need to modify the attributes of either the source or target types to allow this access.\n"
+ print("#Constraint rule:")
+ print("\n\t" + data[0])
for reason in data[1:]:
- print "#\tPossible cause is the source %s and target %s are different.\n" % reason
+ print("#\tPossible cause is the source %s and target %s are different.\n" % reason)
if rc == audit2why.RBAC:
- print "\t\tMissing role allow rule.\n"
- print "\t\tAdd an allow rule for the role pair.\n"
+ print("\t\tMissing role allow rule.\n")
+ print("\t\tAdd an allow rule for the role pair.\n")
continue
audit2why.finish()
@@ -288,8 +288,8 @@ class AuditToPolicy:
if self.__options.audit2why:
try:
return self.__output_audit2why()
- except RuntimeError, e:
- print e
+ except RuntimeError as e:
+ print(e)
sys.exit(1)
g = policygen.PolicyGenerator()
@@ -348,11 +348,11 @@ class AuditToPolicy:
self.__output()
except KeyboardInterrupt:
sys.exit(0)
- except ValueError, e:
- print e
+ except ValueError as e:
+ print(e)
sys.exit(1)
- except IOError, e:
- print e
+ except IOError as e:
+ print(e)
sys.exit(1)
if __name__ == "__main__":
diff --git a/policycoreutils/audit2allow/audit2why b/policycoreutils/audit2allow/audit2why
index 323eddd..09422a2 100644
--- a/policycoreutils/audit2allow/audit2why
+++ b/policycoreutils/audit2allow/audit2why
@@ -135,13 +135,13 @@ class AuditToPolicy:
elif self.__options.audit:
try:
messages = audit.get_audit_msgs()
- except OSError, e:
+ except OSError as e:
sys.stderr.write('could not run ausearch - "%s"\n' % str(e))
sys.exit(1)
elif self.__options.boot:
try:
messages = audit.get_audit_boot_msgs()
- except OSError, e:
+ except OSError as e:
sys.stderr.write('could not run ausearch - "%s"\n' % str(e))
sys.exit(1)
else:
@@ -152,7 +152,7 @@ class AuditToPolicy:
if filename is not None:
try:
f = open(filename)
- except IOError, e:
+ except IOError as e:
sys.stderr.write('could not open file %s - "%s"\n' % (filename, str(e)))
sys.exit(1)
@@ -214,7 +214,7 @@ class AuditToPolicy:
try:
fd = open(filename, "w")
- except IOError, e:
+ except IOError as e:
sys.stderr.write("could not write output file: %s\n" % str(e))
sys.exit(1)
@@ -225,8 +225,8 @@ class AuditToPolicy:
try:
mc.create_module_package(filename, self.__options.refpolicy)
- except RuntimeError, e:
- print e
+ except RuntimeError as e:
+ print(e)
sys.exit(1)
sys.stdout.write(_("******************** IMPORTANT ***********************\n"))
@@ -240,43 +240,43 @@ class AuditToPolicy:
rc = i.type
data = i.data
if rc >= 0:
- print "%s\n\tWas caused by:" % i.message
+ print("%s\n\tWas caused by:" % i.message)
if rc == audit2why.ALLOW:
- print "\t\tUnknown - would be allowed by active policy\n",
- print "\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n"
- print "\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n"
+ print("\t\tUnknown - would be allowed by active policy")
+ print("\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n")
+ print("\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n")
continue
if rc == audit2why.DONTAUDIT:
- print "\t\tUnknown - should be dontaudit'd by active policy\n",
- print "\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n"
- print "\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n"
+ print("\t\tUnknown - should be dontaudit'd by active policy")
+ print("\t\tPossible mismatch between this policy and the one under which the audit message was generated.\n")
+ print("\t\tPossible mismatch between current in-memory boolean settings vs. permanent ones.\n")
continue
if rc == audit2why.BOOLEAN:
if len(data) > 1:
- print "\tOne of the following booleans was set incorrectly."
+ print("\tOne of the following booleans was set incorrectly.")
for b in data:
- print "\tDescription:\n\t%s\n" % seobject.boolean_desc(b[0])
- print "\tAllow access by executing:\n\t# setsebool -P %s %d" % (b[0], b[1])
+ print("\tDescription:\n\t%s\n" % seobject.boolean_desc(b[0]))
+ print("\tAllow access by executing:\n\t# setsebool -P %s %d" % (b[0], b[1]))
else:
- print "\tThe boolean %s was set incorrectly. " % (data[0][0])
- print "\tDescription:\n\t%s\n" % seobject.boolean_desc(data[0][0])
- print "\tAllow access by executing:\n\t# setsebool -P %s %d" % (data[0][0], data[0][1])
+ print("\tThe boolean %s was set incorrectly. " % (data[0][0]))
+ print("\tDescription:\n\t%s\n" % seobject.boolean_desc(data[0][0]))
+ print("\tAllow access by executing:\n\t# setsebool -P %s %d" % (data[0][0], data[0][1]))
continue
if rc == audit2why.TERULE:
- print "\t\tMissing type enforcement (TE) allow rule.\n"
- print "\t\tYou can use audit2allow to generate a loadable module to allow this access.\n"
+ print("\t\tMissing type enforcement (TE) allow rule.\n")
+ print("\t\tYou can use audit2allow to generate a loadable module to allow this access.\n")
continue
if rc == audit2why.CONSTRAINT:
- print #!!!! This avc is a constraint violation. You would need to modify the attributes of either the source or target types to allow this access.\n"
- print "#Constraint rule: \n\t" + data[0]
+ print() #!!!! This avc is a constraint violation. You would need to modify the attributes of either the source or target types to allow this access.\n"
+ print("#Constraint rule: \n\t" + data[0])
for reason in data[1:]:
- print "#\tPossible cause is the source %s and target %s are different.\n\b" % reason
+ print("#\tPossible cause is the source %s and target %s are different.\n\b" % reason)
if rc == audit2why.RBAC:
- print "\t\tMissing role allow rule.\n"
- print "\t\tAdd an allow rule for the role pair.\n"
+ print("\t\tMissing role allow rule.\n")
+ print("\t\tAdd an allow rule for the role pair.\n")
continue
audit2why.finish()
@@ -287,8 +287,8 @@ class AuditToPolicy:
if self.__options.audit2why:
try:
return self.__output_audit2why()
- except RuntimeError, e:
- print e
+ except RuntimeError as e:
+ print(e)
sys.exit(1)
g = policygen.PolicyGenerator()
@@ -347,11 +347,11 @@ class AuditToPolicy:
self.__output()
except KeyboardInterrupt:
sys.exit(0)
- except ValueError, e:
- print e
+ except ValueError as e:
+ print(e)
sys.exit(1)
- except IOError, e:
- print e
+ except IOError as e:
+ print(e)
sys.exit(1)
if __name__ == "__main__":
diff --git a/policycoreutils/audit2allow/sepolgen-ifgen b/policycoreutils/audit2allow/sepolgen-ifgen
index 83c7ecf..7f8caaf 100644
--- a/policycoreutils/audit2allow/sepolgen-ifgen
+++ b/policycoreutils/audit2allow/sepolgen-ifgen
@@ -82,7 +82,7 @@ def get_attrs(policy_path):
sys.stderr.write("No installed policy to check\n")
return None
outfile = tempfile.NamedTemporaryFile()
- except IOError, e:
+ except IOError as e:
sys.stderr.write("could not open attribute output file\n")
return None
except OSError:
@@ -100,7 +100,7 @@ def get_attrs(policy_path):
try:
attrs.from_file(outfile)
except:
- print "error parsing attribute info"
+ print("error parsing attribute info")
return None
return attrs
@@ -111,7 +111,7 @@ def main():
# Open the output first to generate errors before parsing
try:
f = open(options.output, "w")
- except IOError, e:
+ except IOError as e:
sys.stderr.write("could not open output file [%s]\n" % options.output)
return 1
@@ -130,9 +130,9 @@ def main():
# Parse the headers
try:
headers = refparser.parse_headers(options.headers, output=log, debug=options.debug)
- except ValueError, e:
- print "error parsing headers"
- print str(e)
+ except ValueError as e:
+ print("error parsing headers")
+ print(str(e))
return 1
if_set = interfaces.InterfaceSet(output=log)
diff --git a/policycoreutils/audit2allow/test_audit2allow.py b/policycoreutils/audit2allow/test_audit2allow.py
index 794673e..d6bd60b 100644
--- a/policycoreutils/audit2allow/test_audit2allow.py
+++ b/policycoreutils/audit2allow/test_audit2allow.py
@@ -4,18 +4,18 @@ from subprocess import Popen, PIPE
class Audit2allowTests(unittest.TestCase):
def assertDenied(self, err):
- self.assert_('Permission denied' in err,
+ self.assertTrue('Permission denied' in err,
'"Permission denied" not found in %r' % err)
def assertNotFound(self, err):
- self.assert_('not found' in err,
+ self.assertTrue('not found' in err,
'"not found" not found in %r' % err)
def assertFailure(self, status):
- self.assert_(status != 0,
+ self.assertTrue(status != 0,
'"Succeeded when it should have failed')
def assertSuccess(self, cmd, status, err):
- self.assert_(status == 0,
+ self.assertTrue(status == 0,
'"%s should have succeeded for this test %r' % (cmd, err))
def test_sepolgen_ifgen(self):
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] policycoreutils/sandbox: improve compatibility with Python 3
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
2015-07-21 0:38 ` [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3 Michal Srb
@ 2015-07-21 0:38 ` Michal Srb
2015-07-21 0:38 ` [PATCH 3/4] policycoreutils/semanage: " Michal Srb
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Michal Srb @ 2015-07-21 0:38 UTC (permalink / raw)
To: selinux
- gettext.install() only takes optional "unicode" keyword argument in
Python 2, and its default value is "False". This keyword argument
doesn't exist in Python 3
- __builtin__ module has been renamed to "builtins" in Python 3
- raw_input() has been renamed to input() in Python 3
- specify octal literals in form compatible with both Python 2 and 3
- migrate from commands to subprocess
- replace print statement with print function
- use reserved word `as` in try-except
- replace deprecated assert_() method with assertTrue() in unit tests
Signed-off-by: Michal Srb <msrb@redhat.com>
---
policycoreutils/sandbox/sandbox | 38 +++++++++++++++++++--------------
policycoreutils/sandbox/start | 6 +++---
policycoreutils/sandbox/test_sandbox.py | 12 +++++------
3 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/policycoreutils/sandbox/sandbox b/policycoreutils/sandbox/sandbox
index 3678c5d..fb64464 100644
--- a/policycoreutils/sandbox/sandbox
+++ b/policycoreutils/sandbox/sandbox
@@ -25,7 +25,6 @@ import selinux
import signal
from tempfile import mkdtemp
import pwd
-import commands
import sepolicy
PROGNAME = "policycoreutils"
@@ -36,13 +35,16 @@ gettext.bindtextdomain(PROGNAME, "/usr/share/locale")
gettext.textdomain(PROGNAME)
try:
- gettext.install(PROGNAME,
- localedir = "/usr/share/locale",
- unicode=False,
- codeset = 'utf-8')
+ gettext.install(PROGNAME,
+ localedir = "/usr/share/locale",
+ codeset = 'utf-8')
except IOError:
- import __builtin__
- __builtin__.__dict__['_'] = unicode
+ try:
+ import builtins
+ builtins.__dict__['_'] = str
+ except ImportError:
+ import __builtin__
+ __builtin__.__dict__['_'] = unicode
DEFAULT_WINDOWSIZE = "1000x700"
DEFAULT_TYPE = "sandbox_t"
@@ -86,7 +88,7 @@ def copyfile(file, srcdir, dest):
else:
shutil.copy2(file, dest)
- except shutil.Error, elist:
+ except shutil.Error as elist:
for e in elist.message:
sys.stderr.write(e[2])
@@ -107,7 +109,11 @@ def savefile(new, orig, X_ind):
if rc == gtk.RESPONSE_YES:
copy = True
else:
- ans = raw_input(_("Do you want to save changes to '%s' (y/N): ") % orig)
+ try:
+ input = raw_input
+ except NameError:
+ pass
+ ans = input(_("Do you want to save changes to '%s' (y/N): ") % orig)
if(re.match(_("[yY]"),ans)):
copy = True
if(copy):
@@ -228,9 +234,9 @@ class Sandbox:
for i in fd.readlines():
try:
self.__include(option, opt, i[:-1], parser)
- except IOError, e:
+ except IOError as e:
sys.stderr.write(str(e))
- except TypeError, e:
+ except TypeError as e:
sys.stderr.write(str(e))
fd.close()
@@ -263,7 +269,7 @@ dbus-launch --exit-with-session %s
kill -TERM $WM_PID 2> /dev/null
""" % (command, wm, command))
fd.close()
- os.chmod(execfile, 0700)
+ os.chmod(execfile, 0o700)
def usage(self, message = ""):
error_exit("%s\n%s" % (self.__parser.usage, message))
@@ -492,13 +498,13 @@ if __name__ == '__main__':
try:
sandbox = Sandbox()
rc = sandbox.main()
- except OSError, error:
+ except OSError as error:
error_exit(error)
- except ValueError, error:
+ except ValueError as error:
error_exit(error.args[0])
- except KeyError, error:
+ except KeyError as error:
error_exit(_("Invalid value %s") % error.args[0])
- except IOError, error:
+ except IOError as error:
error_exit(error)
except KeyboardInterrupt:
rc = 0
diff --git a/policycoreutils/sandbox/start b/policycoreutils/sandbox/start
index 52950d7..d895ba2 100644
--- a/policycoreutils/sandbox/start
+++ b/policycoreutils/sandbox/start
@@ -1,9 +1,9 @@
#! /usr/bin/python -Es
-import gtk, commands, sys
+import gtk, subprocess, sys
rc = [-1,'']
try:
- rc=commands.getstatusoutput(sys.argv[1])
+ rc=subprocess.getstatusoutput(sys.argv[1])
except:
pass
if rc[0] == 0:
- print rc[1]
+ print(rc[1])
diff --git a/policycoreutils/sandbox/test_sandbox.py b/policycoreutils/sandbox/test_sandbox.py
index b3b7f64..d765cb4 100644
--- a/policycoreutils/sandbox/test_sandbox.py
+++ b/policycoreutils/sandbox/test_sandbox.py
@@ -4,18 +4,18 @@ from subprocess import Popen, PIPE
class SandboxTests(unittest.TestCase):
def assertDenied(self, err):
- self.assert_('Permission denied' in err,
+ self.assertTrue(b'Permission denied' in err,
'"Permission denied" not found in %r' % err)
def assertNotFound(self, err):
- self.assert_('not found' in err,
+ self.assertTrue(b'not found' in err,
'"not found" not found in %r' % err)
def assertFailure(self, status):
- self.assert_(status != 0,
+ self.assertTrue(status != 0,
'"Succeeded when it should have failed')
def assertSuccess(self, status, err):
- self.assert_(status == 0,
+ self.assertTrue(status == 0,
'"Sandbox should have succeeded for this test %r' % err)
def test_simple_success(self):
@@ -23,7 +23,7 @@ class SandboxTests(unittest.TestCase):
p1 = Popen(['cat', '/etc/passwd'], stdout = PIPE)
p2 = Popen(['sandbox', 'grep', 'root'], stdin = p1.stdout, stdout=PIPE)
out, err = p2.communicate()
- self.assert_('root' in out)
+ self.assertTrue(b'root' in out)
def test_cant_kill(self):
"Verify that we cannot send kill signal in the sandbox"
@@ -95,4 +95,4 @@ if __name__ == "__main__":
if selinux.security_getenforce() == 1:
unittest.main()
else:
- print "SELinux must be in enforcing mode for this test"
+ print("SELinux must be in enforcing mode for this test")
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] policycoreutils/semanage: improve compatibility with Python 3
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
2015-07-21 0:38 ` [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3 Michal Srb
2015-07-21 0:38 ` [PATCH 2/4] policycoreutils/sandbox: " Michal Srb
@ 2015-07-21 0:38 ` Michal Srb
2015-07-22 13:34 ` Stephen Smalley
2015-07-21 0:38 ` [PATCH 4/4] policycoreutils/scripts: " Michal Srb
2015-07-22 13:29 ` Improve Python 3 support in policycoreutils Stephen Smalley
4 siblings, 1 reply; 8+ messages in thread
From: Michal Srb @ 2015-07-21 0:38 UTC (permalink / raw)
To: selinux
- gettext.install() only takes "unicode" keyword argument in Python 2
- __builtin__ module has been renamed to "builtins" in Python 3
- use reserved word `as` in try-except
- replace print statement with print function
Signed-off-by: Michal Srb <msrb@redhat.com>
---
policycoreutils/semanage/semanage | 59 +++++++++++++++++--------------
policycoreutils/semanage/test-semanage.py | 4 +--
2 files changed, 35 insertions(+), 28 deletions(-)
diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
index dd1010a..515cef3 100644
--- a/policycoreutils/semanage/semanage
+++ b/policycoreutils/semanage/semanage
@@ -29,13 +29,20 @@ import sys
import gettext
PROGNAME="policycoreutils"
try:
- gettext.install(PROGNAME,
- localedir="/usr/share/locale",
- unicode=True,
- codeset = 'utf-8')
+ kwargs = {}
+ if sys.version_info < (3,):
+ kwargs['unicode'] = True
+ gettext.install(PROGNAME,
+ localedir="/usr/share/locale",
+ codeset = 'utf-8',
+ **kwarg)
except IOError:
- import __builtin__
- __builtin__.__dict__['_'] = unicode
+ try:
+ import builtins
+ builtins.__dict__['_'] = str
+ except ImportError:
+ import __builtin__
+ __builtin__.__dict__['_'] = unicode
# define custom usages for selected main actions
usage_login = "semanage login [-h] [-n] [-N] [-s STORE] ["
@@ -103,7 +110,7 @@ class SetImportFile(argparse.Action):
if values and values is not "-":
try:
sys.stdin = open(values, 'r')
- except IOError,e:
+ except IOError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
setattr(namespace, self.dest, values)
@@ -207,7 +214,7 @@ def handleLogin(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "login %s" % (str(i))
+ print("login %s" % (str(i)))
def parser_add_store(parser, name):
parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage"))
@@ -323,7 +330,7 @@ def handleFcontext(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "fcontext %s" % str(i)
+ print("fcontext %s" % str(i))
def setupFcontextParser(subparsers):
ftype_help = '''
@@ -381,7 +388,7 @@ def handleUser(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "user %s" % str(i)
+ print("user %s" % str(i))
def setupUserParser(subparsers):
generated_usage = generate_custom_usage(usage_user, usage_user_dict)
@@ -430,7 +437,7 @@ def handlePort(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "port %s" % str(i)
+ print("port %s" % str(i))
def setupPortParser(subparsers):
generated_usage = generate_custom_usage(usage_port, usage_port_dict)
@@ -473,7 +480,7 @@ def handleInterface(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "interface %s" % str(i)
+ print("interface %s" % str(i))
def setupInterfaceParser(subparsers):
generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
@@ -512,7 +519,7 @@ def handleModule(args):
OBJECT.list(args.noheading, args.locallist)
if args.action is "extract":
for i in OBJECT.customized():
- print "module %s" % str(i)
+ print("module %s" % str(i))
def setupModuleParser(subparsers):
moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules'))
@@ -552,7 +559,7 @@ def handleNode(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "node %s" % str(i)
+ print("node %s" % str(i))
def setupNodeParser(subparsers):
generated_usage = generate_custom_usage(usage_node, usage_node_dict)
@@ -584,10 +591,10 @@ def handleBoolean(args):
sys.exit(2)
# TODO: should be added to handle_opts logic
elif args.action is "modify" and not args.boolean:
- print "boolean name required "
+ print("boolean name required ")
sys.exit(1)
elif args.action is "modify" and args.boolean and not args.state:
- print "state option is needed"
+ print("state option is needed")
sys.exit(1)
else:
handle_opts(args,boolean_args,args.action)
@@ -604,7 +611,7 @@ def handleBoolean(args):
OBJECT.deleteall()
if args.action is "extract":
for i in OBJECT.customized():
- print "boolean %s" % str(i)
+ print("boolean %s" % str(i))
def setupBooleanParser(subparsers):
generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
@@ -670,11 +677,11 @@ def setupDontauditParser(subparsers):
def handleExport(args):
manageditems=[ "boolean", "login", "interface", "user", "port", "node", "fcontext", "module"]
for i in manageditems:
- print "%s -D" % i
+ print("%s -D" % i)
for i in manageditems:
OBJECT = object_dict[i]()
for c in OBJECT.customized():
- print "%s %s" % (i, str(c))
+ print("%s %s" % (i, str(c)))
sys.exit(0)
@@ -743,10 +750,10 @@ def handleImport(args):
commandParser = createCommandParser()
args = commandParser.parse_args(mkargv(l))
args.func(args)
- except ValueError,e:
+ except ValueError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
- except IOError,e:
+ except IOError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
except KeyboardInterrupt:
@@ -822,21 +829,21 @@ def do_parser():
args = commandParser.parse_args(make_args(sys.argv))
args.func(args)
sys.exit(0)
- except IOError,e:
+ except IOError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
except KeyboardInterrupt:
sys.exit(0)
- except ValueError, e:
+ except ValueError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
sys.exit(1)
- except KeyError, e:
+ except KeyError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
sys.exit(1)
- except OSError, e:
+ except OSError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1]))
sys.exit(1)
- except RuntimeError, e:
+ except RuntimeError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
sys.exit(1)
diff --git a/policycoreutils/semanage/test-semanage.py b/policycoreutils/semanage/test-semanage.py
index d39013e..fc8368e 100644
--- a/policycoreutils/semanage/test-semanage.py
+++ b/policycoreutils/semanage/test-semanage.py
@@ -273,10 +273,10 @@ if __name__ == "__main__":
args = parser.parse_args()
args.func(args)
sys.exit(0)
- except ValueError,e:
+ except ValueError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
- except IOError,e:
+ except IOError as e:
sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
sys.exit(1)
except KeyboardInterrupt:
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] policycoreutils/scripts: improve compatibility with Python 3
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
` (2 preceding siblings ...)
2015-07-21 0:38 ` [PATCH 3/4] policycoreutils/semanage: " Michal Srb
@ 2015-07-21 0:38 ` Michal Srb
2015-07-22 13:29 ` Improve Python 3 support in policycoreutils Stephen Smalley
4 siblings, 0 replies; 8+ messages in thread
From: Michal Srb @ 2015-07-21 0:38 UTC (permalink / raw)
To: selinux
- __builtin__ module has been renamed to "builtins" in Python 3
- use reserved word `as` in try-except
- replace print statement with print function
- migrate from commands to subprocess
- fix formatting
Signed-off-by: Michal Srb <msrb@redhat.com>
---
policycoreutils/scripts/chcat | 80 +++++++++++++++++++++++--------------------
1 file changed, 42 insertions(+), 38 deletions(-)
diff --git a/policycoreutils/scripts/chcat b/policycoreutils/scripts/chcat
index 9efcb22..21212be 100755
--- a/policycoreutils/scripts/chcat
+++ b/policycoreutils/scripts/chcat
@@ -22,15 +22,19 @@
# 02111-1307 USA
#
#
-import commands, sys, os, pwd, string, getopt, selinux
+import subprocess, sys, os, pwd, string, getopt, selinux
import seobject
import gettext
try:
gettext.install('policycoreutils')
except IOError:
- import __builtin__
- __builtin__.__dict__['_'] = unicode
+ try:
+ import builtins
+ builtins.__dict__['_'] = str
+ except ImportError:
+ import __builtin__
+ __builtin__.__dict__['_'] = unicode
def errorExit(error):
sys.stderr.write("%s: " % sys.argv[0])
@@ -80,9 +84,9 @@ def chcat_user_add(newcat, users):
cmd = "semanage login -a -r %s -s %s %s" % (new_serange, user[0], u)
else:
cmd = "semanage login -m -r %s -s %s %s" % (new_serange, user[0], u)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -107,7 +111,7 @@ def chcat_add(orig, newcat, objects,login_ind):
if len(clist) > 1:
if cat in clist[1:]:
- print _("%s is already in %s") % (f, orig)
+ print(_("%s is already in %s") % (f, orig))
continue
clist.append(cat)
cats = clist[1:]
@@ -118,9 +122,9 @@ def chcat_add(orig, newcat, objects,login_ind):
else:
cat_string = cat
cmd = 'chcon -l %s:%s %s' % (sensitivity, cat_string, f)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -158,9 +162,9 @@ def chcat_user_remove(newcat, users):
cmd = "semanage login -a -r %s -s %s %s" % (new_serange, user[0], u)
else:
cmd = "semanage login -m -r %s -s %s %s" % (new_serange, user[0], u)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -185,7 +189,7 @@ def chcat_remove(orig, newcat, objects, login_ind):
if len(clist) > 1:
if cat not in clist[1:]:
- print _("%s is not in %s") % (f, orig)
+ print(_("%s is not in %s") % (f, orig))
continue
clist.remove(cat)
if len(clist) > 1:
@@ -195,16 +199,16 @@ def chcat_remove(orig, newcat, objects, login_ind):
else:
cat = ""
else:
- print _("%s is not in %s") % (f, orig)
+ print(_("%s is not in %s") % (f, orig))
continue
if len(cat) == 0:
cmd = 'chcon -l %s %s' % (sensitivity, f)
else:
cmd = 'chcon -l %s:%s %s' % (sensitivity,cat, f)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -229,9 +233,9 @@ def chcat_user_replace(newcat, users):
cmd = "semanage login -a -r %s -s %s %s" % (new_serange, user[0], u)
else:
cmd = "semanage login -m -r %s -s %s %s" % (new_serange, user[0], u)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -251,9 +255,9 @@ def chcat_replace(newcat, objects, login_ind):
for f in objects:
cmd = "%s %s" % (cmd, f)
- rc = commands.getstatusoutput(cmd)
+ rc = subprocess.getstatusoutput(cmd)
if rc[0] != 0:
- print rc[1]
+ print(rc[1])
errors += 1
return errors
@@ -322,18 +326,18 @@ def translate(cats):
return newcat
def usage():
- print _("Usage %s CATEGORY File ...") % sys.argv[0]
- print _("Usage %s -l CATEGORY user ...") % sys.argv[0]
- print _("Usage %s [[+|-]CATEGORY],...]q File ...") % sys.argv[0]
- print _("Usage %s -l [[+|-]CATEGORY],...]q user ...") % sys.argv[0]
- print _("Usage %s -d File ...") % sys.argv[0]
- print _("Usage %s -l -d user ...") % sys.argv[0]
- print _("Usage %s -L") % sys.argv[0]
- print _("Usage %s -L -l user") % sys.argv[0]
- print _("Use -- to end option list. For example")
- print _("chcat -- -CompanyConfidential /docs/businessplan.odt")
- print _("chcat -l +CompanyConfidential juser")
- sys.exit(1)
+ print(_("Usage %s CATEGORY File ...") % sys.argv[0])
+ print(_("Usage %s -l CATEGORY user ...") % sys.argv[0])
+ print(_("Usage %s [[+|-]CATEGORY],...]q File ...") % sys.argv[0])
+ print(_("Usage %s -l [[+|-]CATEGORY],...]q user ...") % sys.argv[0])
+ print(_("Usage %s -d File ...") % sys.argv[0])
+ print(_("Usage %s -l -d user ...") % sys.argv[0])
+ print(_("Usage %s -L") % sys.argv[0])
+ print(_("Usage %s -L -l user") % sys.argv[0])
+ print(_("Use -- to end option list. For example"))
+ print(_("chcat -- -CompanyConfidential /docs/businessplan.odt"))
+ print(_("chcat -l +CompanyConfidential juser"))
+ sys.exit(1)
def listcats():
fd = open(selinux.selinux_translations_path())
@@ -342,7 +346,7 @@ def listcats():
continue
if l.find("=") != -1:
rec = l.split("=")
- print "%-30s %s" % tuple(rec)
+ print("%-30s %s" % tuple(rec))
fd.close()
return 0
@@ -356,12 +360,12 @@ def listusercats(users):
cats = seobject.translate(selinux.getseuserbyname(u)[2])
cats = cats.split("-")
if len(cats) > 1 and cats[1] != "s0":
- print "%s: %s" % (u, cats[1])
+ print("%s: %s" % (u, cats[1]))
else:
- print "%s: %s" % (u, cats[0])
+ print("%s: %s" % (u, cats[0]))
def error(msg):
- print "%s: %s" % (sys.argv[0], msg)
+ print("%s: %s" % (sys.argv[0], msg))
sys.exit(1)
if __name__ == '__main__':
@@ -395,10 +399,10 @@ if __name__ == '__main__':
if list_ind == 0 and len(cmds) < 1:
usage()
- except getopt.error, error:
+ except getopt.error as error:
errorExit(_("Options Error %s ") % error.msg)
- except ValueError, e:
+ except ValueError as e:
usage()
if delete_ind:
@@ -433,9 +437,9 @@ if __name__ == '__main__':
if len(c) > 0 and c[0] == "-":
errors += chcat_remove(c[1:],translate(l), objects, login_ind)
continue
- except ValueError, e:
+ except ValueError as e:
error(e)
- except OSError, e:
+ except OSError as e:
error(e)
sys.exit(errors)
--
2.4.3
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Improve Python 3 support in policycoreutils
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
` (3 preceding siblings ...)
2015-07-21 0:38 ` [PATCH 4/4] policycoreutils/scripts: " Michal Srb
@ 2015-07-22 13:29 ` Stephen Smalley
4 siblings, 0 replies; 8+ messages in thread
From: Stephen Smalley @ 2015-07-22 13:29 UTC (permalink / raw)
To: Michal Srb, selinux
On 07/20/2015 08:38 PM, Michal Srb wrote:
>
> Hello,
>
> These patches try to add Python 3 support to the following places under policycoreutils/:
>
> audit2allow/
> sandbox/
> scripts/
> semanage/ (except seobject.py)
>
> Patch for the seobject.py should follow later.
Thanks, applied.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/4] policycoreutils/semanage: improve compatibility with Python 3
2015-07-21 0:38 ` [PATCH 3/4] policycoreutils/semanage: " Michal Srb
@ 2015-07-22 13:34 ` Stephen Smalley
2015-07-22 14:10 ` Michal Srb
0 siblings, 1 reply; 8+ messages in thread
From: Stephen Smalley @ 2015-07-22 13:34 UTC (permalink / raw)
To: Michal Srb, selinux
On 07/20/2015 08:38 PM, Michal Srb wrote:
> - gettext.install() only takes "unicode" keyword argument in Python 2
> - __builtin__ module has been renamed to "builtins" in Python 3
> - use reserved word `as` in try-except
> - replace print statement with print function
>
> Signed-off-by: Michal Srb <msrb@redhat.com>
> ---
> policycoreutils/semanage/semanage | 59 +++++++++++++++++--------------
> policycoreutils/semanage/test-semanage.py | 4 +--
> 2 files changed, 35 insertions(+), 28 deletions(-)
>
> diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
> index dd1010a..515cef3 100644
> --- a/policycoreutils/semanage/semanage
> +++ b/policycoreutils/semanage/semanage
> @@ -29,13 +29,20 @@ import sys
> import gettext
> PROGNAME="policycoreutils"
> try:
> - gettext.install(PROGNAME,
> - localedir="/usr/share/locale",
> - unicode=True,
> - codeset = 'utf-8')
> + kwargs = {}
> + if sys.version_info < (3,):
> + kwargs['unicode'] = True
> + gettext.install(PROGNAME,
> + localedir="/usr/share/locale",
> + codeset = 'utf-8',
> + **kwarg)
I had to fix this (kwarg -> kwargs). Not tested?
> except IOError:
> - import __builtin__
> - __builtin__.__dict__['_'] = unicode
> + try:
> + import builtins
> + builtins.__dict__['_'] = str
> + except ImportError:
> + import __builtin__
> + __builtin__.__dict__['_'] = unicode
>
> # define custom usages for selected main actions
> usage_login = "semanage login [-h] [-n] [-N] [-s STORE] ["
> @@ -103,7 +110,7 @@ class SetImportFile(argparse.Action):
> if values and values is not "-":
> try:
> sys.stdin = open(values, 'r')
> - except IOError,e:
> + except IOError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> setattr(namespace, self.dest, values)
> @@ -207,7 +214,7 @@ def handleLogin(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "login %s" % (str(i))
> + print("login %s" % (str(i)))
>
> def parser_add_store(parser, name):
> parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage"))
> @@ -323,7 +330,7 @@ def handleFcontext(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "fcontext %s" % str(i)
> + print("fcontext %s" % str(i))
>
> def setupFcontextParser(subparsers):
> ftype_help = '''
> @@ -381,7 +388,7 @@ def handleUser(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "user %s" % str(i)
> + print("user %s" % str(i))
>
> def setupUserParser(subparsers):
> generated_usage = generate_custom_usage(usage_user, usage_user_dict)
> @@ -430,7 +437,7 @@ def handlePort(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "port %s" % str(i)
> + print("port %s" % str(i))
>
> def setupPortParser(subparsers):
> generated_usage = generate_custom_usage(usage_port, usage_port_dict)
> @@ -473,7 +480,7 @@ def handleInterface(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "interface %s" % str(i)
> + print("interface %s" % str(i))
>
> def setupInterfaceParser(subparsers):
> generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
> @@ -512,7 +519,7 @@ def handleModule(args):
> OBJECT.list(args.noheading, args.locallist)
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "module %s" % str(i)
> + print("module %s" % str(i))
>
> def setupModuleParser(subparsers):
> moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules'))
> @@ -552,7 +559,7 @@ def handleNode(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "node %s" % str(i)
> + print("node %s" % str(i))
>
> def setupNodeParser(subparsers):
> generated_usage = generate_custom_usage(usage_node, usage_node_dict)
> @@ -584,10 +591,10 @@ def handleBoolean(args):
> sys.exit(2)
> # TODO: should be added to handle_opts logic
> elif args.action is "modify" and not args.boolean:
> - print "boolean name required "
> + print("boolean name required ")
> sys.exit(1)
> elif args.action is "modify" and args.boolean and not args.state:
> - print "state option is needed"
> + print("state option is needed")
> sys.exit(1)
> else:
> handle_opts(args,boolean_args,args.action)
> @@ -604,7 +611,7 @@ def handleBoolean(args):
> OBJECT.deleteall()
> if args.action is "extract":
> for i in OBJECT.customized():
> - print "boolean %s" % str(i)
> + print("boolean %s" % str(i))
>
> def setupBooleanParser(subparsers):
> generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
> @@ -670,11 +677,11 @@ def setupDontauditParser(subparsers):
> def handleExport(args):
> manageditems=[ "boolean", "login", "interface", "user", "port", "node", "fcontext", "module"]
> for i in manageditems:
> - print "%s -D" % i
> + print("%s -D" % i)
> for i in manageditems:
> OBJECT = object_dict[i]()
> for c in OBJECT.customized():
> - print "%s %s" % (i, str(c))
> + print("%s %s" % (i, str(c)))
>
> sys.exit(0)
>
> @@ -743,10 +750,10 @@ def handleImport(args):
> commandParser = createCommandParser()
> args = commandParser.parse_args(mkargv(l))
> args.func(args)
> - except ValueError,e:
> + except ValueError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> - except IOError,e:
> + except IOError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> except KeyboardInterrupt:
> @@ -822,21 +829,21 @@ def do_parser():
> args = commandParser.parse_args(make_args(sys.argv))
> args.func(args)
> sys.exit(0)
> - except IOError,e:
> + except IOError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> except KeyboardInterrupt:
> sys.exit(0)
> - except ValueError, e:
> + except ValueError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
> sys.exit(1)
> - except KeyError, e:
> + except KeyError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
> sys.exit(1)
> - except OSError, e:
> + except OSError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1]))
> sys.exit(1)
> - except RuntimeError, e:
> + except RuntimeError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
> sys.exit(1)
>
> diff --git a/policycoreutils/semanage/test-semanage.py b/policycoreutils/semanage/test-semanage.py
> index d39013e..fc8368e 100644
> --- a/policycoreutils/semanage/test-semanage.py
> +++ b/policycoreutils/semanage/test-semanage.py
> @@ -273,10 +273,10 @@ if __name__ == "__main__":
> args = parser.parse_args()
> args.func(args)
> sys.exit(0)
> - except ValueError,e:
> + except ValueError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> - except IOError,e:
> + except IOError as e:
> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
> sys.exit(1)
> except KeyboardInterrupt:
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/4] policycoreutils/semanage: improve compatibility with Python 3
2015-07-22 13:34 ` Stephen Smalley
@ 2015-07-22 14:10 ` Michal Srb
0 siblings, 0 replies; 8+ messages in thread
From: Michal Srb @ 2015-07-22 14:10 UTC (permalink / raw)
To: Stephen Smalley, selinux
On 07/22/2015 03:34 PM, Stephen Smalley wrote:
> On 07/20/2015 08:38 PM, Michal Srb wrote:
>> - gettext.install() only takes "unicode" keyword argument in Python 2
>> - __builtin__ module has been renamed to "builtins" in Python 3
>> - use reserved word `as` in try-except
>> - replace print statement with print function
>>
>> Signed-off-by: Michal Srb <msrb@redhat.com>
>> ---
>> policycoreutils/semanage/semanage | 59 +++++++++++++++++--------------
>> policycoreutils/semanage/test-semanage.py | 4 +--
>> 2 files changed, 35 insertions(+), 28 deletions(-)
>>
>> diff --git a/policycoreutils/semanage/semanage b/policycoreutils/semanage/semanage
>> index dd1010a..515cef3 100644
>> --- a/policycoreutils/semanage/semanage
>> +++ b/policycoreutils/semanage/semanage
>> @@ -29,13 +29,20 @@ import sys
>> import gettext
>> PROGNAME="policycoreutils"
>> try:
>> - gettext.install(PROGNAME,
>> - localedir="/usr/share/locale",
>> - unicode=True,
>> - codeset = 'utf-8')
>> + kwargs = {}
>> + if sys.version_info < (3,):
>> + kwargs['unicode'] = True
>> + gettext.install(PROGNAME,
>> + localedir="/usr/share/locale",
>> + codeset = 'utf-8',
>> + **kwarg)
> I had to fix this (kwarg -> kwargs). Not tested?
Oops, sorry about that. I remember doing minor changes in this part just
before sending the patches - and I probably forgot to run tests on it
after editing :/
Michal
>
>> except IOError:
>> - import __builtin__
>> - __builtin__.__dict__['_'] = unicode
>> + try:
>> + import builtins
>> + builtins.__dict__['_'] = str
>> + except ImportError:
>> + import __builtin__
>> + __builtin__.__dict__['_'] = unicode
>>
>> # define custom usages for selected main actions
>> usage_login = "semanage login [-h] [-n] [-N] [-s STORE] ["
>> @@ -103,7 +110,7 @@ class SetImportFile(argparse.Action):
>> if values and values is not "-":
>> try:
>> sys.stdin = open(values, 'r')
>> - except IOError,e:
>> + except IOError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> setattr(namespace, self.dest, values)
>> @@ -207,7 +214,7 @@ def handleLogin(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "login %s" % (str(i))
>> + print("login %s" % (str(i)))
>>
>> def parser_add_store(parser, name):
>> parser.add_argument('-S', '--store', action=SetStore, help=_("Select an alternate SELinux Policy Store to manage"))
>> @@ -323,7 +330,7 @@ def handleFcontext(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "fcontext %s" % str(i)
>> + print("fcontext %s" % str(i))
>>
>> def setupFcontextParser(subparsers):
>> ftype_help = '''
>> @@ -381,7 +388,7 @@ def handleUser(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "user %s" % str(i)
>> + print("user %s" % str(i))
>>
>> def setupUserParser(subparsers):
>> generated_usage = generate_custom_usage(usage_user, usage_user_dict)
>> @@ -430,7 +437,7 @@ def handlePort(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "port %s" % str(i)
>> + print("port %s" % str(i))
>>
>> def setupPortParser(subparsers):
>> generated_usage = generate_custom_usage(usage_port, usage_port_dict)
>> @@ -473,7 +480,7 @@ def handleInterface(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "interface %s" % str(i)
>> + print("interface %s" % str(i))
>>
>> def setupInterfaceParser(subparsers):
>> generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
>> @@ -512,7 +519,7 @@ def handleModule(args):
>> OBJECT.list(args.noheading, args.locallist)
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "module %s" % str(i)
>> + print("module %s" % str(i))
>>
>> def setupModuleParser(subparsers):
>> moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules'))
>> @@ -552,7 +559,7 @@ def handleNode(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "node %s" % str(i)
>> + print("node %s" % str(i))
>>
>> def setupNodeParser(subparsers):
>> generated_usage = generate_custom_usage(usage_node, usage_node_dict)
>> @@ -584,10 +591,10 @@ def handleBoolean(args):
>> sys.exit(2)
>> # TODO: should be added to handle_opts logic
>> elif args.action is "modify" and not args.boolean:
>> - print "boolean name required "
>> + print("boolean name required ")
>> sys.exit(1)
>> elif args.action is "modify" and args.boolean and not args.state:
>> - print "state option is needed"
>> + print("state option is needed")
>> sys.exit(1)
>> else:
>> handle_opts(args,boolean_args,args.action)
>> @@ -604,7 +611,7 @@ def handleBoolean(args):
>> OBJECT.deleteall()
>> if args.action is "extract":
>> for i in OBJECT.customized():
>> - print "boolean %s" % str(i)
>> + print("boolean %s" % str(i))
>>
>> def setupBooleanParser(subparsers):
>> generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
>> @@ -670,11 +677,11 @@ def setupDontauditParser(subparsers):
>> def handleExport(args):
>> manageditems=[ "boolean", "login", "interface", "user", "port", "node", "fcontext", "module"]
>> for i in manageditems:
>> - print "%s -D" % i
>> + print("%s -D" % i)
>> for i in manageditems:
>> OBJECT = object_dict[i]()
>> for c in OBJECT.customized():
>> - print "%s %s" % (i, str(c))
>> + print("%s %s" % (i, str(c)))
>>
>> sys.exit(0)
>>
>> @@ -743,10 +750,10 @@ def handleImport(args):
>> commandParser = createCommandParser()
>> args = commandParser.parse_args(mkargv(l))
>> args.func(args)
>> - except ValueError,e:
>> + except ValueError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> - except IOError,e:
>> + except IOError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> except KeyboardInterrupt:
>> @@ -822,21 +829,21 @@ def do_parser():
>> args = commandParser.parse_args(make_args(sys.argv))
>> args.func(args)
>> sys.exit(0)
>> - except IOError,e:
>> + except IOError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> except KeyboardInterrupt:
>> sys.exit(0)
>> - except ValueError, e:
>> + except ValueError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>> sys.exit(1)
>> - except KeyError, e:
>> + except KeyError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>> sys.exit(1)
>> - except OSError, e:
>> + except OSError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1]))
>> sys.exit(1)
>> - except RuntimeError, e:
>> + except RuntimeError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0]))
>> sys.exit(1)
>>
>> diff --git a/policycoreutils/semanage/test-semanage.py b/policycoreutils/semanage/test-semanage.py
>> index d39013e..fc8368e 100644
>> --- a/policycoreutils/semanage/test-semanage.py
>> +++ b/policycoreutils/semanage/test-semanage.py
>> @@ -273,10 +273,10 @@ if __name__ == "__main__":
>> args = parser.parse_args()
>> args.func(args)
>> sys.exit(0)
>> - except ValueError,e:
>> + except ValueError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> - except IOError,e:
>> + except IOError as e:
>> sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e)))
>> sys.exit(1)
>> except KeyboardInterrupt:
>>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-07-22 14:10 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-21 0:38 Improve Python 3 support in policycoreutils Michal Srb
2015-07-21 0:38 ` [PATCH 1/4] policycoreutils/audit2allow: improve compatibility with Python 3 Michal Srb
2015-07-21 0:38 ` [PATCH 2/4] policycoreutils/sandbox: " Michal Srb
2015-07-21 0:38 ` [PATCH 3/4] policycoreutils/semanage: " Michal Srb
2015-07-22 13:34 ` Stephen Smalley
2015-07-22 14:10 ` Michal Srb
2015-07-21 0:38 ` [PATCH 4/4] policycoreutils/scripts: " Michal Srb
2015-07-22 13:29 ` Improve Python 3 support in policycoreutils Stephen Smalley
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.