From f62dfe85cc2f4dd346c8077c38cc96417c935bdc Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Mon, 20 Apr 2020 13:16:09 -0400 Subject: [PATCH] escape certain log aggregator settings when generating rsyslog config see: https://github.com/ansible/awx/issues/6760 --- awx/main/utils/external_logging.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/awx/main/utils/external_logging.py b/awx/main/utils/external_logging.py index a1c002c374..32b67542a8 100644 --- a/awx/main/utils/external_logging.py +++ b/awx/main/utils/external_logging.py @@ -23,6 +23,10 @@ def construct_rsyslog_conf_template(settings=settings): 'input(type="imuxsock" Socket="' + settings.LOGGING['handlers']['external_logger']['address'] + '" unlink="on")', 'template(name="awx" type="string" string="%rawmsg-after-pri%")', ]) + + def escape_quotes(x): + return x.replace('"', '\\"') + if not enabled: parts.append('action(type="omfile" file="/dev/null")') # rsyslog needs *at least* one valid action to start tmpl = '\n'.join(parts) @@ -36,7 +40,7 @@ def construct_rsyslog_conf_template(settings=settings): host = '%s://%s' % (scheme, host) if scheme else '//%s' % host parsed = urlparse.urlsplit(host) - host = parsed.hostname + host = escape_quotes(parsed.hostname) try: if parsed.port: port = parsed.port @@ -65,8 +69,8 @@ def construct_rsyslog_conf_template(settings=settings): if parsed.query: path = f'{path}?{urlparse.quote(parsed.query)}' params.append(f'restpath="{path}"') - username = getattr(settings, 'LOG_AGGREGATOR_USERNAME', '') - password = getattr(settings, 'LOG_AGGREGATOR_PASSWORD', '') + username = escape_quotes(getattr(settings, 'LOG_AGGREGATOR_USERNAME', '')) + password = escape_quotes(getattr(settings, 'LOG_AGGREGATOR_PASSWORD', '')) if getattr(settings, 'LOG_AGGREGATOR_TYPE', None) == 'splunk': # splunk has a weird authorization header if password: