File backport-46867-string-arg-normalization-bsc-1094960.patch of Package salt
From 087080c12f9cb422527971dd8bb5b3205dc91da0 Mon Sep 17 00:00:00 2001
From: Bo Maryniuk <bo@suse.de>
Date: Tue, 29 May 2018 16:33:01 +0200
Subject: [PATCH] Backport #46867 string arg normalization (bsc#1094960)
use unicode key for the logging
Add unicode literals to cp module
---
salt/log/setup.py | 30 ++++++++++++++++++++----------
salt/modules/cp.py | 2 +-
salt/modules/file.py | 2 +-
3 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/salt/log/setup.py b/salt/log/setup.py
index b321f22477..a367fdb943 100644
--- a/salt/log/setup.py
+++ b/salt/log/setup.py
@@ -320,15 +320,16 @@ class SaltLoggingClass(six.with_metaclass(LoggingMixInMeta, LOGGING_LOGGER_CLASS
# If nothing else is in extra, make it None
extra = None
+ salt_system_encoding = __salt_system_encoding__
+ if salt_system_encoding == 'ascii':
+ # Encoding detection most likely failed, let's use the utf-8
+ # value which we defaulted before __salt_system_encoding__ was
+ # implemented
+ salt_system_encoding = 'utf-8'
+
# Let's try to make every logging message unicode
if isinstance(msg, six.string_types) \
and not isinstance(msg, six.text_type):
- salt_system_encoding = __salt_system_encoding__
- if salt_system_encoding == 'ascii':
- # Encoding detection most likely failed, let's use the utf-8
- # value which we defaulted before __salt_system_encoding__ was
- # implemented
- salt_system_encoding = 'utf-8'
try:
_msg = msg.decode(salt_system_encoding, 'replace')
except UnicodeDecodeError:
@@ -336,12 +337,21 @@ class SaltLoggingClass(six.with_metaclass(LoggingMixInMeta, LOGGING_LOGGER_CLASS
else:
_msg = msg
+ _args = []
+ for item in args:
+ if isinstance(item, six.string_types) and not isinstance(item, six.text_type):
+ try:
+ _args.append(item.decode(salt_system_encoding, 'replace'))
+ except UnicodeDecodeError:
+ _args.append(item.decode(salt_system_encoding, 'ignore'))
+ else:
+ _args.append(item)
+ _args = tuple(_args)
+
if six.PY3:
- logrecord = _LOG_RECORD_FACTORY(name, level, fn, lno, _msg, args,
- exc_info, func, sinfo)
+ logrecord = _LOG_RECORD_FACTORY(name, level, fn, lno, _msg, _args, exc_info, func, sinfo)
else:
- logrecord = _LOG_RECORD_FACTORY(name, level, fn, lno, _msg, args,
- exc_info, func)
+ logrecord = _LOG_RECORD_FACTORY(name, level, fn, lno, _msg, _args, exc_info, func)
if extra is not None:
for key in extra:
diff --git a/salt/modules/cp.py b/salt/modules/cp.py
index 3f3fe1a989..d4000655e9 100644
--- a/salt/modules/cp.py
+++ b/salt/modules/cp.py
@@ -4,7 +4,7 @@ Minion side functions for salt-cp
'''
# Import python libs
-from __future__ import absolute_import
+from __future__ import absolute_import, unicode_literals
import base64
import errno
import os
diff --git a/salt/modules/file.py b/salt/modules/file.py
index 9186de9166..8e45c5166d 100644
--- a/salt/modules/file.py
+++ b/salt/modules/file.py
@@ -3545,7 +3545,7 @@ def source_list(source, source_hash, saltenv):
salt '*' file.source_list salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' base
'''
- contextkey = '{0}_|-{1}_|-{2}'.format(source, source_hash, saltenv)
+ contextkey = u'{0}_|-{1}_|-{2}'.format(source, source_hash, saltenv)
if contextkey in __context__:
return __context__[contextkey]
--
2.17.1