Good, thanks for confirming that the chmod family does not have a
similar bug.
I installed the attached workaround into coreutils master on Savannah.
Please give it a try.From 5f971361608749e1245c5eb12096de2acd32bf83 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
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 <https://bugs.gnu.org/65599>. 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.39.2