@@ -2,15 +2,11 @@ package browser
22
33import (
44 "errors"
5- "fmt"
65 "os"
76 "os/exec"
8- "os/user"
97 "path/filepath"
108 "runtime"
11- "strconv"
129 "strings"
13- "syscall"
1410)
1511
1612// Open attempts to open the url in a browser cross-platform.
@@ -94,40 +90,7 @@ func appExists(path string) bool {
9490// dropToSudoUser modifies cmd to run as the SUDO_USER if the current process
9591// is running with uid 0. It also adjusts common environment variables so the
9692// desktop session (DBus/XDG) can be discovered.
97- func dropToSudoUser (cmd * exec.Cmd ) {
98- if runtime .GOOS == "windows" {
99- return
100- }
101- if os .Geteuid () != 0 {
102- return
103- }
104- sudoUser := os .Getenv ("SUDO_USER" )
105- if sudoUser == "" {
106- return
107- }
108- u , err := user .Lookup (sudoUser )
109- if err != nil {
110- return
111- }
112- uid , _ := strconv .Atoi (u .Uid )
113- gid , _ := strconv .Atoi (u .Gid )
114- cmd .SysProcAttr = & syscall.SysProcAttr {Credential : & syscall.Credential {Uid : uint32 (uid ), Gid : uint32 (gid )}}
115-
116- env := os .Environ ()
117- env = setEnv (env , "HOME" , u .HomeDir )
118- env = setEnv (env , "USER" , sudoUser )
119- env = setEnv (env , "LOGNAME" , sudoUser )
120- if runtime .GOOS == "linux" {
121- xdg := fmt .Sprintf ("/run/user/%d" , uid )
122- if st , err := os .Stat (xdg ); err == nil && st .IsDir () {
123- env = setEnv (env , "XDG_RUNTIME_DIR" , xdg )
124- if ! hasEnv (env , "DBUS_SESSION_BUS_ADDRESS" ) {
125- env = append (env , "DBUS_SESSION_BUS_ADDRESS=unix:path=" + filepath .Join (xdg , "bus" ))
126- }
127- }
128- }
129- cmd .Env = env
130- }
93+ // dropToSudoUser is implemented per-OS in drop_*.go.
13194
13295func setEnv (env []string , key , value string ) []string {
13396 prefix := key + "="
@@ -149,4 +112,3 @@ func hasEnv(env []string, key string) bool {
149112 }
150113 return false
151114}
152-
0 commit comments