From 999a8d72492c7937aa9f826406ae40158017f766 Mon Sep 17 00:00:00 2001 From: Daniel Mizyrycki Date: Mon, 12 Aug 2013 15:15:52 -0700 Subject: [PATCH] API, issue 1471: Allow users belonging to the docker group to use the docker client --- api.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/api.go b/api.go index c9ac15bc53..18f42c446d 100644 --- a/api.go +++ b/api.go @@ -15,6 +15,7 @@ import ( "net/http" "os" "os/exec" + "regexp" "strconv" "strings" ) @@ -1086,7 +1087,25 @@ func ListenAndServe(proto, addr string, srv *Server, logging bool) error { return e } if proto == "unix" { - os.Chmod(addr, 0700) + if err := os.Chmod(addr, 0660); err != nil { + return err + } + + groups, err := ioutil.ReadFile("/etc/group") + if err != nil { + return err + } + re := regexp.MustCompile("(^|\n)docker:.*?:([0-9]+)") + if gidMatch := re.FindStringSubmatch(string(groups)); gidMatch != nil { + gid, err := strconv.Atoi(gidMatch[2]) + if err != nil { + return err + } + utils.Debugf("docker group found. gid: %d", gid) + if err := os.Chown(addr, 0, gid); err != nil { + return err + } + } } httpSrv := http.Server{Addr: addr, Handler: r} return httpSrv.Serve(l)