Mercurial > go > multipass
comparison mp-checkpassword/checkpassword.go @ 19:58fe867c9ecf
Reorganize commands to more standard go layout.
- Unify multipass user commands under one 'multipass' binary
- Move multipass checkpassword command to mp-checkpassword.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Sun, 01 Nov 2015 12:42:02 -0500 |
parents | cmds/multipass-checkpassword/checkpassword.go@342f63116bfd |
children |
comparison
equal
deleted
inserted
replaced
18:00d30c67b56d | 19:58fe867c9ecf |
---|---|
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(infile) | |
20 username, err := reader.ReadString(0) | |
21 if err != nil { | |
22 os.Exit(InternalError) | |
23 } | |
24 username = username[:len(username)-1] | |
25 pass, err := reader.ReadString(0) | |
26 if err != nil { | |
27 os.Exit(InternalError) | |
28 } | |
29 pass = pass[:len(pass)-1] | |
30 infile.Close() | |
31 passfile, err := file.ForUser(username) | |
32 if err != nil { | |
33 os.Exit(Failed) | |
34 } | |
35 success, _ := passfile.Authenticate(pass) | |
36 if !success { | |
37 os.Exit(Failed) | |
38 } | |
39 user, err := user.Lookup(username) | |
40 if err != nil { | |
41 os.Exit(Failed) | |
42 } | |
43 os.Setenv("USER", user.Username) | |
44 os.Setenv("HOME", user.HomeDir) | |
45 os.Setenv("userdb_uid", user.Uid) | |
46 os.Setenv("userdb_gid", user.Gid) | |
47 os.Setenv("EXTRA", "userdb_uid userdb_gid") | |
48 syscall.Exec(os.Args[1], os.Args[1:], os.Environ()) | |
49 } |