Skip to content

Commit 1fcadba

Browse files
committed
add -user -group -perm settings for unix sockets
1 parent c3c8cbf commit 1fcadba

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

main.go

+64-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"net"
99
"os"
1010
"os/signal"
11+
"os/user"
12+
"strconv"
1113
"strings"
1214
"sync"
1315
"syscall"
@@ -18,15 +20,76 @@ func main() {
1820
network := flag.String("network", "tcp", "")
1921
notlsaction := flag.String("notls", "reject", "")
2022
tlsaction := flag.String("tls", "dunno", "")
23+
24+
perm := flag.Uint64("perm", 0660, "unix socket permmissions (when -network unix)")
25+
userU := flag.String("user", "", "unix socket user (when -network unix)")
26+
groupU := flag.String("group", "", "unix socket group (when -network unix)")
2127
flag.Parse()
2228

29+
if *network == "unix" {
30+
syscall.Umask(0777)
31+
}
32+
2333
listener, err := net.Listen(*network, *listen)
2434
if err != nil {
2535
fmt.Fprintf(os.Stderr, "%v\n", err)
2636
os.Exit(1)
2737
}
28-
wg := sync.WaitGroup{}
2938

39+
if *network == "unix" {
40+
if err := os.Chmod(*listen, os.FileMode(*perm)); err != nil {
41+
listener.Close()
42+
fmt.Fprintf(os.Stderr, "%v\n", err)
43+
os.Exit(1)
44+
}
45+
46+
if *userU != "" {
47+
userUID, err := user.Lookup(*userU)
48+
if err != nil {
49+
listener.Close()
50+
fmt.Fprintf(os.Stderr, "%v\n", err)
51+
os.Exit(1)
52+
}
53+
54+
uid, err := strconv.ParseInt(userUID.Uid, 10, 31)
55+
if err != nil {
56+
listener.Close()
57+
fmt.Fprintf(os.Stderr, "%v\n", err)
58+
os.Exit(1)
59+
}
60+
61+
if err := os.Chown(*listen, int(uid), -1); err != nil {
62+
listener.Close()
63+
fmt.Fprintf(os.Stderr, "%v\n", err)
64+
os.Exit(1)
65+
}
66+
}
67+
68+
if *groupU != "" {
69+
groupUID, err := user.LookupGroup(*groupU)
70+
if err != nil {
71+
listener.Close()
72+
fmt.Fprintf(os.Stderr, "%v\n", err)
73+
os.Exit(1)
74+
}
75+
76+
gid, err := strconv.ParseInt(groupUID.Gid, 10, 31)
77+
if err != nil {
78+
listener.Close()
79+
fmt.Fprintf(os.Stderr, "%v\n", err)
80+
os.Exit(1)
81+
}
82+
83+
if err := os.Chown(*listen, -1, int(gid)); err != nil {
84+
listener.Close()
85+
fmt.Fprintf(os.Stderr, "%v\n", err)
86+
os.Exit(1)
87+
}
88+
}
89+
90+
}
91+
92+
wg := sync.WaitGroup{}
3093
done := make(chan struct{})
3194

3295
sig := make(chan os.Signal)

0 commit comments

Comments
 (0)