File fix-file.find-tracebacks-with-non-utf8-file-names-bs.patch of Package salt

From 7f387d15c8cd7947ea64a94088c2a8bbd52c944e Mon Sep 17 00:00:00 2001
From: Victor Zhestkov <35733135+vzhestkov@users.noreply.github.com>
Date: Mon, 8 Nov 2021 17:40:02 +0300
Subject: [PATCH] Fix file.find tracebacks with non utf8 file names
 (bsc#1190114) (#427)

---
 salt/modules/file.py | 4 ++++
 salt/utils/find.py   | 5 ++++-
 salt/utils/path.py   | 2 +-
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/salt/modules/file.py b/salt/modules/file.py
index c834adfcde..8a9fd84a99 100644
--- a/salt/modules/file.py
+++ b/salt/modules/file.py
@@ -1078,6 +1078,10 @@ def find(path, *args, **kwargs):
         return 'error: {0}'.format(ex)
 
     ret = [item for i in [finder.find(p) for p in glob.glob(os.path.expanduser(path))] for item in i]
+    if six.PY2:
+        ret = [i.decode('utf-8', 'replace') if isinstance(i, str) else i for i in ret]
+    else:
+        ret = [i.encode('utf-8', 'replace').decode('utf-8') for i in ret]
     ret.sort()
     return ret
 
diff --git a/salt/utils/find.py b/salt/utils/find.py
index b78385dbf8..6ef26ccc74 100644
--- a/salt/utils/find.py
+++ b/salt/utils/find.py
@@ -648,7 +648,10 @@ class Finder(object):
             depth = path_depth(relpath) + 1
             if depth >= self.mindepth and (self.maxdepth is None or self.maxdepth >= depth):
                 for name in dirs + files:
-                    fullpath = os.path.join(dirpath, name)
+                    try:
+                        fullpath = os.path.join(dirpath, name)
+                    except UnicodeDecodeError:
+                        fullpath = os.path.join(dirpath.encode('utf-8'), name)
                     match, fstat = self._check_criteria(dirpath, name, fullpath)
                     if match:
                         for result in self._perform_actions(fullpath, fstat=fstat):
diff --git a/salt/utils/path.py b/salt/utils/path.py
index 6cbbf3a08e..0c1a146eea 100644
--- a/salt/utils/path.py
+++ b/salt/utils/path.py
@@ -453,4 +453,4 @@ def os_walk(top, *args, **kwargs):
     else:
         top_query = salt.utils.stringutils.to_str(top)
     for item in os.walk(top_query, *args, **kwargs):
-        yield salt.utils.data.decode(item, preserve_tuples=True)
+        yield salt.utils.data.decode(item, keep=True, preserve_tuples=True)
-- 
2.33.1


openSUSE Build Service is sponsored by