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