aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Unterwurzacher2024-08-23 12:27:59 +0200
committerJakob Unterwurzacher2024-08-23 12:29:12 +0200
commitb78e6a1c4cc0d1bbd3581d561773db85ee2e75b7 (patch)
treea9d65c8f3a282dc93c5eae820f7ef9188826b42f
parent533c9eb7cedeaaa23d0901d703e1c416b0fd0151 (diff)
readpassword: show where stdin is connected
Should make debugging situations like https://github.com/rfjakob/gocryptfs/issues/852 Empty stdin in mkinitcpio hook easier. Examples: $ echo -n "" | ./gocryptfs -init a Choose a password for protecting your files. Reading Password from stdin (connected to "pipe:[749878]") Got empty Password from stdin $ ./gocryptfs -init a < /dev/null Choose a password for protecting your files. Reading Password from stdin (connected to "/dev/null") Got empty Password from stdin $ ./gocryptfs -init a < /dev/zero Choose a password for protecting your files. Reading Password from stdin (connected to "/dev/zero") fatal: maximum password length of 2048 bytes exceeded $ ./gocryptfs -init a < /dev/full Choose a password for protecting your files. Reading Password from stdin (connected to "/dev/full") fatal: maximum password length of 2048 bytes exceeded $ jakob@brikett:~/go/src/github.com/rfjakob/gocryptfs$ ./gocryptfs -init a < /dev/urandom Choose a password for protecting your files. Reading Password from stdin (connected to "/dev/urandom") Your master key is: 4e45a317-595d8a2d-46493a30-97de86ef- 540c7364-f0acc297-dd6f2592-7d9a5c97 If the gocryptfs.conf file becomes corrupted or you ever forget your password, there is only one hope for recovery: The master key. Print it to a piece of paper and store it in a drawer. This message is only printed once. The gocryptfs filesystem has been created successfully. You can now mount it using: gocryptfs a MOUNTPOINT
-rw-r--r--internal/readpassword/read.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/internal/readpassword/read.go b/internal/readpassword/read.go
index 3ad3bb4..582a104 100644
--- a/internal/readpassword/read.go
+++ b/internal/readpassword/read.go
@@ -87,7 +87,14 @@ func readPasswordTerminal(prompt string) ([]byte, error) {
// readPasswordStdin reads a line from stdin.
// It exits with a fatal error on read error or empty result.
func readPasswordStdin(prompt string) ([]byte, error) {
- tlog.Info.Printf("Reading %s from stdin", prompt)
+ // This should make debugging situations like
+ // https://github.com/rfjakob/gocryptfs/issues/852
+ // easier. Only works on Linux, otherwise shows "?".
+ target, err := os.Readlink("/proc/self/fd/0")
+ if err != nil {
+ target = "?"
+ }
+ tlog.Info.Printf("Reading %s from stdin (connected to %q)", prompt, target)
p, err := readLineUnbuffered(os.Stdin)
if err != nil {
return nil, err