diff options
| author | Eric Biggers <ebiggers@google.com> | 2020-11-07 20:30:51 -0800 |
|---|---|---|
| committer | Eric Biggers <ebiggers3@gmail.com> | 2020-11-07 20:46:57 -0800 |
| commit | 7381e5937209178fa94694888d6a721ab0d5a124 (patch) | |
| tree | 5b52c381b7506639a60edbc3bd9b8eb7e9fd785b /cmd | |
| parent | 4d37d7eaedae964cf72e82ec959a2482916faa1b (diff) | |
cmd/fscrypt: fix race condition in getPassphraseKey()
Set the terminal to raw mode *before* printing the prompt.
Otherwise the user (or the automated test) might enter the
passphrase before the terminal gets put into raw mode.
This is needed for some of the CLI tests to pass reliably in Travis CI.
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/fscrypt/keys.go | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/cmd/fscrypt/keys.go b/cmd/fscrypt/keys.go index 77e3900..33461ec 100644 --- a/cmd/fscrypt/keys.go +++ b/cmd/fscrypt/keys.go @@ -86,9 +86,6 @@ func (p passphraseReader) Read(buf []byte) (int, error) { // passphrase into a key. If we are not reading from a terminal, just read into // the passphrase into the key normally. func getPassphraseKey(prompt string) (*crypto.Key, error) { - if !quietFlag.Value { - fmt.Print(prompt) - } // Only disable echo if stdin is actually a terminal. if terminal.IsTerminal(stdinFd) { @@ -102,6 +99,10 @@ func getPassphraseKey(prompt string) (*crypto.Key, error) { }() } + if !quietFlag.Value { + fmt.Print(prompt) + } + return crypto.NewKeyFromReader(passphraseReader{}) } |