freebsd-src/bin
Dag-Erling Smørgrav 0729d1e8fd cp: Never follow symbolic links in destination.
Historically, BSD cp has followed symbolic links in the destination
when copying recursively, while GNU cp has not.  POSIX is somewhat
vague on the topic, but both interpretations are within bounds.  In
33ad990ce9, cp was changed to apply the same logic for symbolic
links in the destination as for symbolic links in the source: follow
if not recursing (which is moot, as this situation can only arise
while recursing) or if the `-L` option was given.  There is no support
for this in POSIX.  We can either switch back, or go all the way.

Having carefully weighed the kind of trouble you can run into by
following unexpected symlinks up against the kind of trouble you can
run into by not following symlinks you expected to follow, we choose
to go all the way.

Note that this means we need to stat the destination twice: once,
following links, to check if it is or references the same file as the
source, and a second time, not following links, to set the dne flag
and determine the destination's type.

While here, remove a needless complication in the dne logic.  We don't
need to explicitly reject overwriting a directory with a non-directory,
because it will fail anyway.

Finally, add test cases for copying a directory to a symlink and
overwriting a directory with a non-directory.

MFC after:	never
Relnotes: 	yes
Sponsored by:	Klara, Inc.
Reviewed by:	kevans
Differential Revision:	https://reviews.freebsd.org/D44578
2024-04-09 00:41:33 +02:00
..
cat cat: fix cap_rights_init usage 2024-02-14 19:37:54 -05:00
chflags chflags(1): obey siginfo request on chflagsat(2) failure 2024-01-30 22:21:55 +02:00
chio chio(8): Fix typo in the copyright section 2024-02-13 12:38:27 +08:00
chmod Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
cp cp: Never follow symbolic links in destination. 2024-04-09 00:41:33 +02:00
cpuset Use proper convention for relative path linking 2023-08-18 04:20:32 -07:00
csh csh: Use HOST_CC when compiling hostprog used by csh build 2024-03-27 18:21:50 -04:00
date date(1): Grammar fixes 2024-02-13 19:00:59 +08:00
dd bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
df df(1): Fix grammar 2024-02-13 18:31:05 +08:00
domainname domainname(1): Grammar fix 2024-02-13 19:13:33 +08:00
echo echo(1): Add EXAMPLES 2024-04-08 18:35:40 +02:00
ed ed(1): Fix grammar in comment 2024-02-13 17:55:54 +08:00
expr Remove $FreeBSD$: two-line nroff pattern 2023-08-16 11:55:10 -06:00
freebsd-version bsdinstall: rename "Live CD" to "Live System" 2023-12-29 15:24:25 -05:00
getfacl bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
hostname tests: Fixing incomplete atf_skip if missing jail condition 2024-02-23 13:08:09 +01:00
kenv bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
kill Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
ln ln: Improve link(1) variant of ln(1). 2024-04-04 16:14:50 +02:00
ls ls.1: Mention CLICOLOR environment variable 2024-02-21 11:54:58 +01:00
mkdir Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
mv mv: Improve comment 2023-12-26 10:24:22 -07:00
nproc nproc.1: Fix "first appeared in" details 2023-06-02 18:53:55 +02:00
pax pax(1): Grammar fix in file_subs.c 2024-02-13 15:09:32 +08:00
pkill bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
ps bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
pwait pwait.1: add missing prompt and command in examples 2023-11-27 10:59:52 -06:00
pwd Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
realpath bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
rm Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
rmail bin: Remove ancient SCCS tags. 2023-11-26 22:23:28 -07:00
rmdir Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
setfacl bin/setfacl: remove unreachable break after usage() 2024-01-03 12:05:50 -07:00
sh sh(1): Grammar fix in jobs.c 2024-02-13 14:13:08 +08:00
sleep sleep: Overhaul. 2024-03-25 16:59:02 +01:00
stty bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
sync Remove copyright strings ifdef'd out 2023-11-26 22:23:58 -07:00
test bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
tests Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
timeout bin/timeout: remove unreachable break after usage() 2024-01-03 12:05:50 -07:00
uuidgen bin: Automated cleanup of cdefs and other formatting 2023-11-26 22:23:59 -07:00
Makefile bin: Remove ancient SCCS tags. 2023-11-26 22:23:28 -07:00
Makefile.inc bin: Remove ancient SCCS tags. 2023-11-26 22:23:28 -07:00