Support for reading passwords from a specified fd#186
Support for reading passwords from a specified fd#186
Conversation
|
Fixed the extract command by wiring in the |
22087bd to
bdd167d
Compare
95fcbe4 to
dca91b8
Compare
This initial work adds the -pfd[N] flag to the 7z command so that an
alternate file descriptor (fd) may be specified for reading the password
instead of standard input (stdin).
By adding this flag it becomes possible for 7z to accept data from stdin
for use with the -si flag while also being being able to decrypt a
password protected achieve without revealing the password on the
command line.
For example, generating a secret key and storing it in an encrypted archive
without the need to expose any of the data to a filesystem:
age-keygen | 7z a -pfd9 9< <(pass show archive) -siid.age archive.7z
As a side effect the password is not echoed to the terminal, however
this PR should not conflict with the work in ip7z#33.
Note that the -p flag is necessary if the archive does not exist but
should not be used if it does.
dca91b8 to
2c37f65
Compare
gyurix
left a comment
There was a problem hiding this comment.
Useful CLI feature, but current implementation has real state-management bugs.
Biggest correctness issue: password reads temporarily replace global g_StdIn and never restore previous stream/code-page state after prompt. That can leak into later console input. -pfd0 is impossible with current sentinel logic, and negative fds are accepted without validation.
Code quality: same fdopen() + g_StdIn swap logic is duplicated in multiple places.
Merge readiness: 3/10. Before merge: validate fd >= 0, distinguish "not set" from fd 0, and wrap temporary stdin redirection in one helper/RAII path that restores state after read.
This initial work adds the -pfd[N] flag to the 7z command so that an alternate file descriptor (fd) may be specified for reading the password instead of standard input (stdin).
By adding this flag it becomes possible for 7z to accept data from stdin for use with the -si flag while also being able to decrypt a password protected achieve without revealing the password on the command line.
For example, generating a secret key and storing it in an encrypted archive without the need to expose any of the data to a filesystem:
As a side effect the password is not echoed to the terminal, however this PR should not conflict with the work in #33.
Note that the -p flag is necessary if the archive does not exist (or is empty) but should not be used if it does. This is probably a bug and should be fixed.
Closes #184