redispass.py draws its password box on the terminal, not in the hook's pipe #6

Merged
marcos-mendez merged 1 commit from fix/redispass-draws-on-the-terminal into main 2026-09-30 01:56:22 -03:00
marcos-mendez commented 2026-09-30 01:35:52 -03:00 (Migrated from github.com)

firstboot.d/35redispass captures bin/redispass.py's standard output for DB_PASS=, and dialog draws on standard output, so an interactive first boot would freeze with the box drawn into the command substitution: the bug keel-wordpress 19.0-3 hit on Proxmox on 2026-09-30, fixed for dbpass.py in Keel-Linux/keel-mariadb#20.

Fix: the same pattern. redispass.py keeps a duplicate of the pipe for the KEY=value answers and points standard output, which dialog inherits, at the terminal the hook checked on standard input (else /dev/tty). Without any terminal it exits with a message naming secrets.db_password instead of a traceback. The hook is unchanged. Version 1.0.3.

Tests: tests/dialog.bats runs the script as the hook does, output redirected, inside a real pseudo terminal (script(1)), with a libinithooks stand-in whose get_password refuses unless fd 1 is a terminal; it fails on the old code and passes on the new.

`firstboot.d/35redispass` captures `bin/redispass.py`'s standard output for `DB_PASS=`, and dialog draws on standard output, so an interactive first boot would freeze with the box drawn into the command substitution: the bug keel-wordpress 19.0-3 hit on Proxmox on 2026-09-30, fixed for dbpass.py in Keel-Linux/keel-mariadb#20. Fix: the same pattern. redispass.py keeps a duplicate of the pipe for the KEY=value answers and points standard output, which dialog inherits, at the terminal the hook checked on standard input (else /dev/tty). Without any terminal it exits with a message naming secrets.db_password instead of a traceback. The hook is unchanged. Version 1.0.3. Tests: `tests/dialog.bats` runs the script as the hook does, output redirected, inside a real pseudo terminal (script(1)), with a libinithooks stand-in whose get_password refuses unless fd 1 is a terminal; it fails on the old code and passes on the new.
Sign in to join this conversation.
No description provided.