Skip to content

Commit

Permalink
allow trailing+leading whitespace for passwords - rclone#1717
Browse files Browse the repository at this point in the history
warn users when they enter passwords with leading/trailing whitespaces

Updated config_test.go, removing deprecated test case and updated TestReveal
  • Loading branch information
ishuah authored and ncw committed Oct 20, 2017
1 parent d121a94 commit 10f27e2
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 11 deletions.
10 changes: 7 additions & 3 deletions fs/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -551,11 +551,15 @@ func checkPassword(password string) (string, error) {
if !utf8.ValidString(password) {
return "", errors.New("password contains invalid utf8 characters")
}
// Remove leading+trailing whitespace
password = strings.TrimSpace(password)
// Check for leading/trailing whitespace
trimmedPassword := strings.TrimSpace(password)
// Warn user if password has leading+trailing whitespace
if len(password) != len(trimmedPassword) {
fmt.Fprintln(os.Stderr, "Your password contains leading/trailing whitespace - in previous versions of rclone this was stripped")
}
// Normalize to reduce weird variations.
password = norm.NFKC.String(password)
if len(password) == 0 {
if len(password) == 0 || len(trimmedPassword) == 0 {
return "", errors.New("no characters in password")
}
return password, nil
Expand Down
3 changes: 1 addition & 2 deletions fs/config_read_password.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"fmt"
"log"
"os"
"strings"

"golang.org/x/crypto/ssh/terminal"
)
Expand All @@ -22,5 +21,5 @@ func ReadPassword() string {
if err != nil {
log.Fatalf("Failed to read password: %v", err)
}
return strings.TrimSpace(string(line))
return string(line)
}
9 changes: 3 additions & 6 deletions fs/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@ func TestReveal(t *testing.T) {
in string
wantErr string
}{
{"YmJiYmJiYmJiYmJiYmJiYp*gcEWbAw", "base64 decode failed: illegal base64 data at input byte 22"},
{"aGVsbG8", "input too short"},
{"", "input too short"},
{"YmJiYmJiYmJiYmJiYmJiYp*gcEWbAw", "base64 decode failed when revealing password - is it obscured?: illegal base64 data at input byte 22"},
{"aGVsbG8", "input too short when revealing password - is it obscured?"},
{"", "input too short when revealing password - is it obscured?"},
} {
gotString, gotErr := Reveal(test.in)
assert.Equal(t, "", gotString)
Expand Down Expand Up @@ -203,9 +203,6 @@ func TestPassword(t *testing.T) {
// Simple check of wrong passwords
hashedKeyCompare(t, "mis", "match", false)

// Check that passwords match with trimmed whitespace
hashedKeyCompare(t, " abcdef \t", "abcdef", true)

// Check that passwords match after unicode normalization
hashedKeyCompare(t, "ff\u0041\u030A", "ffÅ", true)

Expand Down

0 comments on commit 10f27e2

Please sign in to comment.