diff options
author | Jim Meyering <meyering@redhat.com> | 2007-11-16 09:31:15 +0100 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2007-11-22 00:19:06 +0100 |
commit | 2bdc48121916ab0d7bb7d0cb5cee25549c3705c9 (patch) | |
tree | 8a808a3c99c29aa7f5e958f7bac4f274f8eb753c /tests/cp/thru-dangling | |
parent | fa636dcf6a298a4935ba950d433c33a07d0f8504 (diff) | |
download | coreutils-2bdc48121916ab0d7bb7d0cb5cee25549c3705c9.tar.xz |
cp: by default, refuse to copy through a dangling destination symlink
* NEWS: Mention this change.
* doc/coreutils.texi (cp invocation): Describe the new behavior.
* src/copy.c: No longer include "canonicalize.h".
(copy_reg): Upon failure to open a dangling destination symlink, don't
canonicalize the name, but rather fail (default) or, with POSIXLY_CORRECT,
repeat the open call without O_EXCL (potentially dangerous).
* src/copy.h (struct cp_options) [open_dangling_dest_symlink]:
New member. Reorder the others, grouping "bool" and "enum"
members together.
* tests/cp/thru-dangling: Test for changed and new behavior.
* src/cp.c (cp_option_init): Initialize new member.
* src/install.c (cp_option_init): Likewise.
* src/mv.c (cp_option_init): Likewise.
Signed-off-by: Jim Meyering <meyering@redhat.com>
Diffstat (limited to 'tests/cp/thru-dangling')
-rwxr-xr-x | tests/cp/thru-dangling | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/tests/cp/thru-dangling b/tests/cp/thru-dangling index 0503af943..0256a167c 100755 --- a/tests/cp/thru-dangling +++ b/tests/cp/thru-dangling @@ -1,5 +1,5 @@ #!/bin/sh -# Ensure that cp works when the destination is a dangling symlink +# Ensure that cp works as documented, when the destination is a dangling symlink # Copyright (C) 2007 Free Software Foundation, Inc. @@ -26,10 +26,19 @@ fi ln -s no-such dangle || framework_failure echo hi > f || framework_failure echo hi > exp || framework_failure +echo "cp: not writing through dangling symlink \`dangle'" \ + > exp-err || framework_failure fail=0 -cp f dangle > out 2>&1 || fail=1 +# Starting with 6.9.90, this usage fails, by default: +cp f dangle > err 2>&1 && fail=1 + +compare err exp-err || fail=1 +test -f no-such && fail=1 + +# But you can set POSIXLY_CORRECT to get the historical behavior. +POSIXLY_CORRECT=1 cp f dangle > out 2>&1 || fail=1 cat no-such >> out || fail=1 compare out exp || fail=1 |