Lands Gizmoduck's round 3 candidate, manifest 4782c8b5ecb7 (c783d5e39on gizmoduck/row234-r3, one commit on57f59e0c3), approved by Duckworth: content on round 1 (861182fa6, 29919), the round 2 rebase check (29928, rev 2670) and round 3 (REVIEW-r3.md7c8c38b69, posted 29935, rev 2683). 41 paths. Round 3 fixes the two failures in Sage's combined gate with row 233: bus schema.test.mjs now counts 18 tables and 71 triggers for the new hosts and host_grants tables, and stack-release.test.mjs T46 puts both tables in the untimed restore-guard list, since every write shares a transaction with a grant.* event. Round 3 rebuilt on the row 233 landing as one commit. 38 of the 39 round 2 blobs are unchanged and BUILD.md is append-only. Gizmoduck's singles on round 3: stack-release 196/0, schema 1/0. Evidence: Gizmoduck's slot runs, 25 of 25 mutants killed (A22b and A23 included, A9 structural), singles on r2 387/0 over 47 files. Sage's landing gate on thec783d5e39tree: 06:02:12Z to 06:15:26Z, every package except queue 2890 pass, 0 fail (15 packages; bus 539, cli 622), and all ten scripts/test-*.sh 585 pass, 0 fail. This is code only. The live stack runs from a pinned copy at schema 3i. The 3i to 3j migration runs in the 10-24 window (mos-1145), agent-run under Q173, with a backup first. Duckworth's N10 (hosts.mjs Object.hasOwn) and N12 (doc-only) go to row 235's carry list.
31 lines
1.3 KiB
Bash
Executable File
31 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Row 234 (#1740, #436a row a), design r6 E3: the installer key's forced command.
|
|
#
|
|
# Installed as /usr/local/sbin/mosaic-keys, root, 0755, and named by mosaic-installer's own line in
|
|
# /etc/ssh/mosaic-keys/mosaic-installer:
|
|
# restrict,command="/usr/local/sbin/mosaic-keys",from="<from>" ssh-ed25519 <base64> mosaic-installer-<tag>
|
|
#
|
|
# It matches SSH_ORIGINAL_COMMAND against three fixed patterns and hands the words to
|
|
# mosaic-keys-write through sudo. Nothing else runs. sudo's env_reset drops SSH_CONNECTION, so the
|
|
# connection and the request go to syslog here, before sudo. The writer checks everything again.
|
|
set -u
|
|
export PATH=/usr/bin:/bin LC_ALL=C
|
|
|
|
request=${SSH_ORIGINAL_COMMAND-}
|
|
/usr/bin/logger -t mosaic-keys -- "connection=${SSH_CONNECTION-} request=${request:0:1024}"
|
|
|
|
user='[a-z_][a-z0-9_-]{0,31}'
|
|
tag='mosaic-[0-9a-f]{32}'
|
|
key='(ssh-ed25519|ecdsa-sha2-nistp256|ssh-rsa) [A-Za-z0-9+/]+={0,2}'
|
|
list_re="^list $user\$"
|
|
add_re="^add $user $key $tag\$"
|
|
remove_re="^remove $user $tag\$"
|
|
|
|
if [[ $request =~ $list_re || $request =~ $add_re || $request =~ $remove_re ]]; then
|
|
# The patterns hold no space, glob or quote characters, so a split on spaces gives the words back.
|
|
read -r -a words <<<"$request"
|
|
exec /usr/bin/sudo -n /usr/local/sbin/mosaic-keys-write "${words[@]}"
|
|
fi
|
|
echo 'mosaic-keys: refused' >&2
|
|
exit 1
|