From 9d7e240c9dd3fdbca6a7de7a352379d26f32a7ae Mon Sep 17 00:00:00 2001 From: Chris Church Date: Wed, 13 Aug 2014 09:53:34 -0400 Subject: [PATCH] Better detection of permission denied when reading /etc/awx/settings.py to display appropriate error message. --- awx/__init__.py | 6 +++--- awx/settings/production.py | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/awx/__init__.py b/awx/__init__.py index a85c982c34..974a7942a3 100644 --- a/awx/__init__.py +++ b/awx/__init__.py @@ -80,12 +80,12 @@ def manage(): sys.stdout.write('%s\n' % __version__) # If running as a user without permission to read settings, display an # error message. Allow --help to still work. - elif getattr(settings, 'MUST_BE_ROOT_OR_AWX', False): - if len(sys.argv) == 1 or len(sys.argv) >= 2 and sys.argv[1] in ('-h', '--help'): + elif settings.SECRET_KEY == 'permission-denied': + if len(sys.argv) == 1 or len(sys.argv) >= 2 and sys.argv[1] in ('-h', '--help', 'help'): execute_from_command_line(sys.argv) sys.stdout.write('\n') prog = os.path.basename(sys.argv[0]) - sys.stdout.write('%s must be run as root or awx.\n' % prog) + sys.stdout.write('Permission denied: %s must be run as root or awx.\n' % prog) sys.exit(1) else: execute_from_command_line(sys.argv) diff --git a/awx/settings/production.py b/awx/settings/production.py index ca3200ec28..2341e607f7 100644 --- a/awx/settings/production.py +++ b/awx/settings/production.py @@ -75,18 +75,24 @@ try: except ImportError: traceback.print_exc() sys.exit(1) -except IOError, e: +except IOError: from django.core.exceptions import ImproperlyConfigured included_file = locals().get('__included_file__', '') - if (not included_file or included_file == settings_file) and not os.path.exists(settings_file): - if e.errno == errno.EACCES: - MUST_BE_ROOT_OR_AWX = True - elif 'AWX_SETTINGS_FILE' not in os.environ: + if (not included_file or included_file == settings_file): + # The import doesn't always give permission denied, so try to open the + # settings file directly. + try: + e = None + open(settings_file) + except IOError, e: + pass + if e and e.errno == errno.EACCES: + SECRET_KEY = 'permission-denied' + LOGGING = {} + else: msg = 'No AWX configuration found at %s.' % settings_file msg += '\nDefine the AWX_SETTINGS_FILE environment variable to ' msg += 'specify an alternate path.' raise ImproperlyConfigured(msg) - else: - raise else: raise