mirror of
https://github.com/daeuniverse/dae.git
synced 2025-01-05 13:08:57 +07:00
e71c272693
Co-authored-by: Kevin Yu <yqlbu@Bu.edu>
45 lines
808 B
Go
45 lines
808 B
Go
package internal
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func AutoSu() {
|
|
if os.Getuid() == 0 {
|
|
return
|
|
}
|
|
program := filepath.Base(os.Args[0])
|
|
pathSudo, err := exec.LookPath("sudo")
|
|
if err != nil {
|
|
// skip
|
|
return
|
|
}
|
|
// https://github.com/WireGuard/wireguard-tools/blob/71799a8f6d1450b63071a21cad6ed434b348d3d5/src/wg-quick/linux.bash#L85
|
|
p, err := os.StartProcess(pathSudo, append([]string{
|
|
pathSudo,
|
|
"-E",
|
|
"-p",
|
|
fmt.Sprintf("%v must be run as root. Please enter the password for %%u to continue: ", program),
|
|
"--",
|
|
}, os.Args...), &os.ProcAttr{
|
|
Files: []*os.File{
|
|
os.Stdin,
|
|
os.Stdout,
|
|
os.Stderr,
|
|
},
|
|
})
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
stat, err := p.Wait()
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
os.Exit(stat.ExitCode())
|
|
}
|