From: Hiltjo Posthuma Subject: Re: Question about cp -P (without -R) and POSIX compliance To: tech@openbsd.org Date: Tue, 17 Sep 2024 12:28:45 +0200 On Thu, Sep 05, 2024 at 09:44:45PM +0200, Hiltjo Posthuma wrote: > Hi, > > I have a question about cp on OpenBSD and the -P flag. > > It seems cp -P (without the -R option) to copy a symlink behaves differently > for single files on OpenBSD than POSIX specifies and compared to NetBSD, > FreeBSD, Linux (GNU, busybox, toybox, etc). > > Test-case to reproduce it: > > touch file > ln -s file link > cp -P link link2 > ls -l link link2 > > NetBSD and FreeBSD changed the check a while ago (Feb 23, 2022), for example: > > https://github.com/freebsd/freebsd-src/commit/97e13037915c22162f199461f56951793d669f57 > > Snippet: > > } else if (!Pflag) { > fts_options &= ~FTS_PHYSICAL; > fts_options |= FTS_LOGICAL | FTS_COMFOLLOW; > > The OpenBSD man page specifies: > > "if the -R option is also specified, no symbolic links are followed". > > and: > > "Symbolic links are always followed unless the -R flag is set, in which case > symbolic links are not followed, by default. The -H or -L flags (in conjunction > with the -R flag) cause symbolic links to be followed as described above. The > -H, -L, and -P options are ignored unless the -R option is specified. In > addition, these options override each other and the command's actions are > determined by the last one specified." > > > But POSIX specifies: > > "If the -R option was not specified, cp shall take actions based on the type > and contents of the file referenced by the symbolic link, and not by the > symbolic link itself, unless the -P option was specified." > > Reference: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cp.html > > Should this be changed? > > Thank you, > Hi, Any thoughts about the above? Feedback would be appreciated. If the proposed change looks good I can write a full patch and documentation update. Thank you, -- Kind regards, Hiltjo