gitsrht-dispatch: add support for supplementary groups

This commit is contained in:
Julien Moutinho 2021-12-08 00:33:55 +01:00 committed by Drew DeVault
parent 5a74fbcf42
commit 389cc64d5d
1 changed files with 14 additions and 3 deletions

View File

@ -17,6 +17,7 @@ type Dispatcher struct {
cmd string cmd string
uid int uid int
gid int gid int
gids []int
} }
func main() { func main() {
@ -70,11 +71,20 @@ AuthorizedKeysUser=root`, os.Args[0])
if err != nil { if err != nil {
logger.Fatalf("Error looking up group %s: %v", spec[1], err) logger.Fatalf("Error looking up group %s: %v", spec[1], err)
} }
groups, err := user.GroupIds()
if err != nil {
logger.Fatalf("Error looking up supplementary groups of user %s: %v", spec[0], err)
}
gids := make([]int, len(groups))
for i, grp := range groups {
sgid, _ := strconv.Atoi(grp)
gids[i] = sgid
}
uid, _ := strconv.Atoi(user.Uid) uid, _ := strconv.Atoi(user.Uid)
gid, _ := strconv.Atoi(group.Gid) gid, _ := strconv.Atoi(group.Gid)
dispatchers[uid] = Dispatcher{cmd, uid, gid} dispatchers[uid] = Dispatcher{cmd, uid, gid, gids}
logger.Printf("Registered dispatcher for %s(%d):%s(%d): %s", logger.Printf("Registered dispatcher for %s(%d):%s(%d):(%s): %s",
spec[0], uid, spec[1], gid, cmd) spec[0], uid, spec[1], gid, strings.Join(groups, ","), cmd)
} }
var user *osuser.User var user *osuser.User
@ -93,6 +103,7 @@ AuthorizedKeysUser=root`, os.Args[0])
if dispatcher, ok := dispatchers[uid]; ok { if dispatcher, ok := dispatchers[uid]; ok {
logger.Printf("Dispatching to %s", dispatcher.cmd) logger.Printf("Dispatching to %s", dispatcher.cmd)
syscall.Setgroups(dispatcher.gids)
syscall.Setgid(dispatcher.gid) syscall.Setgid(dispatcher.gid)
syscall.Setuid(dispatcher.uid) syscall.Setuid(dispatcher.uid)
if err := syscall.Exec(dispatcher.cmd, append([]string{ if err := syscall.Exec(dispatcher.cmd, append([]string{