Skip to content

Commit de553b7

Browse files
fix(agent): include primary group in ListGroups
The ListGroups function was only returning secondary groups from `/etc/group`, missing the user's primary group defined in `/etc/passwd`. This commit modifies the ListGroups method to: - First retrieve the user's primary group (GID) from /etc/passwd - Then append secondary groups from /etc/group - Avoid duplicates if the primary group is also listed in /etc/group
1 parent 50361fa commit de553b7

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

agent/pkg/osauth/auth.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,31 @@ func (b *backend) LookupUser(username string) (*User, error) {
5555
}
5656

5757
func (b *backend) ListGroups(username string) ([]uint32, error) {
58-
file, err := os.Open(DefaultGroupFilename)
58+
user, err := b.LookupUser(username)
5959
if err != nil {
6060
return nil, err
6161
}
62-
defer file.Close()
6362

64-
return ListGroupsFromFile(username, file)
63+
groups := []uint32{user.GID}
64+
65+
groupFile, err := os.Open(DefaultGroupFilename)
66+
if err != nil {
67+
return nil, err
68+
}
69+
defer groupFile.Close()
70+
71+
secondaryGroups, err := ListGroupsFromFile(username, groupFile)
72+
if err != nil {
73+
return nil, err
74+
}
75+
76+
for _, gid := range secondaryGroups {
77+
if gid != user.GID {
78+
groups = append(groups, gid)
79+
}
80+
}
81+
82+
return groups, nil
6583
}
6684

6785
func ListGroupsFromFile(username string, group io.Reader) ([]uint32, error) {
@@ -72,7 +90,7 @@ func ListGroupsFromFile(username string, group io.Reader) ([]uint32, error) {
7290
return nil, err
7391
}
7492

75-
userGroups := make([]uint32, 0, len(groups))
93+
var userGroups []uint32
7694
for _, g := range groups {
7795
if slices.Contains(g.Members, username) {
7896
userGroups = append(userGroups, g.GID)

0 commit comments

Comments
 (0)