Mercurial > go > multipass
diff cmds/multipass-checkpassword/checkpassword.go @ 17:342f63116bfd
Move commands to canonical Go locations, so go install works.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Fri, 30 Oct 2015 00:18:13 -0400 |
parents | multipass-checkpassword.go@4db389f948c9 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmds/multipass-checkpassword/checkpassword.go Fri Oct 30 00:18:13 2015 -0400 @@ -0,0 +1,49 @@ +package main + +import ( + "bufio" + "os" + "os/user" + "syscall" + + "pfish.zone/go/multipass/file" +) + +const ( + InternalError = 111 + Failed = 1 +) + +func main() { + infile := os.NewFile(3, "") + reader := bufio.NewReader(infile) + username, err := reader.ReadString(0) + if err != nil { + os.Exit(InternalError) + } + username = username[:len(username)-1] + pass, err := reader.ReadString(0) + if err != nil { + os.Exit(InternalError) + } + pass = pass[:len(pass)-1] + infile.Close() + passfile, err := file.ForUser(username) + if err != nil { + os.Exit(Failed) + } + success, _ := passfile.Authenticate(pass) + if !success { + os.Exit(Failed) + } + user, err := user.Lookup(username) + if err != nil { + os.Exit(Failed) + } + os.Setenv("USER", user.Username) + os.Setenv("HOME", user.HomeDir) + os.Setenv("userdb_uid", user.Uid) + os.Setenv("userdb_gid", user.Gid) + os.Setenv("EXTRA", "userdb_uid userdb_gid") + syscall.Exec(os.Args[1], os.Args[1:], os.Environ()) +}