cmd: Don't read password from stdin for backup --stdin

This commit is contained in:
greatroar 2022-11-06 14:38:34 +01:00
parent 59a90943bb
commit 5dceadeb72
2 changed files with 26 additions and 0 deletions

View File

@ -0,0 +1,22 @@
Bugfix: Don't read password from stdin for backup --stdin
Restic backup previously tried to read first the password, then the data
to be backed up from standard input. This meant it would often confuse part
of the data for the password.
From now on, restic backup --stdin will exit with the message
Fatal: cannot read both password and data from stdin
unless the password is passed in some other way (--restic-password-file,
RESTIC_PASSWORD, etc.). To enter the password interactively, a password
command has to be used. For example, on Linux,
mysqldump somedatabase |
restic backup --stdin \
--password-command='sh -c "systemd-ask-password < /dev/tty"'
securely reads the password from the terminal.
https://github.com/restic/restic/issues/2591
https://github.com/restic/restic/pull/4011

View File

@ -262,6 +262,10 @@ func readFilenamesRaw(r io.Reader) (names []string, err error) {
// Check returns an error when an invalid combination of options was set.
func (opts BackupOptions) Check(gopts GlobalOptions, args []string) error {
if gopts.password == "" {
if opts.Stdin {
return errors.Fatal("cannot read both password and data from stdin")
}
filesFrom := append(append(opts.FilesFrom, opts.FilesFromVerbatim...), opts.FilesFromRaw...)
for _, filename := range filesFrom {
if filename == "-" {