Mercurial > go > multipass
comparison multipass-checkpassword.go @ 0:c18bc7b9d1d9
Basic binaries. checkpassword doesn't yet work.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sat, 24 Oct 2015 21:32:03 -0400 |
| parents | |
| children | faf4aad86fc9 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:c18bc7b9d1d9 |
|---|---|
| 1 package main | |
| 2 | |
| 3 import ( | |
| 4 "bufio" | |
| 5 "os" | |
| 6 "os/user" | |
| 7 "syscall" | |
| 8 | |
| 9 "pfish.zone/go/multipass/file" | |
| 10 ) | |
| 11 | |
| 12 const ( | |
| 13 InternalError = 111 | |
| 14 Failed = 1 | |
| 15 ) | |
| 16 | |
| 17 func main() { | |
| 18 //infile = os.NewFile(3, "") | |
| 19 reader := bufio.NewReader(os.Stdin) | |
| 20 username, err := reader.ReadString('\n') | |
| 21 if err != nil { | |
| 22 os.Exit(InternalError) | |
| 23 } | |
| 24 pass, err := reader.ReadString('\n') | |
| 25 if err != nil { | |
| 26 os.Exit(InternalError) | |
| 27 } | |
| 28 passfile, err := file.ForUser(username) | |
| 29 if err != nil { | |
| 30 os.Exit(Failed) | |
| 31 } | |
| 32 success, _ := passfile.Authenticate(pass) | |
| 33 if !success { | |
| 34 os.Exit(Failed) | |
| 35 } | |
| 36 user, err := user.Lookup(username) | |
| 37 err = os.Setenv("USER", user.HomeDir) | |
| 38 if err != nil { | |
| 39 os.Exit(Failed) | |
| 40 } | |
| 41 os.Setenv("userdb_uid", user.Uid) | |
| 42 os.Setenv("userdb_gid", user.Gid) | |
| 43 os.Setenv("EXTRA", "userdb_uid userdb_gid") | |
| 44 environ := []string{ | |
| 45 "userdb_uid=" + user.Uid, | |
| 46 "userdb_gid=" + user.Gid, | |
| 47 "EXTRA=userdb_uid userdb_gid", | |
| 48 } | |
| 49 syscall.Exec(os.Args[1], os.Args[1:], environ) | |
| 50 } |
