-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathfile.go
49 lines (43 loc) · 1.03 KB
/
file.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016-present Datadog, Inc.
//go:build !windows
// +build !windows
package checks
import (
"errors"
"os"
"os/user"
"strconv"
"syscall"
)
func getFileStatt(fi os.FileInfo) (*syscall.Stat_t, error) {
statt, ok := fi.Sys().(*syscall.Stat_t)
if !ok {
return nil, errors.New("expected to get stat_t from fileinfo")
}
return statt, nil
}
func getFileUser(fi os.FileInfo) (string, error) {
statt, err := getFileStatt(fi)
if err != nil {
return "", nil
}
u := strconv.Itoa(int(statt.Uid))
if user, err := user.LookupId(u); err == nil {
u = user.Username
}
return u, nil
}
func getFileGroup(fi os.FileInfo) (string, error) {
statt, err := getFileStatt(fi)
if err != nil {
return "", nil
}
g := strconv.Itoa(int(statt.Gid))
if group, err := user.LookupGroupId(g); err == nil {
g = group.Name
}
return g, nil
}