1 /*------------------------------------------------------------------------------
2  *
3  * Copyright (c) 2011-2021, EURid vzw. All rights reserved.
4  * The YADIFA TM software product is provided under the BSD 3-clause license:
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  *        * Redistributions of source code must retain the above copyright
11  *          notice, this list of conditions and the following disclaimer.
12  *        * Redistributions in binary form must reproduce the above copyright
13  *          notice, this list of conditions and the following disclaimer in the
14  *          documentation and/or other materials provided with the distribution.
15  *        * Neither the name of EURid nor the names of its contributors may be
16  *          used to endorse or promote products derived from this software
17  *          without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  *
31  *------------------------------------------------------------------------------
32  *
33  */
34 
35 /** @defgroup
36  *  @ingroup dnscore
37  *  @brief
38  *
39  *
40  *
41  * @{
42  *
43  *----------------------------------------------------------------------------*/
44 
45 #define HAS_DYNAMIC_PROVISIONING 1
46 
47 #if HAS_DYNAMIC_PROVISIONING
48 #define     TYPE_ZONE_TYPE_NAME             "ZONETYPE"
49 #define     TYPE_ZONE_FILE_NAME             "ZONEFILE"
50 #define     TYPE_ZONE_NOTIFY_NAME           "ZONENOTIFY"
51 #define     TYPE_ZONE_MASTER_NAME           "MASTER"
52 #define     TYPE_ZONE_SLAVES_NAME           "SLAVES"
53 #define     TYPE_ZONE_DNSSEC_NAME           "DNSSEC"
54 #define     TYPE_ZONE_COMMENT               "COMMENT"
55 #define     TYPE_SIGINTV_NAME               "SIGINTV"
56 #define     TYPE_SIGREGN_NAME               "SIGREGN"
57 #define     TYPE_SIGJITR_NAME               "SIGJITR"
58 #define     TYPE_NTFRC_NAME                 "NTFRC"
59 #define     TYPE_NTFRP_NAME                 "NTFRP"
60 #define     TYPE_NTFRPI_NAME                "NTFRPI"
61 #define     TYPE_NTFAUTO_NAME               "NTFAUTO"
62 
63 #define     OPCODE_CTRL                     (9<<OPCODE_SHIFT)
64 
65 /*
66  ACL is a chain of accept/reject triggers on IPv4 IPv6 TSIGs (...)
67  valid values are usually any, none, allow ip/mask(4/6), reject ip/mask(4/6), allow tsig
68  reject tsig does not makes sense
69 
70  0 : any      + 80 none
71  1 : v4            !v4
72  2 : v6            !v6
73  3 : tsig          nonsense
74 
75  or
76 
77  [0..7] any none v4 !v4 v6 !v6 tsig
78 
79  It can only be a single record because order is important
80 */
81 
82 #define     TYPE_ZONE_ALLOW_QUERY           "ACLQUERY" // QUERYCL ?
83 // ..
84 
85 #endif
86 
87 // until all code check the two defines ...
88 
89 #define     TYPE_CTRL_SHUTDOWN_NAME         "SHUTDOWN"
90 #define     TYPE_CTRL_ZONERELOAD_NAME       "RELOAD"
91 #define     TYPE_CTRL_LOGREOPEN_NAME        "LOGREOPEN"     /// @todo 20140528 gve -- needs to be removed (twice declared)
92 #define     TYPE_CTRL_SRVQUERYLOG_NAME      "QUERYLOG"
93 #define     TYPE_CTRL_SRVLOGLEVEL_NAME      "LOGLEVEL"
94 
95 
96 #define     TYPE_CTRL_ZONEFREEZE_NAME       "FREEZE"
97 #define     TYPE_CTRL_ZONEUNFREEZE_NAME     "UNFREEZE"
98 #define     TYPE_CTRL_ZONEFREEZEALL_NAME    "FREEZEALL"     // NI
99 #define     TYPE_CTRL_ZONEUNFREEZEALL_NAME  "UNFREEZEALL"   // NI
100 #define     TYPE_CTRL_ZONESYNC_NAME         "SYNC"
101 
102 #define     TYPE_CTRL_SRVLOGREOPEN_NAME     "LOGREOPEN"     /// @todo 20150217 gve -- needs to be removed (twice declared)
103 #define     TYPE_CTRL_SRVCFGRELOAD_NAME     "CFGRELOAD"
104 
105 #define     TYPE_CTRL_ZONENOTIFY_NAME       "NOTIFY"
106 
107 
108 
109 #define     TYPE_CTRL_CFGLOAD_NAME          "CFGLOAD"
110 
111 
112 #define     TYPE_CTRL_ZONECFGRELOAD_NAME     "ZONECFGRELOAD"
113 #define     TYPE_CTRL_ZONECFGRELOADALL_NAME  "ZONECFGRELOADALL"
114 /*
115  * CTRL UPDATE Configuration, Zone
116  */
117 
118 #define     ZT_HINT         0       /**< zone file: hint */
119 #define     ZT_MASTER       1       /**< zone file: master */
120 #define     ZT_SLAVE        2       /**< zone file: slave */
121 #define     ZT_STUB         3       /**< zone file: stub */
122 
123 /*
124 
125     0 1 2 3 4 5 6 7
126    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
127    |                            TYPE                               |    8 bits type
128    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
129 */
130 
131 #define     TYPE_ZONE_TYPE                  NU16(0x2a01)
132 
133 /*
134                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
135     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
136    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
137    /                            PATH                               /    utf-8 text, on windows '/' are converted to '\'
138    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
139 */
140 
141 #define     TYPE_ZONE_FILE                  NU16(0x2a02)
142 
143 #define REMOTE_SERVER_FLAGS_IP_MASK 0x0f
144 #define REMOTE_SERVER_FLAGS_PORT_MASK 0x10
145 #define REMOTE_SERVER_FLAGS_KEY_MASK 0x20
146 
147 /*
148                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
149     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
150    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
151    / IPVER | PORT | KEY |                                          /    4 bits + 1 bit + 1 bit ( 8 bits )
152    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
153    /                            IP                                 /    variable size (4 or 16)
154    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
155    /                           PORT                                /
156    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
157    /                       TSIG KEYNAME                            /    dns formated domain name
158    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
159 
160  * ALSONOTIFY 1.2.3.4#8053 my-key
161  * ALSONOTIFY ::1#8053 my-key
162  *
163  */
164 
165 #define     TYPE_ZONE_NOTIFY           NU16(0x2a03)
166 
167 
168 /*
169                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
170     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
171    +-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
172    / IPVER | PORT | KEY |                                          /    4 bits + 1 bit + 1 bit ( 8 bits )
173    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
174    /                            MASTER                             /
175    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
176    /                           PORT                                /
177    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
178    /                       TSIG KEYNAME                            /    dns formated domain name
179    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
180 */
181 
182 #define     TYPE_ZONE_MASTER                NU16(0x2a04)
183 
184 #define ZD_DNSSEC_NONE         0
185 #define ZD_DNSSEC_NSEC         1
186 #define ZD_DNSSEC_NSEC3        2
187 #define ZD_DNSSEC_NSEC3_OPTOUT 3
188 
189 /*
190                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
191     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
192    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
193    /                       DNSSEC MODE                             /    8 bits
194    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
195 */
196 
197 #define     TYPE_ZONE_DNSSEC                NU16(0x2a05) /* the canonical name of a alias      rfc 1035 */
198 
199 /*
200                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
201     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
202    +-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
203    / IPVER | PORT | KEY |                                          /    4 bits + 1 bit + 1 bit ( 8 bits )
204    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
205    /                            MASTER                             /
206    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
207    /                           PORT                                /
208    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
209    /                       TSIG KEYNAME                            /    dns formated domain name
210    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
211 */
212 
213 #define     TYPE_ZONE_SLAVES                NU16(0x2a06)
214 
215 /*
216                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
217     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
218    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
219    /                             VALUE                             /
220    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
221 */
222 
223 #define     TYPE_SIGINTV                NU16(0x2a07)
224 
225 /*
226                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
227     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
228    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
229    /                             VALUE                             /
230    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
231 */
232 
233 #define     TYPE_SIGREGN                NU16(0x2a08)
234 
235 /*
236                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
237     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
238    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
239    /                             VALUE                             /
240    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
241 */
242 
243 #define     TYPE_SIGJITR                NU16(0x2a09)
244 
245 /*
246                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
247     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
248    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
249    /                             VALUE                             /    notify request count
250    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
251 */
252 
253 #define     TYPE_NTFRC                  NU16(0x2a0a)
254 
255 /*
256                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
257     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
258    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
259    /                             VALUE                             /    notify request period
260    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
261 */
262 
263 #define     TYPE_NTFRP                  NU16(0x2a0b)
264 
265 /*
266                         1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
267     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
268    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
269    /                             VALUE                             /    notify request increment
270    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
271 */
272 
273 #define     TYPE_NTFRPI                 NU16(0x2a0c)
274 
275 /*
276 
277     0 1 2 3 4 5 6 7
278    +-+-+-+-+-+-+-+-+
279    /V|             /
280    +-+-+-+-+-+-+-+-+
281 */
282 
283 #define     TYPE_NTFAUTO                 NU16(0x2a0d)
284 
285 /*
286  * Q: . SRVSHUTDOWN CTRL
287  * C: . SRVSHUTDOWN
288  */
289 
290 #define     TYPE_CTRL_SRVSHUTDOWN        NU16(0x2b01)
291 
292 /*
293  * Q: . SRVLOGREOPEN CTRL
294  * C: . SRVLOGREOPEN
295  */
296 
297 #define     TYPE_CTRL_SRVLOGREOPEN       NU16(0x2b02)
298 
299 /*
300  * Q: . SRVCFGRELOAD CTRL
301  * C: . SRVCFGRELOAD
302  */
303 
304 #define     TYPE_CTRL_SRVCFGRELOAD       NU16(0x2b03)
305 
306 /*
307  * Q: . SRVQUERYLOG CTRL
308  * C: . SRVQUERYLOG on_off
309  */
310 
311 #define     TYPE_CTRL_SRVQUERYLOG        NU16(0x2b04)
312 
313 /*
314  * Q: . SRVLOGLEVEL CTRL
315  * C: . SRVLOGLEVEL level
316  *
317  * level is one byte, values 0->15 (4 higher bits reserved) ... or don't we set a limit ?
318  */
319 
320 #define     TYPE_CTRL_SRVLOGLEVEL        NU16(0x2b05)
321 
322 /*
323  * Q: . ZONEFREEZE CTRL
324  * C: . ZONEFREEZE [fqdn class view]
325  *
326  * if rdata size > 0, rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
327  */
328 
329 #define     TYPE_CTRL_ZONEFREEZE            NU16(0x2b06)
330 
331 /*
332  * Q: . ZONEUNFREEZE CTRL
333  * C: . ZONEUNFREEZE [fqdn class view]
334  *
335  * if rdata size > 0, rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
336  */
337 
338 #define     TYPE_CTRL_ZONEUNFREEZE          NU16(0x2b07)
339 
340 /*
341  * Q: . ZONESYNC CTRL
342  * C: . ZONESYNC clean [fqdn class view]
343  *
344  * clean is one byte, values 0->1 (7 higher bits reserved)
345  * if rdata size > 0, rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
346 */
347 
348 #define     TYPE_CTRL_ZONESYNC              NU16(0x2b08)
349 
350 /*
351  * Q: . ZONENOTIFY CTRL
352  * C: . ZONENOTIFY fqdn [class view]
353  *
354  * rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
355  */
356 
357 #define     TYPE_CTRL_ZONENOTIFY            NU16(0x2b09)
358 
359 /*
360  * Q: . ZONERELOAD CTRL
361  * C: . ZONERELOAD fqdn class view
362  *
363  * rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
364  */
365 
366 #define     TYPE_CTRL_ZONERELOAD            NU16(0x2b0a)
367 
368 /*
369  * Q: . ZONECFGRELOAD CTRL
370  * C: . ZONECFGRELOAD [fqdn [class [view]]]
371  *
372  * rdata is FQDN [2 bytes] [0->n utf8/asciiz? bytes]
373  */
374 
375 #define     TYPE_CTRL_ZONECFGRELOAD         NU16(0x2b0b)
376 #define     TYPE_CTRL_ZONECFGRELOADALL      NU16(0x2b0c)
377 
378 
379 /* DOMAIN NAME = zone */
380 /* RDATASIZE = 0 */
381 
382 #define     TYPE_CTRL_ZONEFREEZEALL         NU16(0x2b0d)
383 
384 /* DOMAIN NAME = zone */
385 /* RDATASIZE = 0 */
386 
387 #define     TYPE_CTRL_ZONEUNFREEZEALL       NU16(0x2b0e)
388 
389 /* DOMAIN NAME = . */
390 /* RDATASIZE = 0 */
391 
392 
393 /**
394  * @}
395  */
396