Skip to content

Commit e5ce915

Browse files
committed
WIP: Support more bind9 utilities
host and nslookup are already supported. But dig is not, similarly with delv and others.
1 parent af8a80d commit e5ce915

File tree

1 file changed

+205
-0
lines changed

1 file changed

+205
-0
lines changed

completions/bind9

Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
# bash completion for nslookup -*- shell-script -*-
2+
# bind9 utilities completion
3+
4+
_comp_cmd_rndc__list_commands()
5+
{
6+
rndc 2>&1 | awk '/^ / {print $1}' | sort -u
7+
}
8+
9+
_comp_cmd_rndc__list_parameters()
10+
{
11+
local SUBCMD=$1
12+
rndc 2>&1 | awk "/^ ${SUBCMD} / { print \$2 }"
13+
if [[ $cur == @* ]]; then
14+
_comp_compgen_known_hosts -- "$cur"
15+
return
16+
fi
17+
18+
}
19+
20+
# TODO: not used yet, useful for dnssec-signzone etc.
21+
_comp_cmd_named_checkconf__list_zones()
22+
{
23+
named-checkconf -l | awk '{print $1}'
24+
}
25+
26+
# TODO: named-rrchecker provides -T -C listings of supported query types.
27+
# should replace _comp_cmd_nslookup__queryclass, _comp_cmd_nslookup__querytype
28+
# when command is present.
29+
30+
_comp_cmd_rndc()
31+
{
32+
local cur prev words cword comp_args
33+
_comp_initialize -n = -- "$@" || return
34+
35+
case $prev in
36+
-c|-k)
37+
_comp_compgen -a filedir
38+
return
39+
;;
40+
esac
41+
42+
local REPLY
43+
_comp_count_args
44+
if [[ $cur == -* ]]; then
45+
_comp_compgen_usage
46+
return
47+
fi
48+
if ((REPLY == 1)); then
49+
_comp_compgen -- -W "$(_comp_cmd_rndc__list_commands)"
50+
fi
51+
if ((REPLY == 2)); then
52+
_comp_compgen -- -W "$(_comp_cmd_rndc__list_parameters $prev)"
53+
fi
54+
} && complete -F _comp_cmd_rndc rndc
55+
56+
_comp_cmd_dig__list_plusopts()
57+
{
58+
local CMD=${1:-dig} # delv and mdig has similar style options
59+
$CMD -h 2>&1 | awk '/^\s+\+\[no\]/ { sub("+\\[no\\]", "", $1); sub("=##+$", "=", $1); sub("\\[=##+\\]", "", $1); print "+"$1, "+no"$1} /^\s+\+[^[]/ {sub("=##+", "=", $1); print $1}'
60+
}
61+
62+
_comp_cmd_dig()
63+
{
64+
local cur prev words cword comp_args
65+
_comp_initialize -n = -- "$@" || return
66+
67+
case $prev in
68+
-c)
69+
_comp_cmd_nslookup__queryclass
70+
return
71+
;;
72+
-t)
73+
_comp_cmd_nslookup__querytype
74+
return
75+
;;
76+
-q)
77+
_comp_compgen_known_hosts -- "$cur"
78+
return
79+
;;
80+
-k|-f)
81+
_comp_compgen -a filedir
82+
return
83+
;;
84+
-x|-b)
85+
_comp_compgen_ip_addresses -- "$cur"
86+
return
87+
;;
88+
esac
89+
90+
if [[ $cur == @* ]]; then
91+
_comp_compgen_known_hosts -- "$cur"
92+
return
93+
fi
94+
if [[ $cur == -* ]]; then
95+
_comp_compgen_usage
96+
return
97+
fi
98+
if [[ $cur == +* ]]; then
99+
_comp_compgen -- -W "$(_comp_cmd_dig__list_plusopts dig)"
100+
[[ ${COMPREPLY-} == *= ]] && compopt -o nospace
101+
102+
fi
103+
104+
# TODO: dig is tricky. It can accept hostname, queryclass or querytype without any parameter.
105+
# Not sure how to autocomplete all of them.
106+
_comp_compgen_known_hosts -- "$cur"
107+
} && complete -F _comp_cmd_dig dig
108+
109+
_comp_cmd_mdig()
110+
{
111+
local cur prev words cword comp_args
112+
_comp_initialize -n = -- "$@" || return
113+
114+
case $prev in
115+
-c)
116+
_comp_cmd_nslookup__queryclass
117+
return
118+
;;
119+
-t)
120+
_comp_cmd_nslookup__querytype
121+
return
122+
;;
123+
-q)
124+
_comp_compgen_known_hosts -- "$cur"
125+
return
126+
;;
127+
-f)
128+
_comp_compgen -a filedir
129+
return
130+
;;
131+
-x|-b)
132+
_comp_compgen_ip_addresses -- "$cur"
133+
return
134+
;;
135+
esac
136+
137+
if [[ $cur == -* ]]; then
138+
_comp_compgen_usage
139+
return
140+
fi
141+
if [[ $cur == @* ]]; then
142+
_comp_compgen_known_hosts -- "$cur"
143+
return
144+
fi
145+
146+
if [[ $cur == +* ]]; then
147+
_comp_compgen -- -W "$(_comp_cmd_dig__list_plusopts mdig)"
148+
[[ ${COMPREPLY-} == *= ]] && compopt -o nospace
149+
150+
fi
151+
152+
# TODO: dig is tricky. It can accept hostname, queryclass or querytype without any parameter.
153+
# Not sure how to autocomplete all of them.
154+
_comp_compgen_known_hosts -- "$cur"
155+
} && complete -F _comp_cmd_mdig mdig
156+
157+
_comp_cmd_delv()
158+
{
159+
local cur prev words cword comp_args
160+
_comp_initialize -n = -- "$@" || return
161+
162+
case $prev in
163+
-c)
164+
_comp_cmd_nslookup__queryclass
165+
return
166+
;;
167+
-t)
168+
_comp_cmd_nslookup__querytype
169+
return
170+
;;
171+
-q)
172+
_comp_compgen_known_hosts -- "$cur"
173+
return
174+
;;
175+
-a)
176+
_comp_compgen -a filedir
177+
return
178+
;;
179+
-x|-b)
180+
_comp_compgen_ip_addresses -- "$cur"
181+
return
182+
;;
183+
esac
184+
185+
if [[ $cur == -* ]]; then
186+
_comp_compgen_usage
187+
return
188+
fi
189+
if [[ $cur == @* ]]; then
190+
_comp_compgen_known_hosts -- "$cur"
191+
return
192+
fi
193+
194+
if [[ $cur == +* ]]; then
195+
_comp_compgen -- -W "$(_comp_cmd_dig__list_plusopts delv)"
196+
[[ ${COMPREPLY-} == *= ]] && compopt -o nospace
197+
198+
fi
199+
200+
# TODO: dig is tricky. It can accept hostname, queryclass or querytype without any parameter.
201+
# Not sure how to autocomplete all of them.
202+
_comp_compgen_known_hosts -- "$cur"
203+
} && complete -F _comp_cmd_delv delv
204+
205+
# ex: filetype=sh

0 commit comments

Comments
 (0)