From nobody Sun Nov 26 04:07:49 2023 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 4SdFYd60GLz52k6D; Sun, 26 Nov 2023 04:07:49 +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 4SdFYd5RV7z3Fd6; Sun, 26 Nov 2023 04:07:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700971669; 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=RkmLjYMs4XpAXjTa4qYkSPJdqezpoz89Z9/N/fr1nOw=; b=vYKK3lexFjNjDZTC3CIP+pERXyrUULMDnUc2O2lBl3YKCr7G25uLkzSppuHr6942KyVLVy 5qNJhYg9FxHdBT2cvBpKPKfcphUZ3NMUfPxOzGbjCSOw0xwiY95iOTQW+0us0IylS04W4/ EMVjUK1j5wFH+pDluuMPBuM9GvIUTF5Uf14iZi3WoyZEnzKLv0Ed+sP7RjkNIP1kJUi62z Fja4NcOAJ6Njdy2mihAliDx8qYE3XxAy9iQikkZeUqm8DTduJyma6jO33U5vev3bywRVjn Unmie6cVuc6uM1XOlATsEI6oUrjh3hpimcpP6jOn+pMAuS1DhnQVaua9PUiPWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1700971669; 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=RkmLjYMs4XpAXjTa4qYkSPJdqezpoz89Z9/N/fr1nOw=; b=Zl8sBCx+Y33aL93Unw/WeOnR1A0YTTbch66gtHZyD8lsqLOmnjTXUQZrwLaRKF79tDpNvI AERsoQ+NV8qyXVLzQuohYzvQt7c1Lc2ZhgEgqzie8xKYRQiJGtSKNZ7ZuvW4Ckk+Dh8izc JCfkgzCxWqvOgGY2eZNukttKNuzslYT9CcqDQO/S4rLcDwWLDKGsvUpWcOiZMDusHSnxFx vaMRHRbxcH/sBKIxSKSxzquOpLvxn9FcoL3ScvT0Gfb2pCUUnbkeXoUKElv+fj6fwOW3pZ 2tpZAeisdUcJ/vPhm9uswC1euRS4VFd8wCosBlEtJg8cbrA5weKsd6CrFlZcCg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1700971669; a=rsa-sha256; cv=none; b=Q6Ed2NbBSEFDufe83LPkxvV6Uzs9172gprt5yc6CixffekWRgDw/sLetUXECJJ7s3AOGML pLOOo1wVoSZarqkknCEXbEO2qgawok4LKKgwJHWs/wZxWiMPvYfXl0tUs00CUIJo8EeTFa 8jvKaNHPR5bNHOiCN6xfwPYKxMFJVcWlXkEzL3zraa1XK3BkK25TJEAGezY9TGZ4NWgLxV DkdWi8DqDbnufjDq2JejDwnbT+XsmtoSpX2Nnugh0mFgI1SbCRTZALWoh3enwRBpBtA9Tx 8D8W2Bk1WmL4kOeK7lPjdXD+AV1pe6iU8TGl0RU5hxy+JPzyth8a8xiLZFQtDg== 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 4SdFYd4YB6zh42; Sun, 26 Nov 2023 04:07:49 +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 3AQ47ngg028431; Sun, 26 Nov 2023 04:07:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3AQ47nmH028428; Sun, 26 Nov 2023 04:07:49 GMT (envelope-from git) Date: Sun, 26 Nov 2023 04:07:49 GMT Message-Id: <202311260407.3AQ47nmH028428@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: d416cca27a23 - stable/14 - install: handle -m +X more accurately 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: d416cca27a23ac247fee77ebb38798fe404747c2 Auto-Submitted: auto-generated The branch stable/14 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=d416cca27a23ac247fee77ebb38798fe404747c2 commit d416cca27a23ac247fee77ebb38798fe404747c2 Author: Kyle Evans AuthorDate: 2023-10-19 02:43:06 +0000 Commit: Kyle Evans CommitDate: 2023-11-26 04:07:11 +0000 install: handle -m +X more accurately As described by chmod(1), +X in the mode may be used to optionally set the +x bit if the file is a directory if any of the execute/search bits are set in the original mode. The latter is not applicable because we assume -m is a fresh mask, but a functional +X could be useful in the former case if we're passing along a common INSTALL_MODE that's designed to install either 0644 or 0755 depending simply on whether it's a directory or not. Reviewed by: des Sponsored by: Klara, Inc. (cherry picked from commit 767c97c501ae72eb3d74bc23ddf5a1d570d8f841) --- usr.bin/xinstall/tests/install_test.sh | 16 ++++++++++++++++ usr.bin/xinstall/xinstall.c | 12 ++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/usr.bin/xinstall/tests/install_test.sh b/usr.bin/xinstall/tests/install_test.sh index b42bdfd0dc60..cbe95f0dfbf3 100755 --- a/usr.bin/xinstall/tests/install_test.sh +++ b/usr.bin/xinstall/tests/install_test.sh @@ -481,6 +481,21 @@ set_owner_group_mode_unpriv_body() { atf_check_equal "$u:$g:10$cM" "$(stat -f"%u:%g:%p" testc)" } +atf_test_case set_optional_exec +set_optional_exec_head() { + atf_set "require.user" "unprivileged" +} +set_optional_exec_body() +{ + echo "abc" > testfile.src + + atf_check install -d -m ug+rX testdir + atf_check test -x testdir + + atf_check install -m ug+rX testfile.src testfile + atf_check test ! -x testfile +} + atf_init_test_cases() { atf_add_test_case copy_to_nonexistent atf_add_test_case copy_to_nonexistent_safe @@ -523,4 +538,5 @@ atf_init_test_cases() { atf_add_test_case mkdir_simple atf_add_test_case set_owner_group_mode atf_add_test_case set_owner_group_mode_unpriv + atf_add_test_case set_optional_exec } diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c index d19bacbe8c1b..1ab9cac76f2f 100644 --- a/usr.bin/xinstall/xinstall.c +++ b/usr.bin/xinstall/xinstall.c @@ -189,6 +189,7 @@ main(int argc, char *argv[]) fset = 0; iflags = 0; + set = NULL; group = owner = NULL; while ((ch = getopt(argc, argv, "B:bCcD:df:g:h:l:M:m:N:o:pSsT:Uv")) != -1) @@ -255,11 +256,10 @@ main(int argc, char *argv[]) break; case 'm': haveopt_m = 1; + free(set); if (!(set = setmode(optarg))) errx(EX_USAGE, "invalid file mode: %s", optarg); - mode = getmode(set, 0); - free(set); break; case 'N': if (!setup_getid(optarg)) @@ -301,6 +301,14 @@ main(int argc, char *argv[]) usage(); } + /* + * Default permissions based on whether we're a directory or not, since + * an +X may mean that we need to set the execute bit. + */ + if (set != NULL) + mode = getmode(set, dodir ? S_IFDIR : 0) & ~S_IFDIR; + free(set); + if (getenv("DONTSTRIP") != NULL) { warnx("DONTSTRIP set - will not strip installed binaries"); dostrip = 0;