From 6dd65a2df229cebf00316b876c465106f3109965 Mon Sep 17 00:00:00 2001 From: Pierre-Alain TORET Date: Tue, 19 Mar 2019 22:10:58 +0100 Subject: [PATCH] Add SudoBin and SudoFlags --- cmd.go | 2 ++ config.go | 6 ++++++ doc/yay.8 | 13 +++++++++++++ exec.go | 9 +++++++-- parser.go | 8 ++++++++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/cmd.go b/cmd.go index c80047b0..52a7f360 100644 --- a/cmd.go +++ b/cmd.go @@ -111,6 +111,8 @@ Permanent configuration options: --batchinstall Build multiple AUR packages then install them together --nobatchinstall Build and install each AUR package one by one + --sudo sudo command to use + --sudoflags Pass arguments to sudo --sudoloop Loop sudo calls in the background to avoid timeout --nosudoloop Do not loop sudo calls in the background diff --git a/config.go b/config.go index 2efab153..8ff49fc4 100644 --- a/config.go +++ b/config.go @@ -61,6 +61,8 @@ type Configuration struct { SearchBy string `json:"searchby"` GitFlags string `json:"gitflags"` RemoveMake string `json:"removemake"` + SudoBin string `json:"sudobin"` + SudoFlags string `json:"sudoflags"` RequestSplitN int `json:"requestsplitn"` SearchMode int `json:"-"` SortMode int `json:"sortmode"` @@ -166,6 +168,8 @@ func defaultSettings() *Configuration { TarBin: "bsdtar", GitBin: "git", GpgBin: "gpg", + SudoBin: "sudo", + SudoFlags: "", TimeUpdate: false, RequestSplitN: 150, ReDownload: "no", @@ -211,6 +215,8 @@ func (config *Configuration) expandEnv() { config.TarBin = os.ExpandEnv(config.TarBin) config.GitBin = os.ExpandEnv(config.GitBin) config.GpgBin = os.ExpandEnv(config.GpgBin) + config.SudoBin = os.ExpandEnv(config.SudoBin) + config.SudoFlags = os.ExpandEnv(config.SudoFlags) config.ReDownload = os.ExpandEnv(config.ReDownload) config.ReBuild = os.ExpandEnv(config.ReBuild) config.AnswerClean = os.ExpandEnv(config.AnswerClean) diff --git a/doc/yay.8 b/doc/yay.8 index 43ecde75..76c6de5d 100644 --- a/doc/yay.8 +++ b/doc/yay.8 @@ -502,6 +502,19 @@ gpg is called by Yay. Arguments are split on whitespace before being passed to gpg. Multiple arguments may be passed by supplying a space separated list that is quoted by the shell. +.TP +.B \-\-sudo +The command to use for \fBsudo\fR calls. This can be a command in +\fBPATH\fR or an absolute path to the file. +The sudoloop is not guarantee to work with a custom \fBsudo\fR command. + +.TP +.B \-\-sudoflags +Passes arguments to sudo. These flags get passed to every instance where +sudo is called by Yay. Arguments are split on whitespace before being +passed to sudo. Multiple arguments may be passed by supplying a space +separated list that is quoted by the shell. + .TP .B \-\-sudoloop Loop sudo calls in the background to prevent sudo from timing out during long diff --git a/exec.go b/exec.go index f0364dfc..2200607f 100644 --- a/exec.go +++ b/exec.go @@ -45,7 +45,9 @@ func sudoLoop() { func updateSudo() { for { - err := show(exec.Command("sudo", "-v")) + mSudoFlags := strings.Fields(config.SudoFlags) + mSudoFlags = append([]string{"-v"}, mSudoFlags...) + err := show(exec.Command(config.SudoBin, mSudoFlags...)) if err != nil { fmt.Fprintln(os.Stderr, err) } else { @@ -76,8 +78,11 @@ func waitLock() { func passToPacman(args *arguments) *exec.Cmd { argArr := make([]string, 0) + mSudoFlags := strings.Fields(config.SudoFlags) + if args.needRoot() { - argArr = append(argArr, "sudo") + argArr = append(argArr, config.SudoBin) + argArr = append(argArr, mSudoFlags...) } argArr = append(argArr, config.PacmanBin) diff --git a/parser.go b/parser.go index d9962fb0..2631c89c 100644 --- a/parser.go +++ b/parser.go @@ -421,6 +421,8 @@ func isArg(arg string) bool { case "tar": case "git": case "gpg": + case "sudo": + case "sudoflags": case "requestsplitn": case "sudoloop": case "nosudoloop": @@ -558,6 +560,10 @@ func handleConfig(option, value string) bool { config.GitBin = value case "gpg": config.GpgBin = value + case "sudo": + config.SudoBin = value + case "sudoflags": + config.SudoFlags = value case "requestsplitn": n, err := strconv.Atoi(value) if err == nil && n > 0 { @@ -692,6 +698,8 @@ func hasParam(arg string) bool { case "tar": case "git": case "gpg": + case "sudo": + case "sudoflags": case "requestsplitn": case "answerclean": case "answerdiff":