From nobody Wed Dec 13 21:46:08 2023 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 4Sr8Dw5xrGz54MwG; Wed, 13 Dec 2023 21:46:08 +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 4Sr8Dw5FPcz3Npf; Wed, 13 Dec 2023 21:46:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1702503968; 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=3BZ+0sR5NFTc9Hv7ixfRHpqj5vZQikmSBvzG6mnTiOE=; b=kax7k7+toLggYUzMvVslTgHfORFYB7NgbH13TUWICf/vK1gZ0eF9nllWIoRFFqHC9JWWTj uZExBnGjEdzGurgkzJjWjPRnr9Ebdei0BUX/3b7acGa3aUu6vnFKD3CwewlVtBYOvUylXP dgbVyY3ubkhTm44WYZ2LC3LkV7uynqBWD+8cW3meNWRcYcjsVo9U//7/FOax0Sb+Tnt5lL sFJzw8D0F92aPHhZscGpom2bB+LOuTHdpnKm+dtkwDQqcXf2ualtUIWvaj+71U5iMCuKM5 /Gl4Nudh4JiCp3RFzYuOBJEC8Bo4bkfUZreFZULvJ3ZZjR1jRCgCFl97Zn5fug== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1702503968; a=rsa-sha256; cv=none; b=i1YfF1wOEVV2XiOqsP6Hh8JNX79ihoxSMN3BlAwdvicPF8mUnsXPuhso7pw28DI8LF11Jf +cxeoAEkNVzuk5FuxwAqOaO0Fxr2Y4GEdxjOnDpA+gpaNnLT4PbeP9+etHqphEsOUrQJFI 6f6ndbcq7W2+fk0d1xPZq502c86to5Ovv807ijKwy5UTtSFGH5sA4502K2jjf3miEq8xHM 9bH6lbOa3VfPqkCCvF4VEPShWkDmrJVcgIXbuBOCVl31uIF0fRJZmiBFX4ujb9NFZisHXy +C+qtn0AGQA0s6QQMP66+BTbyvhaWK+OieunB1TvG67cSUcdueUzrx4/O7N5Ew== 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=1702503968; 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=3BZ+0sR5NFTc9Hv7ixfRHpqj5vZQikmSBvzG6mnTiOE=; b=XUe3Z76/Eu0cdlnewDJ96TLmsFDmrTTlSZdi0hRHF73JcApceXcMM1uc5qPTBVUwlW55SX i7SDPpjvq8iMoDjLSYFXpTRWwnc1k/wFgkqbB1GUO0E6+P0MdVwkKvw/mNYdPuChJx4hNy chyY0Y9Pw8Dhc2ikEBIqfIE4zfqB0P+eV3tg05/pA5b1t+I82CZrRyvaAaksGohN8OcpLu yi7eqGoyj598x6mSuh2n7vAHkW3M/gbb1OmD5qCdX7nYPgbetep1cIuCynhRJDOgnvRc2p 8Pg5RABN+T3R1NcOSsJ6oW6copGDJ7QSEj+5YgV49PsHkQXo1Pi0Rn2ILwNLoA== 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 4Sr8Dw4B8Wz1Ff5; Wed, 13 Dec 2023 21:46:08 +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 3BDLk873056468; Wed, 13 Dec 2023 21:46:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3BDLk8qs056465; Wed, 13 Dec 2023 21:46:08 GMT (envelope-from git) Date: Wed, 13 Dec 2023 21:46:08 GMT Message-Id: <202312132146.3BDLk8qs056465@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Jessica Clarke Subject: git: 019e6ffcc479 - stable/14 - bsdinstall: Encode dists to valid variable names in checksum script 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: jrtc27 X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 019e6ffcc47913281bc6fa7e1b7e13f9ec1a2b99 Auto-Submitted: auto-generated The branch stable/14 has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=019e6ffcc47913281bc6fa7e1b7e13f9ec1a2b99 commit 019e6ffcc47913281bc6fa7e1b7e13f9ec1a2b99 Author: Jessica Clarke AuthorDate: 2023-12-06 21:37:32 +0000 Commit: Jessica Clarke CommitDate: 2023-12-13 21:45:45 +0000 bsdinstall: Encode dists to valid variable names in checksum script Currently we just strip the .txz of the dist name (and add a status_ prefix) to get the shell variable name for its status, but this doesn't give a valid result for dists like base-dbg, kernel-dbg and lib32-dbg, or even kernel.KERNCONF (or, combining the two, kernel.KERNCONF-dbg). As a result, four things go wrong for such dists: 1. If there is a dot and/or a dash in the name, writing to the variable fails and spits an error out on stderr to the log 3. If there is a dot in the name before any dash, the syntax is always invalid, reading the variable fails, spits an error out on stderr to the log, the result is the empty string and that is interpreted as being 0% 2. If there is a dash in the name before any dot, and there is a dist whose name is the substring up to that first dash, and it has already had its status written to, reading the variable instead reads that dist's variable and so the status of that dist is displayed instead 3. If there is a dash in the name before any dot, and either there is not a dist whose name is the substring up to that first dash or there is such a dist but it has not already had its status written to, reading the varaible instead results in the substring after the first dash, including any additional string expansion syntax that follows (i.e. ${status_kernel-dbg:--11}, the expression used to read the variable, is interpreted as reading status_kernel with a default value of "dbg:--11") For example, in a default install with base, kernel, kernel-dbg and lib32, the following sequence of displays happens: 1. base is In Progress, kernel is Pending, kernel-dbg is 0% (what shows for the garbage input "dbg:--11") and lib32 is Pending 2. base is Passed, kernel is In Progress, kernel-dbg is In Progress (since kernel has now had its status written to) and lib32 is Pending 3. base is Passed, kernel is Passed, kernel-dbg is Passed (again, since that is the status of kernel, despite that kernel-dbg is being verified at this point) and lib32 is Pending 4. base is Passed, kernel is Passed, kernel-dbg is Passed and lib32 is In Progress Fix this with a crude encoding scheme. More special characters can easily be added if needed in future. Note that, prior to bsddialog being used (and thus for branches this is MFC'ed to where dialog is still used), the same problem existed but displayed slightly differently due to a combination of different default values and different behaviour for unintended inputs. Fixes: b70047d41362 ("Add generation of an installation manifest containing SHA256 checksums as ...") MFC after: 1 week (cherry picked from commit 47d669f10ea3eb92a3783376549728b42c9e22b9) --- usr.sbin/bsdinstall/scripts/checksum | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/usr.sbin/bsdinstall/scripts/checksum b/usr.sbin/bsdinstall/scripts/checksum index 376ba4261496..ee93cb342f25 100755 --- a/usr.sbin/bsdinstall/scripts/checksum +++ b/usr.sbin/bsdinstall/scripts/checksum @@ -30,14 +30,20 @@ test -f $BSDINSTALL_DISTDIR/MANIFEST || exit 0 BSDCFG_SHARE="/usr/share/bsdconfig" . $BSDCFG_SHARE/common.subr || exit 1 +dist_to_statusvar() +{ + printf 'status_' + echo "$1" | sed 's/_/__/g;s/\./_dot_/g;s/-/_dash_/g' +} + percentage=0 for dist in $DISTRIBUTIONS; do - distname=$(basename $dist .txz) - eval "status_$distname=-8" + statusvar=$(dist_to_statusvar $dist) + eval "$statusvar=-8" items="" for i in $DISTRIBUTIONS; do - items="$items $i `eval echo \\\${status_$(basename $i .txz):--11}`" + items="$items $i `eval echo \\\${$(dist_to_statusvar $i):--11}`" done bsddialog --backtitle "$OSNAME Installer" --title "Checksum Verification" \ --mixedgauge "\nVerifying checksums of selected distributions.\n" \ @@ -57,13 +63,13 @@ for dist in $DISTRIBUTIONS; do CK_VALID=$? if [ $CK_VALID -le 1 ]; then if [ $CK_VALID -eq 0 ]; then - eval "status_$distname=-3" + eval "$statusvar=-3" else - eval "status_$distname=-7" + eval "$statusvar=-7" fi percentage=$(echo $percentage + 100/`echo $DISTRIBUTIONS | wc -w` | bc) else - eval "status_$distname=-2" + eval "$statusvar=-2" case $(/bin/freebsd-version -u) in *-ALPHA*|*-CURRENT|*-STABLE|*-PRERELEASE) bsddialog --backtitle "$OSNAME Installer" --title "Error" \