1
- // +build linux freebsd solaris
1
+ // +build !windows
2
2
3
3
package sockets
4
4
5
5
import (
6
- "fmt"
7
6
"net"
8
7
"os"
9
- "strconv"
10
8
"syscall"
11
-
12
- "github.com/Sirupsen/logrus"
13
- "github.com/opencontainers/runc/libcontainer/user"
14
9
)
15
10
16
11
// NewUnixSocket creates a unix socket with the specified path and group.
17
- func NewUnixSocket (path , group string ) (net.Listener , error ) {
12
+ func NewUnixSocket (path string , gid int ) (net.Listener , error ) {
18
13
if err := syscall .Unlink (path ); err != nil && ! os .IsNotExist (err ) {
19
14
return nil , err
20
15
}
21
16
mask := syscall .Umask (0777 )
22
17
defer syscall .Umask (mask )
18
+
23
19
l , err := net .Listen ("unix" , path )
24
20
if err != nil {
25
21
return nil , err
26
22
}
27
- if err := setSocketGroup (path , group ); err != nil {
28
- l .Close ()
23
+ if err := os .Chown (path , 0 , gid ); err != nil {
29
24
return nil , err
30
25
}
31
26
if err := os .Chmod (path , 0660 ); err != nil {
@@ -34,47 +29,3 @@ func NewUnixSocket(path, group string) (net.Listener, error) {
34
29
}
35
30
return l , nil
36
31
}
37
-
38
- func setSocketGroup (path , group string ) error {
39
- if group == "" {
40
- return nil
41
- }
42
- if err := changeGroup (path , group ); err != nil {
43
- if group != "docker" {
44
- return err
45
- }
46
- logrus .Debugf ("Warning: could not change group %s to docker: %v" , path , err )
47
- }
48
- return nil
49
- }
50
-
51
- func changeGroup (path string , nameOrGid string ) error {
52
- gid , err := lookupGidByName (nameOrGid )
53
- if err != nil {
54
- return err
55
- }
56
- logrus .Debugf ("%s group found. gid: %d" , nameOrGid , gid )
57
- return os .Chown (path , 0 , gid )
58
- }
59
-
60
- func lookupGidByName (nameOrGid string ) (int , error ) {
61
- groupFile , err := user .GetGroupPath ()
62
- if err != nil {
63
- return - 1 , err
64
- }
65
- groups , err := user .ParseGroupFileFilter (groupFile , func (g user.Group ) bool {
66
- return g .Name == nameOrGid || strconv .Itoa (g .Gid ) == nameOrGid
67
- })
68
- if err != nil {
69
- return - 1 , err
70
- }
71
- if groups != nil && len (groups ) > 0 {
72
- return groups [0 ].Gid , nil
73
- }
74
- gid , err := strconv .Atoi (nameOrGid )
75
- if err == nil {
76
- logrus .Warnf ("Could not find GID %d" , gid )
77
- return gid , nil
78
- }
79
- return - 1 , fmt .Errorf ("Group %s not found" , nameOrGid )
80
- }
0 commit comments