diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-05-14 05:30:22 (GMT) |
---|---|---|
committer | Giampaolo Rodola <g.rodola@gmail.com> | 2019-05-14 05:30:22 (GMT) |
commit | 0a5b88e7f23b671d63896619b13148b0e4e2b5dd (patch) | |
tree | efd4fa070f4f951fafb751e5a6a50223038e4768 /Lib/shutil.py | |
parent | da86bf7396c6509534a94407fe83e7106c9d5959 (diff) | |
download | cpython-0a5b88e7f23b671d63896619b13148b0e4e2b5dd.zip cpython-0a5b88e7f23b671d63896619b13148b0e4e2b5dd.tar.gz cpython-0a5b88e7f23b671d63896619b13148b0e4e2b5dd.tar.bz2 |
bpo-24538: Fix bug in shutil involving the copying of xattrs to read-only files. (PR-13212) (#13234)
Extended attributes can only be set on user-writeable files, but shutil previously
first chmod()ed the destination file to the source's permissions and then tried to
copy xattrs. This will cause failures if attempting to copy read-only files with
xattrs, as occurs with Git clones on Lustre FS.
(cherry picked from commit 79efbb719383386051c72f2ee932eeca8e033e6b)
Co-authored-by: Olexa Bilaniuk <obilaniu@users.noreply.github.com>
Diffstat (limited to 'Lib/shutil.py')
-rw-r--r-- | Lib/shutil.py | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Lib/shutil.py b/Lib/shutil.py index b0a53db..4c6fdd7 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -203,6 +203,9 @@ def copystat(src, dst, *, follow_symlinks=True): mode = stat.S_IMODE(st.st_mode) lookup("utime")(dst, ns=(st.st_atime_ns, st.st_mtime_ns), follow_symlinks=follow) + # We must copy extended attributes before the file is (potentially) + # chmod()'ed read-only, otherwise setxattr() will error with -EACCES. + _copyxattr(src, dst, follow_symlinks=follow) try: lookup("chmod")(dst, mode, follow_symlinks=follow) except NotImplementedError: @@ -226,7 +229,6 @@ def copystat(src, dst, *, follow_symlinks=True): break else: raise - _copyxattr(src, dst, follow_symlinks=follow) def copy(src, dst, *, follow_symlinks=True): """Copy data and mode bits ("cp src dst"). Return the file's destination. |