From nobody Mon Feb 2 22:40:33 2026 X-Original-To: dev-commits-src-all@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 4f4hQp1839z6Qdqy for ; Mon, 02 Feb 2026 22:40:34 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f4hQn5kWJz4Kt9 for ; Mon, 02 Feb 2026 22:40:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770072033; 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=5JvRnnPTggSRFFS2oOZNYbv7HoWiiN43kafm2KNmTZA=; b=FcBjIZDMxwbOaPHGta9ctC5M4MLGO3WNzbAJon4P5wrPo0zft/INzAKjwzByC8YBm4jF/r txd8g2W6OrhIlDMdbJJsxm2FjOgC9olBXghCTGPJe/VqKqdraD+QICaYySC/woEb8KVtXs lIXwDRBr8VQXGOatGZmwDnkDxo72QPwO0HoaUOmnQPZSZW6/oDh168vu7Gai6sY/Yx4y7d 6adjFW92pubZM1vJlSgLqIUYRAhjo4cLDlJaT026Oz614JLVNBNW0gyQ386LiAjW7MtZDC a/uQEuguyuSdLVzE+eslwS26QJjYUoW4gwmLnBHVdOCbDUKbK23u/2+jYoEwRw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770072033; a=rsa-sha256; cv=none; b=naCJo/6XZQTZzRuyjzBr3ssmgLK2bnKJtz1K6H64EibfCEB5KWiHR3yFeNp+ENvHnmQqIc b653Zgarz2JU6v6frm+yQcpMB/D8cXApCbyb11qCzRfn87c+crKNkdo90dtvV7uiOEATjo k6eN1TAjt94kRu+lzE/yKVqxDuGTCksV+0exax7p1G5TcOgVzUDPbGGFz+GD7Tee2NaOz1 NgiYmDrGOYsUDy2qtt0opLh4IYaiOtg4HlrhmyVe2bDJPkDJXMg5/AjTh+ofXrD/fG0GLy W87KXX23ivmn4mHEeqHMEiRMENJFfnnu7yyTl+opk25MVo9H8MJcuv2Watt9Fw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770072033; 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=5JvRnnPTggSRFFS2oOZNYbv7HoWiiN43kafm2KNmTZA=; b=DSVuGEz92BSMI9fh0nc/O6bv9Bc45jvRsGQc0Ps/V0T7IsFk/BP/IB8NNqm1RrSh4R2QmP LVj9CiBv/1XBa8q7rNlQMBg4leVU6DpZw3uiSUhzm/9RrSgCNJ7C1ImP4OuowcxmgXZzTS Gg/JtQWJMsyqySAbHnRKyd+npVvimvDVRCJX3w2mCJ24rxs+vYNu59kG3qGRJHQvJtoJcn eJaaHTlja4vaWZUMrD9CQWnzkDsAyMEaFAx7aPVTPvqj7uH2tXvVH/uumzRjx1VwFINsdN 45FHI3IkyyViohxbjI0sU4lGnL19IWKVQ+haXYd5l4VGSberrzkA/Kw0QJ+JsQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f4hQn53gYzm4y for ; Mon, 02 Feb 2026 22:40:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19599 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 02 Feb 2026 22:40:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Rick Macklem Subject: git: 4bfb7cfb70e6 - main - runat: Add -h to manipulate a symlink's named attribute dir List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4bfb7cfb70e62bc316de9e73cfd63a5c85541154 Auto-Submitted: auto-generated Date: Mon, 02 Feb 2026 22:40:33 +0000 Message-Id: <698127e1.19599.44d1351c@gitrepo.freebsd.org> The branch main has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=4bfb7cfb70e62bc316de9e73cfd63a5c85541154 commit 4bfb7cfb70e62bc316de9e73cfd63a5c85541154 Author: Rick Macklem AuthorDate: 2026-02-02 22:38:13 +0000 Commit: Rick Macklem CommitDate: 2026-02-02 22:38:13 +0000 runat: Add -h to manipulate a symlink's named attribute dir Lionel Cons requested that a new option be added to runat(1) so that it could be used to manipulate named attributes associated with a symbolic link and not the file the symbolic link refers to). This patch adds the option -h/--nofollow to do this. Requested by: Lionel Cons Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D55023 --- usr.bin/runat/runat.c | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/usr.bin/runat/runat.c b/usr.bin/runat/runat.c index 99437f3472f4..eb30ef87f2f9 100644 --- a/usr.bin/runat/runat.c +++ b/usr.bin/runat/runat.c @@ -8,17 +8,25 @@ #include #include #include +#include #include #include +#include #include #include #include #include +static struct option longopts[] = { + { "nofollow", no_argument, NULL, 'h' }, + { "-", no_argument, NULL, '-' }, + { NULL, 0, NULL, 0} +}; + static void usage(void) { - (void)fprintf(stderr, "usage: runat " + (void)fprintf(stderr, "usage: runat [-h/--nofollow] [--] " "\n"); exit(1); } @@ -26,15 +34,28 @@ usage(void) int main(int argc, char *argv[]) { - int i, file_fd, nameddir_fd, outsiz; + int ch, file_fd, flags, i, longindex, nameddir_fd, outsiz; char *buf; long named_enabled; size_t pos, siz; + bool done_args; - if (argc <= 2) - usage(); - argv++; - argc--; + flags = O_RDONLY | O_CLOEXEC | O_PATH; + done_args = false; + while (!done_args && (ch = getopt_long(argc, argv, "h-", longopts, + &longindex)) != -1) + switch (ch) { + case 'h': + flags |= O_NOFOLLOW; + break; + case '-': + done_args = true; + break; + default: + usage(); + } + argv += optind; + argc -= optind; if (argc < 2) usage(); @@ -61,7 +82,7 @@ main(int argc, char *argv[]) } buf[pos - 1] = '\0'; - file_fd = open(argv[0], O_RDONLY | O_CLOEXEC, 0); + file_fd = open(argv[0], flags, 0); if (file_fd < 0) err(1, "Cannot open %s", argv[0]); nameddir_fd = openat(file_fd, ".", O_RDONLY | O_CLOEXEC | O_NAMEDATTR,