fix missing definition for group flag

This commit is contained in:
juancwu 2026-04-29 15:55:43 +00:00
commit 6ce4714931

View file

@ -8,6 +8,7 @@ import (
"net" "net"
"os" "os"
"os/signal" "os/signal"
"os/user"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
@ -257,20 +258,58 @@ func tokenize(line string) ([]string, error) {
return args, nil return args, nil
} }
// lookupGID resolves a group name or numeric GID string to a GID.
func lookupGID(s string) (int, error) {
if n, err := strconv.Atoi(s); err == nil {
return n, nil
}
g, err := user.LookupGroup(s)
if err != nil {
return 0, fmt.Errorf("lookup group %q: %w", s, err)
}
n, err := strconv.Atoi(g.Gid)
if err != nil {
return 0, fmt.Errorf("parse gid %q: %w", g.Gid, err)
}
return n, nil
}
func main() { func main() {
sock := flag.String("socket", "/tmp/cubby.sock", "unix socket path") sock := flag.String("socket", "/tmp/cubby.sock", "unix socket path")
group := flag.String("group", "", "group name or GID to share the socket with (mode 0660); default is owner-only (0600)")
flag.Parse() flag.Parse()
mode := os.FileMode(0600)
gid := -1
if *group != "" {
g, err := lookupGID(*group)
if err != nil {
log.Fatalf("group: %v", err)
}
gid = g
mode = 0660
}
// Clean up any stale socket file from a previous run. // Clean up any stale socket file from a previous run.
if _, err := os.Stat(*sock); err == nil { if _, err := os.Stat(*sock); err == nil {
_ = os.Remove(*sock) _ = os.Remove(*sock)
} }
// Set umask before Listen so the socket is created with the desired
// permissions immediately, with no window where it's world-accessible.
oldMask := syscall.Umask(int(^mode & 0777))
ln, err := net.Listen("unix", *sock) ln, err := net.Listen("unix", *sock)
syscall.Umask(oldMask)
if err != nil { if err != nil {
log.Fatalf("listen: %v", err) log.Fatalf("listen: %v", err)
} }
_ = os.Chmod(*sock, 0600) // current user only if gid != -1 {
if err := os.Chown(*sock, os.Getuid(), gid); err != nil {
log.Fatalf("chown socket: %v", err)
}
}
// Belt-and-suspenders: ensure the final mode regardless of umask quirks.
_ = os.Chmod(*sock, mode)
store := NewStore() store := NewStore()