summaryrefslogtreecommitdiffstats
path: root/Completion/Unix/Command
diff options
context:
space:
mode:
authordana <dana@dana.is>2019-01-01 06:49:08 -0600
committerdana <dana@dana.is>2019-01-01 06:49:08 -0600
commit1f8bea22473f5f8f829c604899bd39a896c804f1 (patch)
tree1eb64a267d2a758ecf8943b1926b8b1e259e6b54 /Completion/Unix/Command
parent43962: Fix X04 test module_path (diff)
downloadzsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar.gz
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar.bz2
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar.lz
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar.xz
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.tar.zst
zsh-1f8bea22473f5f8f829c604899bd39a896c804f1.zip
43959: Add completion for strongSwan, &al.
Also update _urls to complete unix:// URIs as for file://
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r--Completion/Unix/Command/_ipsec179
-rw-r--r--Completion/Unix/Command/_swanctl225
2 files changed, 404 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_ipsec b/Completion/Unix/Command/_ipsec
new file mode 100644
index 000000000..631d2bc9a
--- /dev/null
+++ b/Completion/Unix/Command/_ipsec
@@ -0,0 +1,179 @@
+#compdef ipsec strongswan
+
+# Completion for the ipsec script (aka strongswan on some systems) provided by
+# FreeS/WAN, Openswan, Libreswan, and strongSwan. See also strongSwan's swanctl.
+#
+# As with swanctl, elevated privileges are usually required to complete SA names
+# and the like; consider setting the gain-privileges style as follows:
+# zstyle ':completion:*:(ipsec|strongswan)/*' gain-privileges yes
+#
+# @todo We don't complete pool names or virtual IPs
+
+# Complete connection (IKE SA) names and optionally SA/instance names
+# --instances => also complete SA/instance names
+(( $+functions[_ipsec_connections] )) ||
+_ipsec_connections() {
+ local -a instances tmp ipsec_conns ipsec_insts
+
+ zparseopts -D -E -a instances - -instances
+
+ tmp=( ${(f)${"$(
+ _call_program -p ipsec-status ${_ipsec_cmd:-$words[1]} statusall
+ )"#*$'\n'[[:space:]]#[Cc]onnections:[[:space:]]#$'\n'}} )
+ tmp=( ${(@M)tmp:#[[:space:]]#[^[:space:]]##:[[:space:]]##?*} )
+ tmp=( ${(@)${(@)tmp##[[:space:]]##}%%:*} )
+
+ ipsec_conns=( ${(@)tmp%%['[{']<->['}]']} )
+ ipsec_insts=( ${(@M)tmp:#*['[{']<->['}]']} )
+
+ (( $#ipsec_conns )) || {
+ _message -e connections 'connection name'
+ return
+ }
+
+ tmp=( 'connections:connection name:compadd -a - ipsec_conns' )