summaryrefslogtreecommitdiff
path: root/tests/cp/thru-dangling
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2007-11-16 09:31:15 +0100
committerJim Meyering <meyering@redhat.com>2007-11-22 00:19:06 +0100
commit2bdc48121916ab0d7bb7d0cb5cee25549c3705c9 (patch)
tree8a808a3c99c29aa7f5e958f7bac4f274f8eb753c /tests/cp/thru-dangling
parentfa636dcf6a298a4935ba950d433c33a07d0f8504 (diff)
downloadcoreutils-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-xtests/cp/thru-dangling13
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