Package: coreutils
Version: 9.1-1
Severity: important
There are regressions wrt how backups are performed by cp,mv,install
as detailed in the following upstream reports:
From https://bugs.gnu.org/55029
From https://bugs.gnu.org/62607
These should be addressed by the attached patch,
Note this has already been applied to Fedora at:
https://src.fedoraproject.org/rpms/coreutils/raw/f38/f/gnulib-simple-backup-fix.patch
diff -Naur coreutils-9.1.orig/lib/backupfile.c coreutils-9.1/lib/backupfile.c
--- coreutils-9.1.orig/lib/backupfile.c 2022-04-08 11:22:26.000000000 +0000
+++ coreutils-9.1/lib/backupfile.c 2023-05-04 17:07:20.784911071 +0000
@@ -332,7 +332,7 @@
return s;
DIR *dirp = NULL;
- int sdir = AT_FDCWD;
+ int sdir = -1;
idx_t base_max = 0;
while (true)
{
@@ -371,10 +371,10 @@
if (! rename)
break;
- int olddirfd = sdir < 0 ? dir_fd : sdir;
+ dir_fd = sdir < 0 ? dir_fd : sdir;
idx_t offset = sdir < 0 ? 0 : base_offset;
unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE;
- if (renameatu (olddirfd, file + offset, sdir, s + offset, flags) == 0)
+ if (renameatu (dir_fd, file + offset, dir_fd, s + offset, flags) == 0)
break;
int e = errno;
if (! (e == EEXIST && extended))
diff -Naur coreutils-9.1.orig/tests/cp/backup-dir.sh coreutils-9.1/tests/cp/backup-dir.sh
--- coreutils-9.1.orig/tests/cp/backup-dir.sh 2022-04-08 11:22:18.000000000 +0000
+++ coreutils-9.1/tests/cp/backup-dir.sh 2023-05-04 17:07:24.851960384 +0000
@@ -1,5 +1,5 @@
#!/bin/sh
-# Ensure that cp -b doesn't back up directories.
+# Ensure that cp -b handles directories appropriately
# Copyright (C) 2006-2022 Free Software Foundation, Inc.
@@ -29,4 +29,10 @@
test -d y/x || fail=1
test -d y/x~ && fail=1
+# Bug 62607.
+# This would fail to backup using rename, and thus fail to replace the file
+mkdir -p src/foo dst/foo || framework_failure_
+touch src/foo/bar dst/foo/bar || framework_failure_
+cp --recursive --backup src/* dst || fail=1
+
Exit $fail
diff -Naur coreutils-9.1.orig/tests/mv/backup-dir.sh coreutils-9.1/tests/mv/backup-dir.sh
--- coreutils-9.1.orig/tests/mv/backup-dir.sh 2022-04-08 11:22:18.000000000 +0000
+++ coreutils-9.1/tests/mv/backup-dir.sh 2023-05-04 17:03:29.593098230 +0000
@@ -36,4 +36,10 @@
mv -T --backup=numbered C E/ || fail=1
mv -T --backup=numbered D E/ || fail=1
+# Bug#55029
+mkdir F && echo 1 >1 && echo 2 >2 && cp 1 F/X && cp 2 X || framework_failure_
+mv --backup=simple X F/ || fail=1
+compare 1 F/X~ || fail=1
+compare 2 F/X || fail=1
+
Exit $fail