From 5f971361608749e1245c5eb12096de2acd32bf83 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 1 Sep 2023 15:05:21 -0700 Subject: [PATCH] cp,mv,install: fix chown on Linux CIFS * src/copy.c (chown_failure_ok): Also treat EACCES as OK. --- NEWS | 4 ++++ src/copy.c | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index c00ff0cf2..6801832f7 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,10 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes + cp, mv, install no longer issue spurious "failed to preserve ownership" + diagnostics when copying to GNU/Linux CIFS filesystems. They do + this by working around a Linux CIFS bug. + numfmt options like --suffix no longer have an arbitrary 127-byte limit. [bug introduced with numfmt in coreutils-8.21] diff --git a/src/copy.c b/src/copy.c index 485879525..0b3de04f3 100644 --- a/src/copy.c +++ b/src/copy.c @@ -3449,9 +3449,16 @@ chown_failure_ok (struct cp_options const *x) { /* If non-root uses -p, it's ok if we can't preserve ownership. But root probably wants to know, e.g. if NFS disallows it, - or if the target system doesn't support file ownership. */ + or if the target system doesn't support file ownership. - return ((errno == EPERM || errno == EINVAL) && !x->chown_privileges); + Treat EACCES like EPERM and EINVAL to work around a bug in Linux + CIFS . Although this means coreutils + will ignore EACCES errors that it should report, problems should + occur only when some other process is racing with coreutils and + coreutils is not immune to races anyway. */ + + return ((errno == EPERM || errno == EINVAL || errno == EACCES) + && !x->chown_privileges); } /* Similarly, return true if it's OK for chmod and similar operations -- 2.11.4.GIT