| Test Execution Status | Statistics |
|---|---|
| Passed | 0.000% (0/108) |
| Failed | 0.000% (0/108) |
| Requires Manual Checking | 0.000% (0/108) |
| Unknown | 0.926% (1/108) |
| All | 0.926% (1/108) |
| Category | Removed Lines | Inserted Lines | Total |
|---|---|---|---|
| Modified lines executed: | 50.000% (2/4) | 18.182% (4/22) | 23.077% (6/26) |
| Modified lines not executed: | 25.000% (1/4) | 13.636% (3/22) | 15.385% (4/26) |
| Source code lines not covered: | 25.000% (1/4) | 68.182% (15/22) | 61.538% (16/26) |
| Execution Name | State |
|---|---|
| cp | Unknown |
| Line | Tests | Difference Output |
|---|---|---|
| diff --git a/NEWS b/NEWS | ||
| index 8a9e09eb4..5fa69285d 100644 | ||
| --- a/NEWS | ||
| +++ b/NEWS | ||
| @@ -16,6 +16,11 @@ GNU coreutils NEWS -*- outline -*- | ||
| 16 | that caused -u to sometimes override -n. | |
| 17 | [bug introduced with coreutils-7.1] | |
| 18 | ||
| 19 | - | + 'cp -a --no-preserve=mode' now sets appropriate default permissions |
| 20 | - | + for non regular files like fifos and character device nodes etc. |
| 21 | - | + Previously it would have set executable bits on created special files. |
| 22 | - | + [bug introduced with coreutils-8.20] |
| 23 | - | + |
| 19 ➡ 24 | ||
| 20 ➡ 25 | * Noteworthy changes in release 8.29 (2017-12-27) [stable] | |
| 21 ➡ 26 |
| Line | Tests | Difference Output |
|---|---|---|
| diff --git a/src/copy.c b/src/copy.c | ||
| index e050d4199..4998c83e6 100644 | ||
| --- a/src/copy.c | ||
| +++ b/src/copy.c | ||
| @@ -1353,7 +1353,10 @@ preserve_metadata: | ||
| 1353 | bool access_changed = false; | |
| 1354 | ||
| 1355 | if (!(sb.st_mode & S_IWUSR) && geteuid () != ROOT_UID) | |
| 1356 | 0 | - access_changed = fchmod_or_lchmod (dest_desc, dst_name, 0600) == 0; |
| 1356 | - | + { |
| 1357 | 0 | + access_changed = fchmod_or_lchmod (dest_desc, dst_name, |
| 1358 | 0 | + S_IRUSR | S_IWUSR) == 0; |
| 1359 | 0 | + } |
| 1357 ➡ 1360 | ||
| 1358 ➡ 1361 | if (!copy_attr (src_name, source_desc, dst_name, dest_desc, x) | |
| 1359 ➡ 1362 | && x->require_preserve_xattr) | |
| @@ -1378,7 +1381,7 @@ preserve_metadata: | ||
| 1378 ➡ 1381 | } | |
| 1379 ➡ 1382 | else if (x->explicit_no_preserve_mode) | |
| 1380 ➡ 1383 | { | |
| 1381 | 1 Executed by:
| - if (set_acl (dst_name, dest_desc, 0666 & ~cached_umask ()) != 0) |
| 1384 | 1 Executed by:
| + if (set_acl (dst_name, dest_desc, MODE_RW_UGO & ~cached_umask ()) != 0) |
| 1382 ➡ 1385 | return_val = false; | |
| 1383 ➡ 1386 | } | |
| 1384 ➡ 1387 | else if (omitted_permissions) | |
| @@ -2860,7 +2863,9 @@ copy_internal (char const *src_name, char const *dst_name, | ||
| 2860 ➡ 2863 | } | |
| 2861 ➡ 2864 | else if (x->explicit_no_preserve_mode) | |
| 2862 ➡ 2865 | { | |
| 2863 | 1 Executed by:
| - if (set_acl (dst_name, -1, 0777 & ~cached_umask ()) != 0) |
| 2866 | 1 Executed by:
| + int default_permissions = S_ISDIR (src_mode) || S_ISSOCK (src_mode) |
| 2867 | 1 Executed by:
| + ? S_IRWXUGO : MODE_RW_UGO; |
| 2868 | 1 Executed by:
| + if (set_acl (dst_name, -1, default_permissions & ~cached_umask ()) != 0) |
| 2864 ➡ 2869 | return false; | |
| 2865 ➡ 2870 | } | |
| 2866 ➡ 2871 | else |
| Line | Tests | Difference Output |
|---|---|---|
| diff --git a/tests/cp/preserve-mode.sh b/tests/cp/preserve-mode.sh | ||
| index 1cd173a6c..3b0aca8e7 100755 | ||
| --- a/tests/cp/preserve-mode.sh | ||
| +++ b/tests/cp/preserve-mode.sh | ||
| @@ -19,7 +19,7 @@ | ||
| 19 | . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src | |
| 20 | print_ver_ cp | |
| 21 | ||
| 22 | - No equivalent source code line in the reference code can be identified. | -get_mode() { ls -ld "$1" | cut -b-10; } |
| 22 | - | +get_mode() { stat -c%f "$1"; } |
| 23 | ||
| 24 | rm -f a b c | |
| 25 | umask 0022 | |
| @@ -47,4 +47,12 @@ chmod 600 a | ||
| 47 | cp --no-preserve=mode --preserve=all a b || fail=1 | |
| 48 | test "$(get_mode a)" = "$(get_mode b)" || fail=1 | |
| 49 | ||
| 50 | - | +#fifo test |
| 51 | - | +if mkfifo fifo; then |
| 52 | - | + cp -a --no-preserve=mode fifo fifo_copy || fail=1 |
| 53 | - | + #ensure default perms set appropriate for non regular files |
| 54 | - | + #which wasn't done between v8.20 and 8.29 inclusive |
| 55 | - | + test "$(get_mode fifo)" = "$(get_mode fifo_copy)" || fail=1 |
| 56 | - | +fi |
| 57 | - | + |
| 50 ➡ 58 | Exit $fail |