summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-03-07 15:40:19 (GMT)
committerBrad King <brad.king@kitware.com>2023-03-07 16:39:58 (GMT)
commit35f2b1bf5b5593020d4ba0dfdc1cb265c2a3c095 (patch)
treea51b1851ea52a33e2613687c1f15713d285700d7 /Source
parent5f4dad37f03b36131e41306773a665486797733d (diff)
downloadCMake-35f2b1bf5b5593020d4ba0dfdc1cb265c2a3c095.zip
CMake-35f2b1bf5b5593020d4ba0dfdc1cb265c2a3c095.tar.gz
CMake-35f2b1bf5b5593020d4ba0dfdc1cb265c2a3c095.tar.bz2
file(INSTALL): Fix file ownership regression when running as root on macOS
Backport KWSys commit `51272e80e` (SystemTools: Avoid macOS copyfile semantic differences as root, 2023-03-07). Fixes: #24577
Diffstat (limited to 'Source')
-rw-r--r--Source/kwsys/SystemTools.cxx6
1 files changed, 6 insertions, 0 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index a3ab51a..573cc6a 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -2528,6 +2528,12 @@ SystemTools::CopyStatus SystemTools::CloneFileContent(
return status;
#elif defined(__APPLE__) && \
defined(KWSYS_SYSTEMTOOLS_HAVE_MACOS_COPYFILE_CLONE)
+ // When running as root, copyfile() copies more metadata than we
+ // want, such as ownership. Pretend it is not available.
+ if (getuid() == 0) {
+ return CopyStatus{ Status::POSIX(ENOSYS), CopyStatus::NoPath };
+ }
+
// NOTE: we cannot use `clonefile` as the {a,c,m}time for the file needs to
// be updated by `copy_file_if_different` and `copy_file`.
if (copyfile(source.c_str(), destination.c_str(), nullptr,