From nobody Tue Jun 9 16:04:29 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 4gZYdH0c8Dz6gCff for ; Tue, 09 Jun 2026 16:04: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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gZYdG38h3z4FMj for ; Tue, 09 Jun 2026 16:04:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781021074; 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=3TJiGReFPV3UXveF+7G88d3wsbfYcSvgsf9Y8AXvo8M=; b=etMwLuaCFvDlqe2t/ImV+2px6IqMsBukKVdcgeO9+YSXBVFTs296v/7jjb1SIdNJ25H7hF 1GaSNP/0IajXGvrfrWs/s8AbSaseTo4khKg9Hi9x0A5zJu3NnKIRAgF7oyq/twVymxLEad ZoSU7A7jgZYYrOYQW4rXjJ0z+B49Tz8zHr9F3p1KQ2xda/n6/GibcPCYBaLPA/69LZveo8 iXr1x94UyjaS5BTIFMFwBEBupaM6BasHXyO64EOTe+iBPt2B+p2KiMouw0M3M7ki/cb+AA Nzi1PI3KPC0Dh9xXyEdU15NFKuN7i6ScfZLHXib9Bk4sCNaEOYKnHDKVqd0Y7w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1781021074; a=rsa-sha256; cv=none; b=d4tn0P85rAhSdfqrmJBseVEr00weefAwHZtjwg4qCBToFndawi6mljn4nZgr5w5Gwy+EB7 zcaY1a/cE1LIWZMYS/2yjTG8fz9kTfpsc62dwvVVr3pPd4X8zHy2fUSFzS0mXVMS0MPilj ji6rUE17ABFClYAjXrb3zwUtljwQn4lbjrqiNtRTDGXlWTTPcChw2aqW7j/Kequce/9/JC w/8t27Ms3sgZrv3KlWys+0HRnTWeNKKkFp15KqbdlBaQ6jKmARR6Y4O30jgV8CNJuOyIE1 c9LWauaFrGxGPdYtl1XFPppAKNH/iE0qkQdTM/w4ZT3uOb4I5mmlsZZJ2X6O8A== 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=1781021074; 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=3TJiGReFPV3UXveF+7G88d3wsbfYcSvgsf9Y8AXvo8M=; b=LRviwBrgtwXKq4/MCXIM0zWVZ+PnRxWJ1neG9E/0hTWUEEZkab2iJKn8mW0O7hKvbJhWON uyKbaevKb4FWTYbX8zNVcb+ZS6XyNQHESeJIn72uA7IyJRs/dZcoCUpnF251TfDWLfRotl 8sQzAdrlaMxu9j9IXqvhkOuJW341pOloXCG+Au9uUxEjXdKBrB+eo3OJZuttRWJGnirf6v zOXjINResr1YE8kNSJlxKC2NGLyjOgWU1VFTnZOIG7SuUh7cXtYxhZdLfJ2kXRs78dJLed rzsmh+E4ziBxYfx13hET29/uFVHu3xt3uIiOfYBKS2diqLWoBom113rWyl+9hw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gZYdG27HVzhv3 for ; Tue, 09 Jun 2026 16:04:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21843 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 09 Jun 2026 16:04:29 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: da3890fdccfa - main - nuageinit: use single-quote shell escaping for hostname in rc.conf.d 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: da3890fdccfa7d540ea746182248299b81f95345 Auto-Submitted: auto-generated Date: Tue, 09 Jun 2026 16:04:29 +0000 Message-Id: <6a28398d.21843.2c5b50cd@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=da3890fdccfa7d540ea746182248299b81f95345 commit da3890fdccfa7d540ea746182248299b81f95345 Author: Baptiste Daroussin AuthorDate: 2026-06-09 14:04:18 +0000 Commit: Baptiste Daroussin CommitDate: 2026-06-09 16:04:24 +0000 nuageinit: use single-quote shell escaping for hostname in rc.conf.d The hostname value was written inside double quotes in /etc/rc.conf.d/hostname. POSIX shell performs command substitution inside double quotes, so a hostname containing $() or backticks would be executed when the file is sourced (e.g., by rc(8)). Switch to using the existing shell_escape() helper, which wraps values in single quotes. In POSIX shell, single-quoted strings are completely literal — no expansion or substitution of any kind is performed. While the hostname is already validated to contain only [a-zA-Z0-9.-], this change provides defense-in-depth so the output format is safe regardless of future validation changes. Reported by: Yazdan Soltani --- libexec/nuageinit/nuage.lua | 2 +- libexec/nuageinit/tests/nuage.sh | 2 +- libexec/nuageinit/tests/nuageinit.sh | 12 ++++++------ libexec/nuageinit/tests/sethostname.lua | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/libexec/nuageinit/nuage.lua b/libexec/nuageinit/nuage.lua index cbf92627918c..cbd842460e55 100644 --- a/libexec/nuageinit/nuage.lua +++ b/libexec/nuageinit/nuage.lua @@ -187,7 +187,7 @@ local function sethostname(hostname) warnmsg("Impossible to open " .. hostnamepath .. ":" .. err) return end - f:write('hostname="' .. hostname:gsub('"', '\\"') .. '"\n') + f:write("hostname=" .. shell_escape(hostname) .. "\n") f:close() end diff --git a/libexec/nuageinit/tests/nuage.sh b/libexec/nuageinit/tests/nuage.sh index 97c5224c7813..1e08c990eacd 100644 --- a/libexec/nuageinit/tests/nuage.sh +++ b/libexec/nuageinit/tests/nuage.sh @@ -33,7 +33,7 @@ sethostname_body() if [ ! -f etc/rc.conf.d/hostname ]; then atf_fail "hostname not written" fi - atf_check -o inline:"hostname=\"myhostname\"\n" cat etc/rc.conf.d/hostname + atf_check -o inline:"hostname='myhostname'\n" cat etc/rc.conf.d/hostname } addsshkey_body() diff --git a/libexec/nuageinit/tests/nuageinit.sh b/libexec/nuageinit/tests/nuageinit.sh index 798ac235e122..3f3e2843c35d 100644 --- a/libexec/nuageinit/tests/nuageinit.sh +++ b/libexec/nuageinit/tests/nuageinit.sh @@ -80,13 +80,13 @@ nocloud_body() atf_check -s exit:1 -e match:"nuageinit: error parsing nocloud.*" /usr/libexec/nuageinit "${PWD}"/media/nuageinit/ nocloud printf "instance-id: iid-local01\nlocal-hostname: cloudimg\n" > "${PWD}"/media/nuageinit/meta-data atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud - atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname + atf_check -o inline:"hostname='cloudimg'\n" cat etc/rc.conf.d/hostname cat > media/nuageinit/meta-data << EOF instance-id: iid-local01 hostname: myhost EOF atf_check -s exit:0 /usr/libexec/nuageinit "${PWD}"/media/nuageinit nocloud - atf_check -o inline:"hostname=\"myhost\"\n" cat etc/rc.conf.d/hostname + atf_check -o inline:"hostname='myhost'\n" cat etc/rc.conf.d/hostname } nocloud_userdata_script_body() @@ -250,7 +250,7 @@ config2_body() } EOF atf_check /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 - atf_check -o inline:"hostname=\"cloudimg\"\n" cat etc/rc.conf.d/hostname + atf_check -o inline:"hostname='cloudimg'\n" cat etc/rc.conf.d/hostname } config2_pubkeys_head() @@ -1307,7 +1307,7 @@ echo "multipart script executed" --==BOUNDARY==-- EOF atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 - atf_check -o inline:"hostname=\"multipart-host\"\n" cat etc/rc.conf.d/hostname + atf_check -o inline:"hostname='multipart-host'\n" cat etc/rc.conf.d/hostname atf_check -o inline:"#!/bin/sh\necho \"multipart script executed\"\n" cat var/cache/nuageinit/multipart_script test -x var/cache/nuageinit/multipart_script || atf_fail "multipart_script not executable" true @@ -1376,13 +1376,13 @@ fqdn: host.domain.tld hostname: host EOF atf_check -o empty /usr/libexec/nuageinit "${PWD}"/media/nuageinit config-2 - atf_check -o inline:"hostname=\"host.domain.tld\"\n" cat ${PWD}/etc/rc.conf.d/hostname + atf_check -o inline:"hostname='host.domain.tld'\n" cat ${PWD}/etc/rc.conf.d/hostname cat > media/nuageinit/user_data <