Hello, Am Dienstag, 1. Dezember 2015 schrieb Christian Boltz: > Am Montag, 30. November 2015 schrieb Tyler Hicks: > > A common usage of aa-easyprof is to pipe its stdout to a file > > representing an AppArmor profile. Errors must go to stderr. > > > > https://launchpad.net/bugs/1521400 > > > > Signed-off-by: Tyler Hicks <tyhi...@canonical.com> > > --- > > > > utils/aa-easyprof | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/utils/aa-easyprof b/utils/aa-easyprof > > index 93861ae..8e9db71 100755 > > --- a/utils/aa-easyprof > > +++ b/utils/aa-easyprof > > > > @@ -53,7 +53,10 @@ if __name__ == "__main__": > > error("Could not read '%s': %s (%d)\n" % (opt.manifest, > > > > os.strerror(e.errno), e.errno)) - profiles = > > apparmor.easyprof.parse_manifest(manifest, opt) + try: > > + profiles = apparmor.easyprof.parse_manifest(manifest, > > opt) > > + except AppArmorException as e: > > + error(e.value) > > > > else: # fake up a tuple list when processing command line args > > > > profiles.append( (binary, opt) ) > > NAK. > > aa-easyprof is using apparmor.fail for exception handling, so it > doesn't make sense to fix this only for aa-easyprof. We should fix > this in apparmor.fail so that everybody benefits ;-) > > As a replacement for your patch, I propose: > > > [patch] Let the apparmor.fail error handler print to stderr > > The patch also switches to using error() instead of a plain print() > for AppArmorException, which means prefixing the error message with > 'ERROR: ' > > References: https://bugs.launchpad.net/apparmor/+bug/1521400 > > > I propose this patch for trunk and 2.10.
Some more testing shows that apparmor.fail needs from __future__ import print_function to ensure compability with python 2.x. Here's the updated patch: [ 23-apparmor-fail-print-to-stderr.diff ] --- utils/apparmor/fail.py 2015-12-02 21:53:34.635564749 +0100 +++ utils/apparmor/fail.py 2015-12-02 21:54:34.795174617 +0100 @@ -8,12 +8,16 @@ # # ------------------------------------------------------------------ +from __future__ import print_function # needed in py2 for print('...', file=sys.stderr) + import cgitb import os import sys import tempfile import traceback +from apparmor.common import error + # # Exception handling # @@ -27,8 +31,8 @@ (ex_cls, ex, tb) = exc_info if ex_cls.__name__ == 'AppArmorException': # I didn't find a way to get this working with isinstance() :-/ - print('') - print(ex.value) + print('', file=sys.stderr) + error(ex.value) else: (fd, path) = tempfile.mkstemp(prefix='apparmor-bugreport-', suffix='.txt') file = os.fdopen(fd, 'w') @@ -40,13 +44,13 @@ file.write('Please consider reporting a bug at https://bugs.launchpad.net/apparmor/\n') file.write('and attach this file.\n') - print(''.join(traceback.format_exception(*exc_info))) - print('') - print('An unexpected error occoured!') - print('') - print('For details, see %s' % path) - print('Please consider reporting a bug at https://bugs.launchpad.net/apparmor/') - print('and attach this file.') + print(''.join(traceback.format_exception(*exc_info)), file=sys.stderr) + print('', file=sys.stderr) + print('An unexpected error occoured!', file=sys.stderr) + print('', file=sys.stderr) + print('For details, see %s' % path, file=sys.stderr) + print('Please consider reporting a bug at https://bugs.launchpad.net/apparmor/', file=sys.stderr) + print('and attach this file.', file=sys.stderr) def enable_aa_exception_handler(): '''Setup handle_exception() as exception handler''' Regards, Christian Boltz -- I have also tried to understand how to write and install systemd stuff to start daemons and it definitely hasn't passed the "10 minute test". It definitely lacks better documentation, or I've been too lazy, I wouldn't exclude that from the equation :) [Pascal Bleser in opensuse-factory] -- AppArmor mailing list AppArmor@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor