in cmd/hotdog-hotpatch/main.go [282:320]
func findEUID(pid int) (int, int, error) {
status, err := os.OpenFile(filepath.Join("/proc", strconv.Itoa(pid), "status"), os.O_RDONLY, 0)
if err != nil {
return 0, 0, err
}
defer status.Close()
scanner := bufio.NewScanner(status)
var (
uidLine string
gidLine string
)
for scanner.Scan() {
if strings.HasPrefix(scanner.Text(), "Uid:") {
uidLine = scanner.Text()
}
if strings.HasPrefix(scanner.Text(), "Gid:") {
gidLine = scanner.Text()
}
if uidLine != "" && gidLine != "" {
break
}
}
if uidLine == "" || gidLine == "" {
return 0, 0, errors.New("not found")
}
uidLine = strings.TrimPrefix(uidLine, "Uid:\t")
uidStr := strings.SplitN(uidLine, "\t", 2)[0]
uid, err := strconv.Atoi(uidStr)
if err != nil {
return 0, 0, err
}
gidLine = strings.TrimPrefix(gidLine, "Gid:\t")
gidStr := strings.SplitN(gidLine, "\t", 2)[0]
gid, err := strconv.Atoi(gidStr)
if err != nil {
return 0, 0, err
}
return uid, gid, nil
}