1" Vim syntax file
2" Language:	BIND configuration file
3" Maintainer:	Nick Hibma <nick@van-laarhoven.org>
4" Last Change:	2019 Oct 08
5" Filenames:	named.conf, rndc.conf
6" Location:	http://www.van-laarhoven.org/vim/syntax/named.vim
7"
8" Previously maintained by glory hump <rnd@web-drive.ru> and updated by Marcin
9" Dalecki.
10"
11" This file could do with a lot of improvements, so comments are welcome.
12" Please submit the named.conf (segment) with any comments.
13"
14" quit when a syntax file was already loaded
15if exists("b:current_syntax")
16  finish
17endif
18
19syn case match
20
21setlocal iskeyword=.,-,48-58,A-Z,a-z,_
22
23syn sync match namedSync grouphere NONE "^(zone|controls|acl|key)"
24
25let s:save_cpo = &cpo
26set cpo-=C
27
28" BIND configuration file
29
30syn match	namedComment	"//.*"
31syn match	namedComment	"#.*"
32syn region	namedComment	start="/\*" end="\*/"
33syn region	namedString	start=/"/ end=/"/ contained
34" --- omitted trailing semicolon
35syn match	namedError	/[^;{#]$/
36
37" --- top-level keywords
38
39syn keyword	namedInclude	include nextgroup=namedString skipwhite
40syn keyword	namedKeyword	acl key nextgroup=namedIntIdent skipwhite
41syn keyword	namedKeyword	server nextgroup=namedIdentifier skipwhite
42syn keyword	namedKeyword	controls nextgroup=namedSection skipwhite
43syn keyword	namedKeyword	trusted-keys nextgroup=namedIntSection skipwhite
44syn keyword	namedKeyword	logging nextgroup=namedLogSection skipwhite
45syn keyword	namedKeyword	options nextgroup=namedOptSection skipwhite
46syn keyword	namedKeyword	zone nextgroup=namedZoneString skipwhite
47
48" --- Identifier: name of following { ... } Section
49syn match	namedIdentifier	contained /\k\+/ nextgroup=namedSection skipwhite
50" --- IntIdent: name of following IntSection
51syn match	namedIntIdent	contained /"\=\k\+"\=/ nextgroup=namedIntSection skipwhite
52
53" --- Section: { ... } clause
54syn region	namedSection	contained start=+{+ end=+};+ contains=namedSection,namedIntKeyword
55
56" --- IntSection: section that does not contain other sections
57syn region	namedIntSection	contained start=+{+ end=+}+ contains=namedIntKeyword,namedError,namedComment
58
59" --- IntKeyword: keywords contained within `{ ... }' sections only
60" + these keywords are contained within `key' and `acl' sections
61syn keyword	namedIntKeyword	contained key algorithm
62syn keyword	namedIntKeyword	contained secret nextgroup=namedString skipwhite
63
64" + these keywords are contained within `server' section only
65syn keyword	namedIntKeyword	contained bogus support-ixfr nextgroup=namedBool,namedNotBool skipwhite
66syn keyword	namedIntKeyword	contained transfers nextgroup=namedNumber,namedNotNumber skipwhite
67syn keyword	namedIntKeyword	contained transfer-format
68syn keyword	namedIntKeyword	contained keys nextgroup=namedIntSection skipwhite
69
70" + these keywords are contained within `controls' section only
71syn keyword	namedIntKeyword	contained inet nextgroup=namedIPaddr,namedIPerror skipwhite
72syn keyword	namedIntKeyword	contained unix nextgroup=namedString skipwhite
73syn keyword	namedIntKeyword	contained port perm owner group nextgroup=namedNumber,namedNotNumber skipwhite
74syn keyword	namedIntKeyword	contained allow nextgroup=namedIntSection skipwhite
75
76" + these keywords are contained within `update-policy' section only
77syn keyword	namedIntKeyword	contained grant nextgroup=namedString skipwhite
78syn keyword	namedIntKeyword	contained name self subdomain wildcard nextgroup=namedString skipwhite
79syn keyword	namedIntKeyword	TXT A PTR NS SOA A6 CNAME MX ANY skipwhite
80
81" --- options
82syn region	namedOptSection	contained start=+{+ end=+};+ contains=namedOption,namedCNOption,namedComment,namedParenError
83
84syn keyword	namedOption	contained version directory
85\		nextgroup=namedString skipwhite
86syn keyword	namedOption	contained named-xfer dump-file pid-file
87\		nextgroup=namedString skipwhite
88syn keyword	namedOption	contained mem-statistics-file statistics-file
89\		nextgroup=namedString skipwhite
90syn keyword	namedOption	contained auth-nxdomain deallocate-on-exit
91\		nextgroup=namedBool,namedNotBool skipwhite
92syn keyword	namedOption	contained dialup fake-iquery fetch-glue
93\		nextgroup=namedBool,namedNotBool skipwhite
94syn keyword	namedOption	contained has-old-clients host-statistics
95\		nextgroup=namedBool,namedNotBool skipwhite
96syn keyword	namedOption	contained maintain-ixfr-base multiple-cnames
97\		nextgroup=namedBool,namedNotBool skipwhite
98syn keyword	namedOption	contained notify recursion rfc2308-type1
99\		nextgroup=namedBool,namedNotBool skipwhite
100syn keyword	namedOption	contained use-id-pool treat-cr-as-space
101\		nextgroup=namedBool,namedNotBool skipwhite
102syn keyword	namedOption	contained also-notify forwarders
103\		nextgroup=namedIPlist skipwhite
104syn keyword	namedOption	contained forward check-names
105syn keyword	namedOption	contained allow-query allow-transfer allow-recursion
106\		nextgroup=namedAML skipwhite
107syn keyword	namedOption	contained blackhole listen-on
108\		nextgroup=namedIntSection skipwhite
109syn keyword	namedOption	contained lame-ttl max-transfer-time-in
110\		nextgroup=namedNumber,namedNotNumber skipwhite
111syn keyword	namedOption	contained max-ncache-ttl min-roots
112\		nextgroup=namedNumber,namedNotNumber skipwhite
113syn keyword	namedOption	contained serial-queries transfers-in
114\		nextgroup=namedNumber,namedNotNumber skipwhite
115syn keyword	namedOption	contained transfers-out transfers-per-ns
116syn keyword	namedOption	contained transfer-format
117syn keyword	namedOption	contained transfer-source
118\		nextgroup=namedIPaddr,namedIPerror skipwhite
119syn keyword	namedOption	contained max-ixfr-log-size
120\		nextgroup=namedNumber,namedNotNumber skipwhite
121syn keyword	namedOption	contained coresize datasize files stacksize
122syn keyword	namedOption	contained cleaning-interval interface-interval statistics-interval heartbeat-interval
123\		nextgroup=namedNumber,namedNotNumber skipwhite
124syn keyword	namedOption	contained topology sortlist rrset-order
125\		nextgroup=namedIntSection skipwhite
126
127syn match	namedOption	contained /\<query-source\s\+.*;/he=s+12 contains=namedQSKeywords
128syn keyword	namedQSKeywords	contained address port
129syn match	namedCNOption	contained /\<check-names\s\+.*;/he=s+11 contains=namedCNKeywords
130syn keyword	namedCNKeywords	contained fail warn ignore master slave response
131
132" --- logging facilities
133syn region	namedLogSection	contained start=+{+ end=+};+ contains=namedLogOption
134syn keyword	namedLogOption	contained channel nextgroup=namedIntIdent skipwhite
135syn keyword	namedLogOption	contained category nextgroup=namedIntIdent skipwhite
136syn keyword	namedIntKeyword	contained syslog null versions size severity
137syn keyword	namedIntKeyword	contained file nextgroup=namedString skipwhite
138syn keyword	namedIntKeyword	contained print-category print-severity print-time nextgroup=namedBool,namedNotBool skipwhite
139
140" --- zone section
141syn region	namedZoneString	contained oneline start=+"+ end=+"+ skipwhite
142\		contains=namedDomain,namedIllegalDom
143\		nextgroup=namedZoneClass,namedZoneSection
144syn keyword	namedZoneClass	contained in hs hesiod chaos
145\		IN HS HESIOD CHAOS
146\		nextgroup=namedZoneSection skipwhite
147
148syn region	namedZoneSection	contained start=+{+ end=+};+ contains=namedZoneOpt,namedCNOption,namedComment,namedMasters,namedParenError
149syn keyword	namedZoneOpt	contained file ixfr-base
150\		nextgroup=namedString skipwhite
151syn keyword	namedZoneOpt	contained notify dialup
152\		nextgroup=namedBool,namedNotBool skipwhite
153syn keyword	namedZoneOpt	contained pubkey forward
154syn keyword	namedZoneOpt	contained max-transfer-time-in
155\		nextgroup=namedNumber,namedNotNumber skipwhite
156syn keyword	namedZoneOpt	contained type nextgroup=namedZoneType skipwhite
157syn keyword	namedZoneType	contained master slave stub forward hint
158
159syn keyword	namedZoneOpt	contained masters forwarders
160\		nextgroup=namedIPlist skipwhite
161syn region	namedIPlist	contained start=+{+ end=+};+ contains=namedIPaddr,namedIPerror,namedParenError,namedComment
162syn keyword	namedZoneOpt	contained allow-update allow-query allow-transfer
163\		nextgroup=namedAML skipwhite
164syn keyword	namedZoneOpt	contained update-policy
165\		nextgroup=namedIntSection skipwhite
166
167" --- boolean parameter
168syn match	namedNotBool	contained "[^ 	;]\+"
169syn keyword	namedBool	contained yes no true false 1 0
170
171" --- number parameter
172syn match	namedNotNumber	contained "[^ 	0-9;]\+"
173syn match	namedNumber	contained "\d\+"
174
175" --- address match list
176syn region	namedAML	contained start=+{+ end=+};+ contains=namedParenError,namedComment,namedString
177
178" --- IPs & Domains
179syn match	namedIPaddr	contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{3};/he=e-1
180syn match	namedDomain	contained /\<[0-9A-Za-z][-0-9A-Za-z.]\+\>/ nextgroup=namedSpareDot
181syn match	namedDomain	contained /"\."/ms=s+1,me=e-1
182syn match	namedSpareDot	contained /\./
183
184" --- syntax errors
185syn match	namedIllegalDom	contained /"\S*[^-A-Za-z0-9.[:space:]]\S*"/ms=s+1,me=e-1
186syn match	namedIPerror	contained /\<\S*[^0-9.[:space:];]\S*/
187syn match	namedEParenError	contained +{+
188syn match	namedParenError	+}\([^;]\|$\)+
189
190" Define the default highlighting.
191" Only when an item doesn't have highlighting yet
192
193hi def link namedComment	Comment
194hi def link namedInclude	Include
195hi def link namedKeyword	Keyword
196hi def link namedIntKeyword	Keyword
197hi def link namedIdentifier	Identifier
198hi def link namedIntIdent	Identifier
199
200hi def link namedString	String
201hi def link namedBool	Type
202hi def link namedNotBool	Error
203hi def link namedNumber	Number
204hi def link namedNotNumber	Error
205
206hi def link namedOption	namedKeyword
207hi def link namedLogOption	namedKeyword
208hi def link namedCNOption	namedKeyword
209hi def link namedQSKeywords	Type
210hi def link namedCNKeywords	Type
211hi def link namedLogCategory	Type
212hi def link namedIPaddr	Number
213hi def link namedDomain	Identifier
214hi def link namedZoneOpt	namedKeyword
215hi def link namedZoneType	Type
216hi def link namedParenError	Error
217hi def link namedEParenError	Error
218hi def link namedIllegalDom	Error
219hi def link namedIPerror	Error
220hi def link namedSpareDot	Error
221hi def link namedError	Error
222
223
224let &cpo = s:save_cpo
225unlet s:save_cpo
226
227let b:current_syntax = "named"
228
229" vim: ts=17
230