This used to be handled by go-connections, but now it only takes a group
ID (int).
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,32 @@ |
0 |
+// +build !windows |
|
1 |
+ |
|
2 |
+package listeners |
|
3 |
+ |
|
4 |
+import ( |
|
5 |
+ "fmt" |
|
6 |
+ "strconv" |
|
7 |
+ |
|
8 |
+ "github.com/opencontainers/runc/libcontainer/user" |
|
9 |
+ "github.com/pkg/errors" |
|
10 |
+) |
|
11 |
+ |
|
12 |
+func lookupGID(name string) (int, error) { |
|
13 |
+ groupFile, err := user.GetGroupPath() |
|
14 |
+ if err != nil { |
|
15 |
+ return -1, errors.Wrap(err, "error looking up groups") |
|
16 |
+ } |
|
17 |
+ groups, err := user.ParseGroupFileFilter(groupFile, func(g user.Group) bool { |
|
18 |
+ return g.Name == name || strconv.Itoa(g.Gid) == name |
|
19 |
+ }) |
|
20 |
+ if err != nil { |
|
21 |
+ return -1, errors.Wrapf(err, "error parsing groups for %s", name) |
|
22 |
+ } |
|
23 |
+ if groups != nil && len(groups) > 0 { |
|
24 |
+ return groups[0].Gid, nil |
|
25 |
+ } |
|
26 |
+ gid, err := strconv.Atoi(name) |
|
27 |
+ if err == nil { |
|
28 |
+ return gid, nil |
|
29 |
+ } |
|
30 |
+ return -1, fmt.Errorf("group %s not found", name) |
|
31 |
+} |
... | ... |
@@ -18,7 +18,11 @@ func Init(proto, addr, socketGroup string, tlsConfig *tls.Config) (ls []net.List |
18 | 18 |
} |
19 | 19 |
ls = append(ls, l) |
20 | 20 |
case "unix": |
21 |
- l, err := sockets.NewUnixSocket(addr, socketGroup) |
|
21 |
+ gid, err := lookupGID(socketGroup) |
|
22 |
+ if err != nil { |
|
23 |
+ return nil, err |
|
24 |
+ } |
|
25 |
+ l, err := sockets.NewUnixSocket(addr, gid) |
|
22 | 26 |
if err != nil { |
23 | 27 |
return nil, fmt.Errorf("can't create unix socket %s: %v", addr, err) |
24 | 28 |
} |
... | ... |
@@ -31,10 +31,9 @@ func Init(proto, addr, socketGroup string, tlsConfig *tls.Config) ([]net.Listene |
31 | 31 |
} |
32 | 32 |
ls = append(ls, l) |
33 | 33 |
case "unix": |
34 |
- |
|
35 |
- gid, err := strconv.Atoi(socketGroup) |
|
34 |
+ gid, err := lookupGID(socketGroup) |
|
36 | 35 |
if err != nil { |
37 |
- return nil, fmt.Errorf("failed to parse socket group id: should be a number: %v", socketGroup) |
|
36 |
+ return nil, err |
|
38 | 37 |
} |
39 | 38 |
l, err := sockets.NewUnixSocket(addr, gid) |
40 | 39 |
if err != nil { |