commit:     8748202605d13dd9f9d7111955cabd1cea1d1bde
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Tue Jan 12 11:51:31 2016 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Tue Jan 12 16:10:51 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=87482026

sys-apps/apparmor-utils: fix python handling

 sys-apps/apparmor-utils/apparmor-utils-2.10.ebuild |  14 ++-
 .../files/apparmor-utils-2.10-python2.patch        | 132 +++++++++++++++++++++
 .../files/apparmor-utils-2.10-shebang.patch        |  16 +++
 3 files changed, 158 insertions(+), 4 deletions(-)

diff --git a/sys-apps/apparmor-utils/apparmor-utils-2.10.ebuild 
b/sys-apps/apparmor-utils/apparmor-utils-2.10.ebuild
index 4dbe8b1..a034f03 100644
--- a/sys-apps/apparmor-utils/apparmor-utils-2.10.ebuild
+++ b/sys-apps/apparmor-utils/apparmor-utils-2.10.ebuild
@@ -2,9 +2,9 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
-EAPI=5
-PYTHON_COMPAT=( python2_7 )
+EAPI=6
 
+PYTHON_COMPAT=( python{2_7,3_4} )
 inherit perl-module python-r1 versionator
 
 DESCRIPTION="Additional userspace utils to assist with AppArmor profile 
management"
@@ -29,8 +29,13 @@ RDEPEND="${DEPEND}
 
 S=${WORKDIR}/apparmor-${PV}/utils
 
+PATCHES=(
+       "${FILESDIR}/${PN}-2.10-python2.patch"
+       "${FILESDIR}/${PN}-2.10-shebang.patch"
+)
+
 src_compile() {
-       python_export_best
+       python_setup
 
        # launches non-make subprocesses causing "make jobserver unavailable"
        # error messages to appear in generated code
@@ -48,5 +53,6 @@ src_install() {
        }
 
        python_foreach_impl install_python
-       python_replicate_script "${D}"/usr/bin/aa-easyprof
+       python_replicate_script "${D}"/usr/bin/aa-easyprof 
"${D}"/usr/sbin/apparmor_status \
+               
"${D}"/usr/sbin/aa-{audit,autodep,cleanprof,complain,disable,enforce,genprof,logprof,mergeprof,status,unconfined}
 }

diff --git a/sys-apps/apparmor-utils/files/apparmor-utils-2.10-python2.patch 
b/sys-apps/apparmor-utils/files/apparmor-utils-2.10-python2.patch
new file mode 100644
index 0000000..412c13c
--- /dev/null
+++ b/sys-apps/apparmor-utils/files/apparmor-utils-2.10-python2.patch
@@ -0,0 +1,132 @@
+Backport from upstream fixing runtime failure with python-2.
+
+https://bugs.launchpad.net/apparmor/+bug/1513880
+
+--- a/apparmor/common.py
++++ b/apparmor/common.py
+@@ -245,6 +245,15 @@
+         return False
+     return True
+ 
++def type_is_str(var):
++    ''' returns True if the given variable is a str (or unicode string when 
using python 2)'''
++    if type(var) == str:
++        return True
++    elif sys.version_info[0] < 3 and type(var) == unicode:  # python 2 
sometimes uses the 'unicode' type
++        return True
++    else:
++        return False
++
+ class DebugLogger(object):
+     def __init__(self, module_name=__name__):
+         self.debugging = False
+
+--- a/apparmor/rule/capability.py
++++ b/apparmor/rule/capability.py
+@@ -14,7 +14,7 @@
+ # ----------------------------------------------------------------------
+ 
+ from apparmor.regex import RE_PROFILE_CAP
+-from apparmor.common import AppArmorBug, AppArmorException
++from apparmor.common import AppArmorBug, AppArmorException, type_is_str
+ from apparmor.rule import BaseRule, BaseRuleset, parse_modifiers
+ import re
+ 
+@@ -47,7 +47,7 @@
+             self.all_caps = True
+             self.capability = set()
+         else:
+-            if type(cap_list) == str:
++            if type_is_str(cap_list):
+                 self.capability = {cap_list}
+             elif type(cap_list) == list and len(cap_list) > 0:
+                 self.capability = set(cap_list)
+
+--- a/apparmor/rule/change_profile.py
++++ b/apparmor/rule/change_profile.py
+@@ -14,7 +14,7 @@
+ # ----------------------------------------------------------------------
+ 
+ from apparmor.regex import RE_PROFILE_CHANGE_PROFILE, strip_quotes
+-from apparmor.common import AppArmorBug, AppArmorException
++from apparmor.common import AppArmorBug, AppArmorException, type_is_str
+ from apparmor.rule import BaseRule, BaseRuleset, parse_modifiers, 
quote_if_needed
+ 
+ # setup module translations
+@@ -48,7 +48,7 @@
+         self.all_execconds = False
+         if execcond == ChangeProfileRule.ALL:
+             self.all_execconds = True
+-        elif type(execcond) == str:
++        elif type_is_str(execcond):
+             if not execcond.strip():
+                 raise AppArmorBug('Empty exec condition in change_profile 
rule')
+             elif execcond.startswith('/') or execcond.startswith('@'):
+@@ -62,7 +62,7 @@
+         self.all_targetprofiles = False
+         if targetprofile == ChangeProfileRule.ALL:
+             self.all_targetprofiles = True
+-        elif type(targetprofile) == str:
++        elif type_is_str(targetprofile):
+             if targetprofile.strip():
+                 self.targetprofile = targetprofile
+             else:
+
+--- a/apparmor/rule/network.py
++++ b/apparmor/rule/network.py
+@@ -16,7 +16,7 @@
+ import re
+ 
+ from apparmor.regex import RE_PROFILE_NETWORK
+-from apparmor.common import AppArmorBug, AppArmorException
++from apparmor.common import AppArmorBug, AppArmorException, type_is_str
+ from apparmor.rule import BaseRule, BaseRuleset, parse_modifiers
+ 
+ # setup module translations
+@@ -66,7 +66,7 @@
+         self.all_domains = False
+         if domain == NetworkRule.ALL:
+             self.all_domains = True
+-        elif type(domain) == str:
++        elif type_is_str(domain):
+             if domain in network_domain_keywords:
+                 self.domain = domain
+             else:
+@@ -78,7 +78,7 @@
+         self.all_type_or_protocols = False
+         if type_or_protocol == NetworkRule.ALL:
+             self.all_type_or_protocols = True
+-        elif type(type_or_protocol) == str:
++        elif type_is_str(type_or_protocol):
+             if type_or_protocol in network_protocol_keywords:
+                 self.type_or_protocol = type_or_protocol
+             elif type_or_protocol in network_type_keywords:
+
+--- a/apparmor/rule/rlimit.py
++++ b/apparmor/rule/rlimit.py
+@@ -16,7 +16,7 @@
+ import re
+ 
+ from apparmor.regex import RE_PROFILE_RLIMIT, strip_quotes
+-from apparmor.common import AppArmorBug, AppArmorException
++from apparmor.common import AppArmorBug, AppArmorException, type_is_str
+ from apparmor.rule import BaseRule, BaseRuleset, parse_comment, 
quote_if_needed
+ 
+ # setup module translations
+@@ -57,7 +57,7 @@
+         if audit or deny or allow_keyword:
+             raise AppArmorBug('The audit, allow or deny keywords are not 
allowed in rlimit rules.')
+ 
+-        if type(rlimit) == str:
++        if type_is_str(rlimit):
+             if rlimit in rlimit_all:
+                 self.rlimit = rlimit
+             else:
+@@ -70,7 +70,7 @@
+         self.all_values = False
+         if value == RlimitRule.ALL:
+             self.all_values = True
+-        elif type(value) == str:
++        elif type_is_str(value):
+             if not value.strip():
+                 raise AppArmorBug('Empty value in rlimit rule')

diff --git a/sys-apps/apparmor-utils/files/apparmor-utils-2.10-shebang.patch 
b/sys-apps/apparmor-utils/files/apparmor-utils-2.10-shebang.patch
new file mode 100644
index 0000000..19b8892
--- /dev/null
+++ b/sys-apps/apparmor-utils/files/apparmor-utils-2.10-shebang.patch
@@ -0,0 +1,16 @@
+Avoid rewriting the shebang.
+
+The ebuild will take care of this when replicating the script for each of the
+supported python implementations.
+
+--- a/python-tools-setup.py
++++ b/python-tools-setup.py
+@@ -43,7 +43,7 @@
+             f = prefix + s
+             # If we have a defined python version, use it instead of the 
system
+             # default
+-            if 'PYTHON' in os.environ:
++            if False:
+                 lines = open(os.path.basename(s)).readlines()
+                 lines[0] = '#! /usr/bin/env %s\n' % os.environ['PYTHON']
+                 open(f, 'w').write("".join(lines))

Reply via email to