File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3,10 +3,10 @@ package docker
33import (
44 "flag"
55 "fmt"
6+ "github.com/dotcloud/docker/utils"
67 "log"
78 "os"
89 "os/exec"
9- "os/user"
1010 "strconv"
1111 "strings"
1212 "syscall"
@@ -27,10 +27,7 @@ func changeUser(u string) {
2727 if u == "" {
2828 return
2929 }
30- userent , err := user .LookupId (u )
31- if err != nil {
32- userent , err = user .Lookup (u )
33- }
30+ userent , err := utils .UserLookup (u )
3431 if err != nil {
3532 log .Fatalf ("Unable to find user %v: %v" , u , err )
3633 }
Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ import (
1414 "net/http"
1515 "os"
1616 "os/exec"
17+ "os/user"
1718 "path/filepath"
1819 "runtime"
1920 "strconv"
@@ -700,3 +701,23 @@ func ParseRepositoryTag(repos string) (string, string) {
700701 }
701702 return repos , ""
702703}
704+
705+ func UserLookup (uid string ) (* user.User , error ) {
706+ file , err := ioutil .ReadFile ("/etc/passwd" )
707+ if err != nil {
708+ return nil , err
709+ }
710+ for _ , line := range strings .Split (string (file ), "\n " ) {
711+ data := strings .Split (line , ":" )
712+ if len (data ) > 5 && (data [0 ] == uid || data [2 ] == uid ) {
713+ return & user.User {
714+ Uid : data [2 ],
715+ Gid : data [3 ],
716+ Username : data [0 ],
717+ Name : data [4 ],
718+ HomeDir : data [5 ],
719+ }, nil
720+ }
721+ }
722+ return nil , fmt .Errorf ("User not found in /etc/passwd" )
723+ }
You can’t perform that action at this time.
0 commit comments