#17076: Make copying of xattrs more permissive of missing FS support

Patch by Thomas Wouters.
diff --git a/Lib/shutil.py b/Lib/shutil.py
index e4b640c..a188408 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -142,7 +142,13 @@
 
         """
 
-        for name in os.listxattr(src, follow_symlinks=follow_symlinks):
+        try:
+            names = os.listxattr(src, follow_symlinks=follow_symlinks)
+        except OSError as e:
+            if e.errno not in (errno.ENOTSUP, errno.ENODATA):
+                raise
+            return
+        for name in names:
             try:
                 value = os.getxattr(src, name, follow_symlinks=follow_symlinks)
                 os.setxattr(dst, name, value, follow_symlinks=follow_symlinks)
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 8ac350a..3b1b694 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -449,6 +449,17 @@
             self.assertIn('user.bar', os.listxattr(dst))
         finally:
             os.setxattr = orig_setxattr
+        # the source filesystem not supporting xattrs should be ok, too.
+        def _raise_on_src(fname, *, follow_symlinks=True):
+            if fname == src:
+                raise OSError(errno.ENOTSUP, 'Operation not supported')
+            return orig_listxattr(fname, follow_symlinks=follow_symlinks)
+        try:
+            orig_listxattr = os.listxattr
+            os.listxattr = _raise_on_src
+            shutil._copyxattr(src, dst)
+        finally:
+            os.listxattr = orig_listxattr
 
         # test that shutil.copystat copies xattrs
         src = os.path.join(tmp_dir, 'the_original')