func main() { t, err := pam.StartFunc("", "", func(s pam.Style, msg string) (string, error) { switch s { case pam.PromptEchoOff: return gopass.GetPass(msg) case pam.PromptEchoOn: fmt.Print(msg + " ") input, err := bufio.NewReader(os.Stdin).ReadString('\n') if err != nil { return "", err } return input[:len(input)-1], nil case pam.ErrorMsg: log.Print(msg) return "", nil case pam.TextInfo: fmt.Println(msg) return "", nil } return "", errors.New("Unrecognized message style") }) if err != nil { log.Fatalf("Start: %s", err.Error()) } err = t.Authenticate(0) if err != nil { log.Fatalf("Authenticate: %s", err.Error()) } log.Print("Authentication succeeded!") }
func PAMAuth(serviceName, userName, passwd string) error { t, err := pam.StartFunc(serviceName, userName, func(s pam.Style, msg string) (string, error) { switch s { case pam.PromptEchoOff: return passwd, nil case pam.PromptEchoOn, pam.ErrorMsg, pam.TextInfo: return "", nil } return "", errors.New("Unrecognized PAM message style") }) if err != nil { return err } if err = t.Authenticate(0); err != nil { return err } return nil }