summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--util/pidowner/pidowner.go24
-rw-r--r--util/pidowner/pidowner_linux.go36
-rw-r--r--util/pidowner/pidowner_noimpl.go8
-rw-r--r--util/pidowner/pidowner_test.go50
-rw-r--r--util/pidowner/pidowner_windows.go35
5 files changed, 0 insertions, 153 deletions
diff --git a/util/pidowner/pidowner.go b/util/pidowner/pidowner.go
deleted file mode 100644
index cec92ba36..000000000
--- a/util/pidowner/pidowner.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) Tailscale Inc & contributors
-// SPDX-License-Identifier: BSD-3-Clause
-
-// Package pidowner handles lookups from process ID to its owning user.
-package pidowner
-
-import (
- "errors"
- "runtime"
-)
-
-var ErrNotImplemented = errors.New("not implemented for GOOS=" + runtime.GOOS)
-
-var ErrProcessNotFound = errors.New("process not found")
-
-// OwnerOfPID returns the user ID that owns the given process ID.
-//
-// The returned user ID is suitable to passing to os/user.LookupId.
-//
-// The returned error will be ErrNotImplemented for operating systems where
-// this isn't supported.
-func OwnerOfPID(pid int) (userID string, err error) {
- return ownerOfPID(pid)
-}
diff --git a/util/pidowner/pidowner_linux.go b/util/pidowner/pidowner_linux.go
deleted file mode 100644
index f3f5cd97d..000000000
--- a/util/pidowner/pidowner_linux.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) Tailscale Inc & contributors
-// SPDX-License-Identifier: BSD-3-Clause
-
-package pidowner
-
-import (
- "fmt"
- "os"
- "strings"
-
- "tailscale.com/util/lineiter"
-)
-
-func ownerOfPID(pid int) (userID string, err error) {
- file := fmt.Sprintf("/proc/%d/status", pid)
- for lr := range lineiter.File(file) {
- line, err := lr.Value()
- if err != nil {
- if os.IsNotExist(err) {
- return "", ErrProcessNotFound
- }
- return "", err
- }
- if len(line) < 4 || string(line[:4]) != "Uid:" {
- continue
- }
- f := strings.Fields(string(line))
- if len(f) >= 2 {
- userID = f[1] // real userid
- }
- }
- if userID == "" {
- return "", fmt.Errorf("missing Uid line in %s", file)
- }
- return userID, nil
-}
diff --git a/util/pidowner/pidowner_noimpl.go b/util/pidowner/pidowner_noimpl.go
deleted file mode 100644
index 4bc665d61..000000000
--- a/util/pidowner/pidowner_noimpl.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) Tailscale Inc & contributors
-// SPDX-License-Identifier: BSD-3-Clause
-
-//go:build !windows && !linux
-
-package pidowner
-
-func ownerOfPID(pid int) (userID string, err error) { return "", ErrNotImplemented }
diff --git a/util/pidowner/pidowner_test.go b/util/pidowner/pidowner_test.go
deleted file mode 100644
index 2774a8ab0..000000000
--- a/util/pidowner/pidowner_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) Tailscale Inc & contributors
-// SPDX-License-Identifier: BSD-3-Clause
-
-package pidowner
-
-import (
- "math/rand"
- "os"
- "os/user"
- "testing"
-)
-
-func TestOwnerOfPID(t *testing.T) {
- id, err := OwnerOfPID(os.Getpid())
- if err == ErrNotImplemented {
- t.Skip(err)
- }
- if err != nil {
- t.Fatal(err)
- }
- t.Logf("id=%q", id)
-
- u, err := user.LookupId(id)
- if err != nil {
- t.Fatalf("LookupId: %v", err)
- }
- t.Logf("Got: %+v", u)
-}
-
-// validate that OS implementation returns ErrProcessNotFound.
-func TestNotFoundError(t *testing.T) {
- // Try a bunch of times to stumble upon a pid that doesn't exist...
- const tries = 50
- for range tries {
- _, err := OwnerOfPID(rand.Intn(1e9))
- if err == ErrNotImplemented {
- t.Skip(err)
- }
- if err == nil {
- // We got unlucky and this pid existed. Try again.
- continue
- }
- if err == ErrProcessNotFound {
- // Pass.
- return
- }
- t.Fatalf("Error is not ErrProcessNotFound: %T %v", err, err)
- }
- t.Errorf("after %d tries, couldn't find a process that didn't exist", tries)
-}
diff --git a/util/pidowner/pidowner_windows.go b/util/pidowner/pidowner_windows.go
deleted file mode 100644
index 8edd7698d..000000000
--- a/util/pidowner/pidowner_windows.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) Tailscale Inc & contributors
-// SPDX-License-Identifier: BSD-3-Clause
-
-package pidowner
-
-import (
- "fmt"
- "syscall"
-
- "golang.org/x/sys/windows"
-)
-
-func ownerOfPID(pid int) (userID string, err error) {
- procHnd, err := windows.OpenProcess(windows.PROCESS_QUERY_INFORMATION, false, uint32(pid))
- if err == syscall.Errno(0x57) { // invalid parameter, for PIDs that don't exist
- return "", ErrProcessNotFound
- }
- if err != nil {
- return "", fmt.Errorf("OpenProcess: %T %#v", err, err)
- }
- defer windows.CloseHandle(procHnd)
-
- var tok windows.Token
- if err := windows.OpenProcessToken(procHnd, windows.TOKEN_QUERY, &tok); err != nil {
- return "", fmt.Errorf("OpenProcessToken: %w", err)
- }
-
- tokUser, err := tok.GetTokenUser()
- if err != nil {
- return "", fmt.Errorf("GetTokenUser: %w", err)
- }
-
- sid := tokUser.User.Sid
- return sid.String(), nil
-}