FreeBSD/src 2bb8d7clibexec/nuageinit nuageinit

nuageinit: validate set-name to prevent shell injection in variable names

Shell variable names cannot be safely quoted with shell_escape() —
only alphanumeric characters are valid. Add validation that set-name
only matches [a-zA-Z0-9]+; invalid values are rejected with a
warning and the rename is skipped entirely.

(cherry picked from commit 13fb6dbc738f4ba30e78a8fb21efa1382c520d33)
DeltaFile
+6-2libexec/nuageinit/nuageinit
+6-21 files

FreeBSD/src 1561d31libexec/nuageinit nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: fix shell injection in power_state_change delay and add test

(cherry picked from commit 09d068e52722dee0ed65eb88c5ea5bff4bb2ba06)
DeltaFile
+1-1libexec/nuageinit/nuageinit
+1-1libexec/nuageinit/tests/nuageinit.sh
+2-22 files

FreeBSD/src 3bb20f3libexec/nuageinit nuage.lua, libexec/nuageinit/tests nuageinit.sh nuage.sh

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 <yazdan.soltani at gmail.com>

(cherry picked from commit da3890fdccfa7d540ea746182248299b81f95345)
DeltaFile
+6-6libexec/nuageinit/tests/nuageinit.sh
+1-1libexec/nuageinit/tests/nuage.sh
+1-1libexec/nuageinit/tests/sethostname.lua
+1-1libexec/nuageinit/nuage.lua
+9-94 files

FreeBSD/src 3654d0clibexec/nuageinit nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: fix shell command injection in multiple rc.conf.d writes

(cherry picked from commit 0211c8722ff2ac9367565e526e62837745bb2cce)
DeltaFile
+30-59libexec/nuageinit/nuageinit
+23-23libexec/nuageinit/tests/nuageinit.sh
+53-822 files

FreeBSD/src 7aefe34libexec/nuageinit nuageinit.7 nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: install certs in /usr/share/certs/trusted

Suggested by:   kevans

(cherry picked from commit e5ef12ccd01f8ec6c519bf2a56cac2808f78c51a)
DeltaFile
+2-2libexec/nuageinit/tests/nuageinit.sh
+1-1libexec/nuageinit/nuageinit.7
+1-1libexec/nuageinit/nuageinit
+4-43 files

FreeBSD/src 48bf144libexec/nuageinit nuageinit.7

nuageinit: update documentation for phone_home and final_message

(cherry picked from commit bad3c15dffea69ea84f95489d26a86ad0498d942)
DeltaFile
+32-1libexec/nuageinit/nuageinit.7
+32-11 files

FreeBSD/src 167ddf9libexec/nuageinit nuage.lua

nuageinit: expose decode_base64 to fix tests

(cherry picked from commit 68e60bb8b6c968fe615f81ccc8afd2a30ff78003)
DeltaFile
+1-0libexec/nuageinit/nuage.lua
+1-01 files

FreeBSD/src 25f255dlibexec/nuageinit nuage.lua

nuage.lua: add encode_base64 helper

(cherry picked from commit 71e8122b3f6efdaac23ac219312dfe270731b495)
DeltaFile
+30-0libexec/nuageinit/nuage.lua
+30-01 files

FreeBSD/src 35ea67elibexec/nuageinit nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement phone_home support

Posts instance data (hostname, instance_id, public keys) to a URL
using fetch(1). Supports:
- url: target URL
- post: list of data items to send, or 'all'
- tries: number of retry attempts (default 1)

(cherry picked from commit 58653bf4d0fb8ccd5de146d671ec101a1df0ede0)
DeltaFile
+89-2libexec/nuageinit/nuageinit
+33-0libexec/nuageinit/tests/nuageinit.sh
+122-22 files

FreeBSD/src eb677a5libexec/nuageinit nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement final_message support

(cherry picked from commit e01f202ecf9344bd6658869a869f36c5b3790384)
DeltaFile
+36-0libexec/nuageinit/tests/nuageinit.sh
+25-0libexec/nuageinit/nuageinit
+61-02 files

FreeBSD/src 8c4d893libexec/nuageinit nuageinit nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement keyboard support

(cherry picked from commit 58184a301a1f0ef0858689f8dcc608cb468d4644)
DeltaFile
+29-1libexec/nuageinit/tests/nuageinit.sh
+24-0libexec/nuageinit/nuageinit
+20-0libexec/nuageinit/nuageinit.7
+73-13 files

FreeBSD/src 202ae01libexec/nuageinit nuageinit nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement power_state_change and locale support

(cherry picked from commit 328a76d17f85ff6aa6228035c4c4b989eb7534f8)
DeltaFile
+61-0libexec/nuageinit/nuageinit
+56-0libexec/nuageinit/tests/nuageinit.sh
+49-0libexec/nuageinit/nuageinit.7
+166-03 files

FreeBSD/src bf02669libexec/nuageinit nuage.lua nuageinit, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement MIME multipart user-data support

Add support for MIME multipart/mixed user-data, allowing a single
user-data blob to contain multiple parts with different content types.

(cherry picked from commit be711ade6f66506fb2cae9fd33b142ce910f0346)
DeltaFile
+45-0libexec/nuageinit/nuage.lua
+38-0libexec/nuageinit/nuageinit
+35-0libexec/nuageinit/tests/nuageinit.sh
+14-0libexec/nuageinit/nuageinit.7
+132-04 files

FreeBSD/src 9835838libexec/nuageinit nuageinit nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement ntp support

Add support for the 'ntp' cloud-config key which configures NTP
by writing /etc/ntp.conf with server and pool entries.

(cherry picked from commit 6d27d52ccd35d1980e99bc2fc4dae602334d28af)
DeltaFile
+37-0libexec/nuageinit/nuageinit
+28-0libexec/nuageinit/tests/nuageinit.sh
+21-0libexec/nuageinit/nuageinit.7
+86-03 files

FreeBSD/src f0fa0c5libexec/nuageinit nuageinit nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement ca_certs support

Add support for the 'ca_certs' cloud-config key which manages
CA certificates by writing them to /etc/ssl/certs/ and running
certctl rehash.

(cherry picked from commit b56f029add4825b21b2957f19ccfbb219a3f96cb)
DeltaFile
+30-0libexec/nuageinit/tests/nuageinit.sh
+20-0libexec/nuageinit/nuageinit
+17-0libexec/nuageinit/nuageinit.7
+67-03 files

FreeBSD/src a4a46e6libexec/nuageinit nuageinit nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement ssh_authkey_fingerprints support

Add support for the 'ssh_authkey_fingerprints' cloud-config key
which logs SSH host key fingerprints to the console via ssh-keygen.

(cherry picked from commit d7984912385cc5a191547dc6c2d73acba25e2239)
DeltaFile
+24-0libexec/nuageinit/nuageinit
+21-0libexec/nuageinit/tests/nuageinit.sh
+5-0libexec/nuageinit/nuageinit.7
+50-03 files

FreeBSD/src ae577a7usr.sbin/pw pw_conf.c

pw: fix const qualification in unquote()

The unquote() function took a const char * parameter but modified the
string in-place (removing quote characters). Change the parameter to
char * and update callers that passed const char * to cast explicitly.

(cherry picked from commit 5f9c8f142d1702f5810618e02534054d28d22fa5)
DeltaFile
+6-6usr.sbin/pw/pw_conf.c
+6-61 files

FreeBSD/src e3d8f73libexec/nuageinit nuage.lua nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement mounts support

Add support for the 'mounts' cloud-config key which configures
mount points by appending entries to /etc/fstab and creating
the corresponding directories.

(cherry picked from commit 797dad91ff468a9bd6cd5d4f720eb4bbac1f454a)
DeltaFile
+47-1libexec/nuageinit/nuage.lua
+36-0libexec/nuageinit/nuageinit.7
+33-0libexec/nuageinit/nuageinit
+28-0libexec/nuageinit/tests/nuageinit.sh
+144-14 files

FreeBSD/src c552051usr.sbin/pw pw_conf.c, usr.sbin/pw/tests pw_config_test.sh

pw: fix setmode(NULL) crash when homemode is a boolean value

(cherry picked from commit fe1e912d5a394565e9adfbc443555ae0b3f087e5)
DeltaFile
+10-4usr.sbin/pw/pw_conf.c
+12-0usr.sbin/pw/tests/pw_config_test.sh
+22-42 files

FreeBSD/src 04b8103libexec/nuageinit nuage.lua nuageinit.7, libexec/nuageinit/tests nuageinit.sh

nuageinit: implement resolv_conf support

Add support for the 'resolv_conf' cloud-config key which writes
directly to /etc/resolv.conf.

(cherry picked from commit 4662263c246fd9c31cf0f03089845140114445bc)
DeltaFile
+32-0libexec/nuageinit/nuage.lua
+32-0libexec/nuageinit/tests/nuageinit.sh
+17-0libexec/nuageinit/nuageinit.7
+6-0libexec/nuageinit/nuageinit
+87-04 files

FreeBSD/src c5755b7libexec/nuageinit/tests nuageinit.sh

nuageinit: add tests for bootcmd, ssh_deletekeys, disable_root, manage_etc_hosts

(cherry picked from commit 6e54d00867dd2b979d2dc097c710613e6b9bd33b)
DeltaFile
+167-0libexec/nuageinit/tests/nuageinit.sh
+167-01 files

FreeBSD/src ed54170usr.sbin/pw pw_user.c

pw: fix incorrect metalog path in mkdir_home_parents

(cherry picked from commit ab478de1f9b3f73036ee05004fb2d503a0f339bc)
DeltaFile
+1-1usr.sbin/pw/pw_user.c
+1-11 files

FreeBSD/src 2dd4c50usr.sbin/pw pw_user.c, usr.sbin/pw/tests pw_useradd_test.sh

pw: fix inverted condition in shell_path error handling

(cherry picked from commit 4fd8a69ec6623da5ef33818be134efffebe37f75)
DeltaFile
+1-1usr.sbin/pw/pw_user.c
+1-1usr.sbin/pw/tests/pw_useradd_test.sh
+2-22 files

FreeBSD/src 5433481usr.sbin/pw pw.h

pw: remove duplicate pw_user_add declarations

(cherry picked from commit 1cc5684b3216dd0198c4fe83cdbcaed8d874c99c)
DeltaFile
+0-3usr.sbin/pw/pw.h
+0-31 files

FreeBSD/src 178f400libexec/nuageinit nuageinit nuageinit.7, libexec/rc/rc.d nuageinit

nuageinit: implement bootcmd support

Add support for the 'bootcmd' cloud-config directive, which allows
running commands very early in the boot process, before the hostname
is set and before the network is configured.

- nuageinit: bootcmd() function follows the same pattern as runcmd(),
  writing commands to /var/cache/nuageinit/bootcmds instead of runcmds.
  It is the first entry in the pre_network_calls table.

- rc.d/nuageinit: execute /var/cache/nuageinit/bootcmds immediately
  after /usr/libexec/nuageinit completes, before unmounting the config
  drive. This ensures bootcmd runs before NETWORKING per cloud-init spec.

(cherry picked from commit b9be7608cd13888a32815bfb2263e20855706969)
DeltaFile
+18-0libexec/nuageinit/nuageinit
+5-0libexec/nuageinit/nuageinit.7
+4-0libexec/rc/rc.d/nuageinit
+27-03 files

FreeBSD/src 3973c36usr.sbin/pw pw_group.c, usr.sbin/pw/tests pw_groupdel_test.sh

pw: fix uninitialized name pointer in pw_group_del

The 'name' variable could be left uninitialized if neither the
positional argument nor -n is supplied, leading to undefined
behavior when passed to getgroup().

(cherry picked from commit 13f4a37b536b60d559c766b3ec4f2d5d25279ea3)
DeltaFile
+15-1usr.sbin/pw/tests/pw_groupdel_test.sh
+1-1usr.sbin/pw/pw_group.c
+16-22 files

FreeBSD/src 85a9433libexec/nuageinit nuage.lua nuageinit

nuageinit: implement manage_etc_hosts support

Add support for adding the instance hostname to /etc/hosts on the
127.0.0.1 and ::1 localhost lines, matching cloud-init's default
behaviour (manage_etc_hosts: true).

create a revolve_hostname helper to avoid code duplucation.

(cherry picked from commit ba58e8ad726318ed59b6cc5934435dbddbe23dac)
DeltaFile
+62-0libexec/nuageinit/nuage.lua
+24-6libexec/nuageinit/nuageinit
+13-0libexec/nuageinit/nuageinit.7
+99-63 files

FreeBSD/src a67656flibexec/nuageinit nuageinit.7 nuageinit

nuageinit: complete SSH support with ssh_deletekeys and disable_root

Add missing SSH cloud-config options from cloud-init spec:

- ssh_deletekeys: remove existing SSH host keys on first boot so
  new ones are generated automatically by sshd(8).
  Implemented as delete_ssh_host_keys() in nuage.lua using lfs.dir()
  with a directory existence guard via lfs.attributes().

- disable_root: set PermitRootLogin to 'no' (or a custom value via
  disable_root_opts) in /etc/ssh/sshd_config.

- disable_root_opts: optional string or array to override the
  PermitRootLogin value used when disable_root is true. Only the
  first array element is used.

(cherry picked from commit 22c1f5d0ec215e36dd4448b9128b856b5441d21c)
DeltaFile
+32-0libexec/nuageinit/nuageinit.7
+24-0libexec/nuageinit/nuageinit
+14-0libexec/nuageinit/nuage.lua
+70-03 files

FreeBSD/src 481f620libexec/nuageinit nuage.lua

nuageinit: fix TOCTOU in addsshkey, adddoas, addsudo

Replace check-then-create patterns with direct creation:

- addsshkey: check what exists before creation, use mkdir_p() for
  .ssh directory, handle errors with warnmsg() instead of assert().
  Apply chmod/chown only on newly created files/directories.

- adddoas: same pattern for doas.conf and the etc directory.

- addsudo: same pattern for the sudoers file and sudoers.d directory.

All three functions now use warnmsg() for error handling instead of
returning nil,err or using assert().

(cherry picked from commit cf5722ed60cf271e516927684c90464debb37496)
DeltaFile
+52-40libexec/nuageinit/nuage.lua
+52-401 files

FreeBSD/src 41fc76clibexec/nuageinit nuage.lua, libexec/nuageinit/tests update_sshd_config.lua

nuageinit: fix update_sshd_config crash when file does not exist

Previously update_sshd_config() would assert-fail if sshd_config did
not exist. Now it creates a new file with the given key/value.

Also replace the fragile simultaneous r+ + temp file approach with
a cleaner read-then-write pattern: read all lines into memory, modify
as needed, then write to a temp file and rename. All assert() calls
replaced with proper error handling via warnmsg().

Add test case for missing file creation.

(cherry picked from commit 0ba9b7b7f815b57f1c121b0f78eaee02d2cdd414)
DeltaFile
+31-12libexec/nuageinit/nuage.lua
+7-0libexec/nuageinit/tests/update_sshd_config.lua
+38-122 files