func findEUID()

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
}