mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-06-14 20:18:06 +02:00
87 lines
2.2 KiB
Text
87 lines
2.2 KiB
Text
#compdef ldap
|
|
|
|
local -a commands scopes
|
|
commands=(
|
|
search:'search a directory'
|
|
)
|
|
scopes=(
|
|
base:'base object only'
|
|
one:'one level'
|
|
sub:subtree
|
|
)
|
|
|
|
_ldap_url() {
|
|
local nm=$compstate[nmatches]
|
|
local -a expl protocols suf_proto suf_scope tags
|
|
protocols=(
|
|
ldap:'TCP in plaintext'
|
|
ldaps:'TLS'
|
|
ldap+tls:'TCP and use StartTLS'
|
|
ldapi:'connect to a socket'
|
|
)
|
|
|
|
# [protocol://]host[:port][/basedn[?[attribute,...][?[scope][?[filter]]]]]
|
|
if ! compset -P '*://'; then
|
|
tags=(protocol)
|
|
compset -S ':*' || suf_proto=( -S :// )
|
|
fi
|
|
|
|
if ! compset -P '*/'; then
|
|
if compset -P '*:'; then
|
|
tags=(port)
|
|
compset -S '/*'
|
|
else
|
|
if ! compset -S '://*'; then
|
|
tags+=(host)
|
|
compset -S '[:/]*'
|
|
fi
|
|
fi
|
|
else
|
|
case $PREFIX in
|
|
*\?*\?*\?*) tags=(filter);;
|
|
*\?*\?*) tags=(scope); [[ -suffix \?* ]] || suf_scope=( -qS \? );;
|
|
*\?*) tags=(attribute);;
|
|
*) tags=(basedn);;
|
|
esac
|
|
compset -P '*\?'
|
|
compset -S '\?*'
|
|
fi
|
|
|
|
_tags $tags
|
|
while _tags; do
|
|
_requested protocol && _describe -t protocol protocol protocols $suf_proto
|
|
_requested host && _hosts -S ''
|
|
_requested port expl port
|
|
_requested basedn expl 'base DN'
|
|
_requested attribute expl attribute
|
|
_requested scope && _describe -t scope scope scopes $suf_scope
|
|
_requested filter expl filter
|
|
[[ nm -ne compstate[nmatches] ]] && return 0
|
|
done
|
|
}
|
|
|
|
if (( CURRENT == 2 )); then
|
|
_describe command commands
|
|
else
|
|
shift words; (( CURRENT-- ))
|
|
case $words[1] in
|
|
search)
|
|
_arguments -s -S -A '-*' \
|
|
'-b+[specify base DN]:base DN:' \
|
|
'-c+[specify CA file]:CA file:' \
|
|
'-D+[specify bind DN]:bind DN:' \
|
|
'-H+[specify URL]: :_ldap_url' \
|
|
'-L[output in LDIF]' \
|
|
'-l+[specify time limit or 0 for no limit]:time limit [0]:' \
|
|
'-s+[specify scope]:scope [sub]:(($scopes))' \
|
|
'-v[be verbose]' \
|
|
'-W[prompt for bind secret]' \
|
|
'-w+[specify bind secret]:bind secret:' \
|
|
'-x[use simple authentication]' \
|
|
'-Z[use StartTLS]' \
|
|
'-z+[specify maximum number of results or 0 for no limit]:size limit [0]:' \
|
|
'1: :_ldap_filters' \
|
|
'*: :_ldap_attributes'
|
|
;;
|
|
esac
|
|
fi
|