From nobody Wed Jan 17 18:28:34 2024 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TFZBq2qglz56P4Y; Wed, 17 Jan 2024 18:28:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TFZBq17HBz4cLj; Wed, 17 Jan 2024 18:28:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705516115; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/RL4tOzwtVm5aEkueNqsrcg2FXEf+BT9ALJtH5/6yWU=; b=lefgm23YdYft0WV63FAbyuc70mkmmAjy2j6bAL6xnyFL1mKp4/N9B+3QLExO/PaH5Kgbf3 rwjZCn9064v/pH/rwx/h15RsVL4jZGwaCZln5671/hwFxOM/EmMFh2YThy98vdA5ttpluL 3Ql1IpJEQZYndq6VuohYHF8FL9OjT3OadlA8u73j57d2xz281O26v3Vqpdn557s8JPcPo9 XL5QO0vwkLQwY6UeyXS2Scghzh59jTY2ZZVNdrt7a1dmPuwZNvEcSHPWODCypZW5y1JV4a 87KaQGRaZscgguKfGF7uG7q46WP3MLovut6NkF+oV0EXk0W2XigsvP+FaZc0ZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705516115; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=/RL4tOzwtVm5aEkueNqsrcg2FXEf+BT9ALJtH5/6yWU=; b=CS786y8Dd7DFDSPHS9MU0qqqpvJxNb4qmf909uf2tA06iLwuCCsQHO6pKCqGkqaefzPEzo FMjyC7ATxFsZHzYjou2/ZK/kJzuJ8ek0pQSfuyAJFrH0scB39hSa0Nu6/eY0itT7KLU6ec Q4+64JErOfWVftkz73xDQXMOlair2OBlG1Asgn+l5hbGvEVFsQq6Yo3IBfWu9E+pcKTAJ9 Eqm53nZcVER/VEZdpCS5mul8VehC8XiF0pp3i7jOXfs8MDXCHXXxSp/o0V/Tkdk9fRA5JF qTUfbk/zV6UtwqNnCHctaERoBxTI+54zNPmHApFVHPmNSUU58EaFtGVtVhGLkg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705516115; a=rsa-sha256; cv=none; b=d/phuFUk8s727zPs17wptXBQwdd5phVGKSHNgdpTB5ajOckQiwPcpRejvfp9K3zPUxzmys i/8WZisnD6vDWIK6kRNE2NV59z0zrw5KI22Top8j86OaB2GGW2wpejDGD+uvxCf/+4+bzP Wan23H3+8eAMg3rpP56rBDllxYgRQ7JKwRlRPml2DcX7761IyO0WQ+h2GR05g62qDOdbFJ NmDNtNokCG4jfRh5UYMw8EWqtAXNZI2+AvzTi4zi/59nkRmGwQY1sJG7zuGkGrOW+SnGu+ LUjrspdyB3mrhDmz52+jv4cWaLYFIvDV0KvKJXEOIMeGxz6O/BS4bwOciu491Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4TFZBq092TzZcb; Wed, 17 Jan 2024 18:28:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 40HISYIb063429; Wed, 17 Jan 2024 18:28:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 40HISYpq063427; Wed, 17 Jan 2024 18:28:34 GMT (envelope-from git) Date: Wed, 17 Jan 2024 18:28:34 GMT Message-Id: <202401171828.40HISYpq063427@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= Subject: git: a64518b35f6e - stable/13 - cp: Add -N flag, inspired by NetBSD's similar flag List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: a64518b35f6e0c1aaf3c4f8f1efadf2273b9d981 Auto-Submitted: auto-generated The branch stable/13 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=a64518b35f6e0c1aaf3c4f8f1efadf2273b9d981 commit a64518b35f6e0c1aaf3c4f8f1efadf2273b9d981 Author: Warner Losh AuthorDate: 2023-12-07 19:32:27 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2024-01-17 16:15:57 +0000 cp: Add -N flag, inspired by NetBSD's similar flag Add -N to supress copying of file flags when -p is specified (explicitly or implicitly). Often times we don't care about the flags or wish to be able to copy to NFS, and this comes in handy for that. FreeBSD's and NetBSD's cp are somewhat different, so I had to reimplement all but one of the patch hunks... Obtained from: NetBSD (cp.1 1.25, cp.c 1.37, utils.c 1.28 by elad) Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D42673 (cherry picked from commit 5a52e3d00dd5e0209f6fcb1e41b5985191e6f4e7) cp: Don't warn for chflags() failing with EOPNOTSUPP if flags == 0 From NetBSD's utils.c 1.5 importing importing BSDI change, with light formatting changes: Author: cgd Date: Wed Feb 26 14:40:51 1997 +0000 Patch from BSDI (via Keith Bostic): >NFS doesn't support chflags; ignore errors unless there's reason >to believe we're losing bits. (Note, this still won't be right >if the server supports flags and we were trying to *remove* flags >on a file that we copied, i.e., that we didn't create.) CVS Info: utils.c 1.6 Obtained from: NetBSD Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D42674 (cherry picked from commit 3e7e3b5bdf902a375decc11b95179fd2fbc0da2a) --- bin/cp/cp.1 | 14 +++++++++----- bin/cp/cp.c | 7 +++++-- bin/cp/extern.h | 2 +- bin/cp/utils.c | 15 ++++++++++++--- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/bin/cp/cp.1 b/bin/cp/cp.1 index b67718bd39b1..3862babafe7f 100644 --- a/bin/cp/cp.1 +++ b/bin/cp/cp.1 @@ -31,7 +31,7 @@ .\" .\" @(#)cp.1 8.3 (Berkeley) 4/18/94 .\" -.Dd February 23, 2022 +.Dd December 7, 2023 .Dt CP 1 .Os .Sh NAME @@ -44,7 +44,7 @@ .Op Fl H | Fl L | Fl P .Oc .Op Fl f | i | n -.Op Fl alpsvx +.Op Fl alNpsvx .Ar source_file target_file .Nm .Oo @@ -52,15 +52,15 @@ .Op Fl H | Fl L | Fl P .Oc .Op Fl f | i | n -.Op Fl alpsvx +.Op Fl alNpsvx .Ar source_file ... target_directory .Nm .Op Fl f | i | n -.Op Fl alPpsvx +.Op Fl alNPpsvx .Ar source_file target_file .Nm .Op Fl f | i | n -.Op Fl alPpsvx +.Op Fl alNPpsvx .Ar source_file ... target_directory .Sh DESCRIPTION In the first synopsis form, the @@ -90,6 +90,10 @@ option is specified, symbolic links on the command line are followed. If the .Fl R option is specified, all symbolic links are followed. +.It Fl N +When used with +.Fl p , +suppress copying file flags. .It Fl P No symbolic links are followed. This is the default if the diff --git a/bin/cp/cp.c b/bin/cp/cp.c index 24156e4b4a0b..8217a1e5d3c9 100644 --- a/bin/cp/cp.c +++ b/bin/cp/cp.c @@ -84,7 +84,7 @@ static char emptystring[] = ""; PATH_T to = { to.p_path, emptystring, "" }; -int fflag, iflag, lflag, nflag, pflag, sflag, vflag; +int Nflag, fflag, iflag, lflag, nflag, pflag, sflag, vflag; static int Hflag, Lflag, Rflag, rflag; volatile sig_atomic_t info; @@ -103,7 +103,7 @@ main(int argc, char *argv[]) fts_options = FTS_NOCHDIR | FTS_PHYSICAL; Pflag = 0; - while ((ch = getopt(argc, argv, "HLPRafilnprsvx")) != -1) + while ((ch = getopt(argc, argv, "HLNPRafilnprsvx")) != -1) switch (ch) { case 'H': Hflag = 1; @@ -113,6 +113,9 @@ main(int argc, char *argv[]) Lflag = 1; Hflag = Pflag = 0; break; + case 'N': + Nflag = 1; + break; case 'P': Pflag = 1; Hflag = Lflag = 0; diff --git a/bin/cp/extern.h b/bin/cp/extern.h index 314cfc086ecb..f242d11cd418 100644 --- a/bin/cp/extern.h +++ b/bin/cp/extern.h @@ -38,7 +38,7 @@ typedef struct { } PATH_T; extern PATH_T to; -extern int fflag, iflag, lflag, nflag, pflag, sflag, vflag; +extern int Nflag, fflag, iflag, lflag, nflag, pflag, sflag, vflag; extern volatile sig_atomic_t info; __BEGIN_DECLS diff --git a/bin/cp/utils.c b/bin/cp/utils.c index 02d78350067c..f43902eab3e6 100644 --- a/bin/cp/utils.c +++ b/bin/cp/utils.c @@ -355,13 +355,22 @@ setfile(struct stat *fs, int fd) rval = 1; } - if (!gotstat || fs->st_flags != ts.st_flags) + if (!Nflag && (!gotstat || fs->st_flags != ts.st_flags)) if (fdval ? fchflags(fd, fs->st_flags) : (islink ? lchflags(to.p_path, fs->st_flags) : chflags(to.p_path, fs->st_flags))) { - warn("chflags: %s", to.p_path); - rval = 1; + /* + * NFS doesn't support chflags; ignore errors unless + * there's reason to believe we're losing bits. (Note, + * this still won't be right if the server supports + * flags and we were trying to *remove* flags on a file + * that we copied, i.e., that we didn't create.) + */ + if (errno != EOPNOTSUPP || fs->st_flags != 0) { + warn("chflags: %s", to.p_path); + rval = 1; + } } return (rval);