dgraph-io/dgraph · error
while reading password
Error message
while reading password
What it means
When prompting for a password on the terminal, term.ReadPassword failed while reading the user's typed input. The underlying OS/terminal error is wrapped with the message 'while reading password', so the root cause is in the wrapped error.
Source
Thrown at x/x.go:1228
closeFunc := func() {
for _, c := range conns {
if err := c.Close(); err != nil {
glog.Warningf("Error closing connection to Dgraph client: %v", err)
}
}
}
return dg, closeFunc
}
// AskUserPassword prompts the user to enter the password for the given user ID.
func AskUserPassword(userid string, pwdType string, times int) (string, error) {
AssertTrue(times == 1 || times == 2)
AssertTrue(pwdType == "Current" || pwdType == "New")
// ask for the user's password
fmt.Printf("%s password for %v:", pwdType, userid)
pd, err := term.ReadPassword(int(os.Stdin.Fd()))
if err != nil {
return "", errors.Wrapf(err, "while reading password")
}
fmt.Println()
password := string(pd)
if times == 2 {
fmt.Printf("Retype %s password for %v:", strings.ToLower(pwdType), userid)
pd2, err := term.ReadPassword(int(os.Stdin.Fd()))
if err != nil {
return "", errors.Wrapf(err, "while reading password")
}
fmt.Println()
password2 := string(pd2)
if password2 != password {
return "", errors.Errorf("the two typed passwords do not match")
}
}
return password, nilView on GitHub (pinned to 759e242be6)
Solutions
- Run the command in an interactive terminal so the password prompt can be read
- Provide credentials non-interactively via the tool's supported flags/env instead of prompting
- For CI, allocate a PTY or use a secrets-injection mechanism rather than typing at the prompt
Example fix
// before cat file | myapp login # stdin piped, ReadPassword fails // after myapp login # run interactively, or set credentials via env/flags
Defensive patterns
Strategy: try-catch
Validate before calling
if term.IsTerminal(int(os.Stdin.Fd())) {
// safe to prompt
} else {
// use non-interactive credential source
} Type guard
func stdinIsTTY() bool { return term.IsTerminal(int(os.Stdin.Fd())) } Try / catch
pw, err := getPasswordFromUser(...)
if err != nil {
if !term.IsTerminal(int(os.Stdin.Fd())) {
return fmt.Errorf("password prompt requires a TTY; provide credentials via flags/env: %w", err)
}
return err
} Prevention
- Check term.IsTerminal before prompting
- Prefer env vars/secret files for CI and non-interactive runs
- Allocate a PTY when running remotely (ssh -t)
When it happens
Trigger: Calling GetPasswordFromUser (login flow) when stdin is not an interactive terminal — e.g. piped input, no TTY, or the terminal closed the read (EOF/interrupt).
Common situations: Running commands in CI/non-interactive shells where a password prompt cannot be read, running under sudo/su with redirected stdin, or ssh sessions without a PTY.
Related errors
- Password too short, i.e. should have at least 6 chars
- Invalid password/crypted string
- Schema change not allowed from %s to %s
- the two typed passwords do not match
AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01).
Data as JSON: /api/errors/038d854ac2669626.
Report an issue: GitHub.