Re: [Patch v2 2/2] policycoreutils: Make sepolicy work with python3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/08/2016 10:21 AM, Stephen Smalley wrote:
> On 11/07/2016 04:51 AM, Laurent Bigonville wrote:
>> From: Laurent Bigonville <bigon@xxxxxxxx>
>>
>> Add python3 support for sepolicy
>>
>> Signed-off-by: Laurent Bigonville <bigon@xxxxxxxx>
>> ---
>>  policycoreutils/sepolicy/selinux_client.py       |  6 ++--
>>  policycoreutils/sepolicy/sepolicy.py             | 38 ++++++++++++------------
>>  policycoreutils/sepolicy/sepolicy/__init__.py    | 16 ++++++----
>>  policycoreutils/sepolicy/sepolicy/communicate.py |  4 +--
>>  policycoreutils/sepolicy/sepolicy/generate.py    | 30 +++++++++----------
>>  policycoreutils/sepolicy/sepolicy/interface.py   | 14 ++++++---
>>  policycoreutils/sepolicy/sepolicy/manpage.py     |  7 +++--
>>  7 files changed, 65 insertions(+), 50 deletions(-)
> 
> make test doesn't pass in policycoreutils/sepolicy, although I'm not
> sure that's new to this patch.  I think the manpage ones were already
> failing; I don't recall the network one hanging before though.  But
> maybe that is because I wasn't testing with setools3 fully removed before?

Oh, I guess it is just very slow with setools4.  It did finally complete
sepolicy network -d and has moved on (next slow/hanging one is
transition -t).

>>
>> diff --git a/policycoreutils/sepolicy/selinux_client.py b/policycoreutils/sepolicy/selinux_client.py
>> index 7f4a91c..dc29f28 100644
>> --- a/policycoreutils/sepolicy/selinux_client.py
>> +++ b/policycoreutils/sepolicy/selinux_client.py
>> @@ -39,6 +39,6 @@ if __name__ == "__main__":
>>      try:
>>          dbus_proxy = SELinuxDBus()
>>          resp = dbus_proxy.customized()
>> -        print convert_customization(resp)
>> -    except dbus.DBusException, e:
>> -        print e
>> +        print(convert_customization(resp))
>> +    except dbus.DBusException as e:
>> +        print(e)
>> diff --git a/policycoreutils/sepolicy/sepolicy.py b/policycoreutils/sepolicy/sepolicy.py
>> index 3e502a7..5bf9b52 100755
>> --- a/policycoreutils/sepolicy/sepolicy.py
>> +++ b/policycoreutils/sepolicy/sepolicy.py
>> @@ -262,7 +262,7 @@ def _print_net(src, protocol, perm):
>>      if len(portdict) > 0:
>>          bold_start = "\033[1m"
>>          bold_end = "\033[0;0m"
>> -        print "\n" + bold_start + "%s: %s %s" % (src, protocol, perm) + bold_end
>> +        print("\n" + bold_start + "%s: %s %s" % (src, protocol, perm) + bold_end)
>>          port_strings = []
>>          boolean_text = ""
>>          for p in portdict:
>> @@ -275,7 +275,7 @@ def _print_net(src, protocol, perm):
>>                      port_strings.append("%s (%s)" % (", ".join(recs), t))
>>          port_strings.sort(numcmp)
>>          for p in port_strings:
>> -            print "\t" + p
>> +            print("\t" + p)
>>  
>>  
>>  def network(args):
>> @@ -286,7 +286,7 @@ def network(args):
>>              if i[0] not in all_ports:
>>                  all_ports.append(i[0])
>>          all_ports.sort()
>> -        print "\n".join(all_ports)
>> +        print("\n".join(all_ports))
>>  
>>      for port in args.port:
>>          found = False
>> @@ -297,18 +297,18 @@ def network(args):
>>                  else:
>>                      range = "%s-%s" % (i[0], i[1])
>>                  found = True
>> -                print "%d: %s %s %s" % (port, i[2], portrecsbynum[i][0], range)
>> +                print("%d: %s %s %s" % (port, i[2], portrecsbynum[i][0], range))
>>          if not found:
>>              if port < 500:
>> -                print "Undefined reserved port type"
>> +                print("Undefined reserved port type")
>>              else:
>> -                print "Undefined port type"
>> +                print("Undefined port type")
>>  
>>      for t in args.type:
>>          if (t, 'tcp') in portrecs.keys():
>> -            print "%s: tcp: %s" % (t, ",".join(portrecs[t, 'tcp']))
>> +            print("%s: tcp: %s" % (t, ",".join(portrecs[t, 'tcp'])))
>>          if (t, 'udp') in portrecs.keys():
>> -            print "%s: udp: %s" % (t, ",".join(portrecs[t, 'udp']))
>> +            print( "%s: udp: %s" % (t, ",".join(portrecs[t, 'udp'])))
>>  
>>      for a in args.applications:
>>          d = sepolicy.get_init_transtype(a)
>> @@ -357,7 +357,7 @@ def manpage(args):
>>  
>>      for domain in test_domains:
>>          m = ManPage(domain, path, args.root, args.source_files, args.web)
>> -        print m.get_man_page_path()
>> +        print(m.get_man_page_path())
>>  
>>      if args.web:
>>          HTMLManPages(manpage_roles, manpage_domains, path, args.os)
>> @@ -418,7 +418,7 @@ def communicate(args):
>>      out = list(set(writable) & set(readable))
>>  
>>      for t in out:
>> -        print t
>> +        print(t)
>>  
>>  
>>  def gen_communicate_args(parser):
>> @@ -445,7 +445,7 @@ def booleans(args):
>>      args.booleans.sort()
>>  
>>      for b in args.booleans:
>> -        print "%s=_(\"%s\")" % (b, boolean_desc(b))
>> +        print("%s=_(\"%s\")" % (b, boolean_desc(b)))
>>  
>>  
>>  def gen_booleans_args(parser):
>> @@ -484,16 +484,16 @@ def print_interfaces(interfaces, args, append=""):
>>      for i in interfaces:
>>          if args.verbose:
>>              try:
>> -                print get_interface_format_text(i + append)
>> +                print(get_interface_format_text(i + append))
>>              except KeyError:
>> -                print i
>> +                print(i)
>>          if args.compile:
>>              try:
>>                  interface_compile_test(i)
>>              except KeyError:
>> -                print i
>> +                print(i)
>>          else:
>> -            print i
>> +            print(i)
>>  
>>  
>>  def interface(args):
>> @@ -565,7 +565,7 @@ def generate(args):
>>      if args.policytype in APPLICATIONS:
>>          mypolicy.gen_writeable()
>>          mypolicy.gen_symbols()
>> -    print mypolicy.generate(args.path)
>> +    print(mypolicy.generate(args.path))
>>  
>>  
>>  def gen_interface_args(parser):
>> @@ -698,12 +698,12 @@ if __name__ == '__main__':
>>          args = parser.parse_args(args=parser_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:
>> -        print "Out"
>> +        print("Out")
>>          sys.exit(0)
>> diff --git a/policycoreutils/sepolicy/sepolicy/__init__.py b/policycoreutils/sepolicy/sepolicy/__init__.py
>> index 8fbd5b4..fee6438 100644
>> --- a/policycoreutils/sepolicy/sepolicy/__init__.py
>> +++ b/policycoreutils/sepolicy/sepolicy/__init__.py
>> @@ -695,7 +695,7 @@ def get_methods():
>>      # List of per_role_template interfaces
>>          ifs = interfaces.InterfaceSet()
>>          ifs.from_file(fd)
>> -        methods = ifs.interfaces.keys()
>> +        methods = list(ifs.interfaces.keys())
>>          fd.close()
>>      except:
>>          sys.stderr.write("could not open interface info [%s]\n" % fn)
>> @@ -752,7 +752,10 @@ def get_all_entrypoint_domains():
>>  
>>  
>>  def gen_interfaces():
>> -    import commands
>> +    try:
>> +        from commands import getstatusoutput
>> +    except ImportError:
>> +        from subprocess import getstatusoutput
>>      ifile = defaults.interface_info()
>>      headers = defaults.headers()
>>      try:
>> @@ -763,7 +766,7 @@ def gen_interfaces():
>>  
>>      if os.getuid() != 0:
>>          raise ValueError(_("You must regenerate interface info by running /usr/bin/sepolgen-ifgen"))
>> -    print(commands.getstatusoutput("/usr/bin/sepolgen-ifgen")[1])
>> +    print(getstatusoutput("/usr/bin/sepolgen-ifgen")[1])
>>  
>>  
>>  def gen_port_dict():
>> @@ -1085,8 +1088,11 @@ def get_os_version():
>>      os_version = ""
>>      pkg_name = "selinux-policy"
>>      try:
>> -        import commands
>> -        rc, output = commands.getstatusoutput("rpm -q '%s'" % pkg_name)
>> +        try:
>> +            from commands import getstatusoutput
>> +        except ImportError:
>> +            from subprocess import getstatusoutput
>> +        rc, output = getstatusoutput("rpm -q '%s'" % pkg_name)
>>          if rc == 0:
>>              os_version = output.split(".")[-2]
>>      except:
>> diff --git a/policycoreutils/sepolicy/sepolicy/communicate.py b/policycoreutils/sepolicy/sepolicy/communicate.py
>> index b96c4b9..299316e 100755
>> --- a/policycoreutils/sepolicy/sepolicy/communicate.py
>> +++ b/policycoreutils/sepolicy/sepolicy/communicate.py
>> @@ -34,8 +34,8 @@ def usage(parser, msg):
>>  
>>  def expand_attribute(attribute):
>>      try:
>> -        return sepolicy.info(sepolicy.ATTRIBUTE, attribute)[0]["types"]
>> -    except RuntimeError:
>> +        return list(next(sepolicy.info(sepolicy.ATTRIBUTE, attribute))["types"])
>> +    except StopIteration:
>>          return [attribute]
>>  
>>  
>> diff --git a/policycoreutils/sepolicy/sepolicy/generate.py b/policycoreutils/sepolicy/sepolicy/generate.py
>> index 65b33b6..5696110 100644
>> --- a/policycoreutils/sepolicy/sepolicy/generate.py
>> +++ b/policycoreutils/sepolicy/sepolicy/generate.py
>> @@ -31,21 +31,21 @@ import time
>>  import types
>>  import platform
>>  
>> -from templates import executable
>> -from templates import boolean
>> -from templates import etc_rw
>> -from templates import unit_file
>> -from templates import var_cache
>> -from templates import var_spool
>> -from templates import var_lib
>> -from templates import var_log
>> -from templates import var_run
>> -from templates import tmp
>> -from templates import rw
>> -from templates import network
>> -from templates import script
>> -from templates import spec
>> -from templates import user
>> +from .templates import executable
>> +from .templates import boolean
>> +from .templates import etc_rw
>> +from .templates import unit_file
>> +from .templates import var_cache
>> +from .templates import var_spool
>> +from .templates import var_lib
>> +from .templates import var_log
>> +from .templates import var_run
>> +from .templates import tmp
>> +from .templates import rw
>> +from .templates import network
>> +from .templates import script
>> +from .templates import spec
>> +from .templates import user
>>  import sepolgen.interfaces as interfaces
>>  import sepolgen.defaults as defaults
>>  
>> diff --git a/policycoreutils/sepolicy/sepolicy/interface.py b/policycoreutils/sepolicy/sepolicy/interface.py
>> index c2cb971..8956f39 100644
>> --- a/policycoreutils/sepolicy/sepolicy/interface.py
>> +++ b/policycoreutils/sepolicy/sepolicy/interface.py
>> @@ -192,10 +192,13 @@ def generate_compile_te(interface, idict, name="compiletest"):
>>  def get_xml_file(if_file):
>>      """ Returns xml format of interfaces for given .if policy file"""
>>      import os
>> -    import commands
>> +    try:
>> +            from commands import getstatusoutput
>> +    except ImportError:
>> +            from subprocess import getstatusoutput
>>      basedir = os.path.dirname(if_file) + "/"
>>      filename = os.path.basename(if_file).split(".")[0]
>> -    rc, output = commands.getstatusoutput("python /usr/share/selinux/devel/include/support/segenxml.py -w -m %s" % basedir + filename)
>> +    rc, output = getstatusoutput("python /usr/share/selinux/devel/include/support/segenxml.py -w -m %s" % basedir + filename)
>>      if rc != 0:
>>          sys.stderr.write("\n Could not proceed selected interface file.\n")
>>          sys.stderr.write("\n%s" % output)
>> @@ -208,7 +211,10 @@ def interface_compile_test(interface, path="/usr/share/selinux/devel/policy.xml"
>>      exclude_interfaces = ["userdom", "kernel", "corenet", "files", "dev"]
>>      exclude_interface_type = ["template"]
>>  
>> -    import commands
>> +    try:
>> +            from commands import getstatusoutput
>> +    except ImportError:
>> +            from subprocess import getstatusoutput
>>      import os
>>      policy_files = {'pp': "compiletest.pp", 'te': "compiletest.te", 'fc': "compiletest.fc", 'if': "compiletest.if"}
>>      idict = get_interface_dict(path)
>> @@ -219,7 +225,7 @@ def interface_compile_test(interface, path="/usr/share/selinux/devel/policy.xml"
>>              fd = open(policy_files['te'], "w")
>>              fd.write(generate_compile_te(interface, idict))
>>              fd.close()
>> -            rc, output = commands.getstatusoutput("make -f /usr/share/selinux/devel/Makefile %s" % policy_files['pp'])
>> +            rc, output = getstatusoutput("make -f /usr/share/selinux/devel/Makefile %s" % policy_files['pp'])
>>              if rc != 0:
>>                  sys.stderr.write(output)
>>                  sys.stderr.write(_("\nCompile test for %s failed.\n") % interface)
>> diff --git a/policycoreutils/sepolicy/sepolicy/manpage.py b/policycoreutils/sepolicy/sepolicy/manpage.py
>> index 7365f93..773a9ab 100755
>> --- a/policycoreutils/sepolicy/sepolicy/manpage.py
>> +++ b/policycoreutils/sepolicy/sepolicy/manpage.py
>> @@ -27,7 +27,6 @@ __all__ = ['ManPage', 'HTMLManPages', 'manpage_domains', 'manpage_roles', 'gen_d
>>  import string
>>  import selinux
>>  import sepolicy
>> -import commands
>>  import os
>>  import time
>>  
>> @@ -162,7 +161,11 @@ def get_alphabet_manpages(manpage_list):
>>  
>>  
>>  def convert_manpage_to_html(html_manpage, manpage):
>> -    rc, output = commands.getstatusoutput("/usr/bin/groff -man -Thtml %s 2>/dev/null" % manpage)
>> +    try:
>> +            from commands import getstatusoutput
>> +    except ImportError:
>> +            from subprocess import getstatusoutput
>> +    rc, output = getstatusoutput("/usr/bin/groff -man -Thtml %s 2>/dev/null" % manpage)
>>      if rc == 0:
>>          print(html_manpage, "has been created")
>>          fd = open(html_manpage, 'w')
>>
> 

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux