about summary refs log tree commit diff
path: root/Completion/Unix/Command/_doas
diff options
context:
space:
mode:
authordana <dana@dana.is>2020-03-11 16:26:41 -0500
committerdana <dana@dana.is>2020-03-11 16:26:41 -0500
commit359e0dae2bded75eebf7fe3b3cf919e1dd44c333 (patch)
treee177397b30d61ffbb61658c894e7d5a4c821ee72 /Completion/Unix/Command/_doas
parent0d7f888945bd487d6458807684883b22dc3b31b8 (diff)
downloadzsh-359e0dae2bded75eebf7fe3b3cf919e1dd44c333.tar.gz
zsh-359e0dae2bded75eebf7fe3b3cf919e1dd44c333.tar.xz
zsh-359e0dae2bded75eebf7fe3b3cf919e1dd44c333.zip
45424: completion: Add **/sbin to PATH when completing commands like sudo
* Update _command_names to add **/sbin to PATH when not otherwise overridden
  and _comp_priv_prefix is set. This ensures that, on systems where
  unprivileged users don't have **/sbin in their PATHs, we can still complete
  those commands when they try to run them with e.g. sudo

* Update functions for privilege-gaining commands to use the aforementioned
  mechanism

* Fix some other minor issues in _pfexec and _doas

Changes from the posted diff:

* Fix a minor redundancy in _doas

* Add _c_p_p=( '' ) hack to _su
Diffstat (limited to 'Completion/Unix/Command/_doas')
-rw-r--r--Completion/Unix/Command/_doas21
1 files changed, 11 insertions, 10 deletions
diff --git a/Completion/Unix/Command/_doas b/Completion/Unix/Command/_doas
index 94395557c..3ef036a88 100644
--- a/Completion/Unix/Command/_doas
+++ b/Completion/Unix/Command/_doas
@@ -1,7 +1,8 @@
 #compdef doas
 
-local environ e cmd
+local environ e cmd cpp
 local -a _comp_priv_prefix
+local -A opt_args
 
 zstyle -a ":completion:${curcontext}:" environ environ
 
@@ -10,13 +11,13 @@ do local -x "$e"
 done
 
 cmd="$words[1]"
+cpp='_comp_priv_prefix=( $cmd -n ${(kv)opt_args[(I)-u]} )'
 _arguments -s -S -A '-*' : \
-  - optL \
-  '-L[clear any persisted authorizations]' \
-  - default \
-  '-a+[specify authentication style]:authentication style' \
-  '(-n -s)-C+[check config file and report on command matching]:config:_files' \
-  '(-C)-n[non-interactive: fail rather than prompt for a password]' \
-  '(-C *)-s[run a shell]' \
-  '-u+[run command as specified user]:user:_users' \
-  '*::arguments:{ _comp_priv_prefix=( $cmd -n ${(kv)opt_args[-u]} ) ; _normal }'
+  '(: * -)-L[clear any persisted authorizations]' \
+  '(-L)-a+[specify authentication style]:authentication style' \
+  '(-L -n -s)-C+[check config file and report on command matching]:config:_files' \
+  '(-C -L)-n[non-interactive: fail rather than prompt for a password]' \
+  '(-C -L *)-s[run a shell]' \
+  '(-L)-u+[run command as specified user]: :_users' \
+  "(-)1: :{ $cpp; _command_names -e }" \
+  "*:: :{ $cpp; _normal }"