]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bind9/lib/dns/include/dns/master.h
Update Bind to 9.9.3-P2
[FreeBSD/FreeBSD.git] / contrib / bind9 / lib / dns / include / dns / master.h
1 /*
2  * Copyright (C) 2004-2009, 2011, 2012  Internet Systems Consortium, Inc. ("ISC")
3  * Copyright (C) 1999-2002  Internet Software Consortium.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15  * PERFORMANCE OF THIS SOFTWARE.
16  */
17
18 /* $Id$ */
19
20 #ifndef DNS_MASTER_H
21 #define DNS_MASTER_H 1
22
23 /*! \file dns/master.h */
24
25 /***
26  ***    Imports
27  ***/
28
29 #include <stdio.h>
30
31 #include <isc/lang.h>
32
33 #include <dns/types.h>
34
35 /*
36  * Flags to be passed in the 'options' argument in the functions below.
37  */
38 #define DNS_MASTER_AGETTL       0x00000001      /*%< Age the ttl based on $DATE. */
39 #define DNS_MASTER_MANYERRORS   0x00000002      /*%< Continue processing on errors. */
40 #define DNS_MASTER_NOINCLUDE    0x00000004      /*%< Disallow $INCLUDE directives. */
41 #define DNS_MASTER_ZONE         0x00000008      /*%< Loading a zone master file. */
42 #define DNS_MASTER_HINT         0x00000010      /*%< Loading a hint master file. */
43 #define DNS_MASTER_SLAVE        0x00000020      /*%< Loading a slave master file. */
44 #define DNS_MASTER_CHECKNS      0x00000040      /*%<
45                                                  * Check NS records to see
46                                                  * if they are an address
47                                                  */
48 #define DNS_MASTER_FATALNS      0x00000080      /*%<
49                                                  * Treat DNS_MASTER_CHECKNS
50                                                  * matches as fatal
51                                                  */
52 #define DNS_MASTER_CHECKNAMES   0x00000100
53 #define DNS_MASTER_CHECKNAMESFAIL 0x00000200
54 #define DNS_MASTER_CHECKWILDCARD 0x00000400     /* Check for internal wildcards. */
55 #define DNS_MASTER_CHECKMX      0x00000800
56 #define DNS_MASTER_CHECKMXFAIL  0x00001000
57
58 #define DNS_MASTER_RESIGN       0x00002000
59 #define DNS_MASTER_KEY          0x00004000      /*%< Loading a key zone master file. */
60
61 ISC_LANG_BEGINDECLS
62
63 /*
64  * Structures that implement the "raw" format for master dump.
65  * These are provided for a reference purpose only; in the actual
66  * encoding, we directly read/write each field so that the encoded data
67  * is always "packed", regardless of the hardware architecture.
68  */
69 #define DNS_RAWFORMAT_VERSION 1
70
71 /*
72  * Flags to indicate the status of the data in the raw file header
73  */
74 #define DNS_MASTERRAW_COMPAT            0x01
75 #define DNS_MASTERRAW_SOURCESERIALSET   0x02
76 #define DNS_MASTERRAW_LASTXFRINSET      0x04
77
78 /* Common header */
79 struct dns_masterrawheader {
80         isc_uint32_t            format;         /* must be
81                                                  * dns_masterformat_raw */
82         isc_uint32_t            version;        /* compatibility for future
83                                                  * extensions */
84         isc_uint32_t            dumptime;       /* timestamp on creation
85                                                  * (currently unused) */
86         isc_uint32_t            flags;          /* Flags */
87         isc_uint32_t            sourceserial;   /* Source serial number (used
88                                                  * by inline-signing zones) */
89         isc_uint32_t            lastxfrin;      /* timestamp of last transfer
90                                                  * (used by slave zones) */
91 };
92
93 /* The structure for each RRset */
94 typedef struct {
95         isc_uint32_t            totallen;       /* length of the data for this
96                                                  * RRset, including the
97                                                  * "header" part */
98         dns_rdataclass_t        rdclass;        /* 16-bit class */
99         dns_rdatatype_t         type;           /* 16-bit type */
100         dns_rdatatype_t         covers;         /* same as type */
101         dns_ttl_t               ttl;            /* 32-bit TTL */
102         isc_uint32_t            nrdata;         /* number of RRs in this set */
103         /* followed by encoded owner name, and then rdata */
104 } dns_masterrawrdataset_t;
105
106 /***
107  ***    Function
108  ***/
109
110 isc_result_t
111 dns_master_loadfile(const char *master_file,
112                     dns_name_t *top,
113                     dns_name_t *origin,
114                     dns_rdataclass_t zclass,
115                     unsigned int options,
116                     dns_rdatacallbacks_t *callbacks,
117                     isc_mem_t *mctx);
118
119 isc_result_t
120 dns_master_loadfile2(const char *master_file,
121                      dns_name_t *top,
122                      dns_name_t *origin,
123                      dns_rdataclass_t zclass,
124                      unsigned int options,
125                      dns_rdatacallbacks_t *callbacks,
126                      isc_mem_t *mctx,
127                      dns_masterformat_t format);
128
129 isc_result_t
130 dns_master_loadfile3(const char *master_file,
131                      dns_name_t *top,
132                      dns_name_t *origin,
133                      dns_rdataclass_t zclass,
134                      unsigned int options,
135                      isc_uint32_t resign,
136                      dns_rdatacallbacks_t *callbacks,
137                      isc_mem_t *mctx,
138                      dns_masterformat_t format);
139
140 isc_result_t
141 dns_master_loadstream(FILE *stream,
142                       dns_name_t *top,
143                       dns_name_t *origin,
144                       dns_rdataclass_t zclass,
145                       unsigned int options,
146                       dns_rdatacallbacks_t *callbacks,
147                       isc_mem_t *mctx);
148
149 isc_result_t
150 dns_master_loadbuffer(isc_buffer_t *buffer,
151                       dns_name_t *top,
152                       dns_name_t *origin,
153                       dns_rdataclass_t zclass,
154                       unsigned int options,
155                       dns_rdatacallbacks_t *callbacks,
156                       isc_mem_t *mctx);
157
158 isc_result_t
159 dns_master_loadlexer(isc_lex_t *lex,
160                      dns_name_t *top,
161                      dns_name_t *origin,
162                      dns_rdataclass_t zclass,
163                      unsigned int options,
164                      dns_rdatacallbacks_t *callbacks,
165                      isc_mem_t *mctx);
166
167 isc_result_t
168 dns_master_loadfileinc(const char *master_file,
169                        dns_name_t *top,
170                        dns_name_t *origin,
171                        dns_rdataclass_t zclass,
172                        unsigned int options,
173                        dns_rdatacallbacks_t *callbacks,
174                        isc_task_t *task,
175                        dns_loaddonefunc_t done, void *done_arg,
176                        dns_loadctx_t **ctxp, isc_mem_t *mctx);
177
178 isc_result_t
179 dns_master_loadfileinc2(const char *master_file,
180                         dns_name_t *top,
181                         dns_name_t *origin,
182                         dns_rdataclass_t zclass,
183                         unsigned int options,
184                         dns_rdatacallbacks_t *callbacks,
185                         isc_task_t *task,
186                         dns_loaddonefunc_t done, void *done_arg,
187                         dns_loadctx_t **ctxp, isc_mem_t *mctx,
188                         dns_masterformat_t format);
189
190 isc_result_t
191 dns_master_loadfileinc3(const char *master_file,
192                         dns_name_t *top,
193                         dns_name_t *origin,
194                         dns_rdataclass_t zclass,
195                         unsigned int options,
196                         isc_uint32_t resign,
197                         dns_rdatacallbacks_t *callbacks,
198                         isc_task_t *task,
199                         dns_loaddonefunc_t done, void *done_arg,
200                         dns_loadctx_t **ctxp, isc_mem_t *mctx,
201                         dns_masterformat_t format);
202
203 isc_result_t
204 dns_master_loadstreaminc(FILE *stream,
205                          dns_name_t *top,
206                          dns_name_t *origin,
207                          dns_rdataclass_t zclass,
208                          unsigned int options,
209                          dns_rdatacallbacks_t *callbacks,
210                          isc_task_t *task,
211                          dns_loaddonefunc_t done, void *done_arg,
212                          dns_loadctx_t **ctxp, isc_mem_t *mctx);
213
214 isc_result_t
215 dns_master_loadbufferinc(isc_buffer_t *buffer,
216                          dns_name_t *top,
217                          dns_name_t *origin,
218                          dns_rdataclass_t zclass,
219                          unsigned int options,
220                          dns_rdatacallbacks_t *callbacks,
221                          isc_task_t *task,
222                          dns_loaddonefunc_t done, void *done_arg,
223                          dns_loadctx_t **ctxp, isc_mem_t *mctx);
224
225 isc_result_t
226 dns_master_loadlexerinc(isc_lex_t *lex,
227                         dns_name_t *top,
228                         dns_name_t *origin,
229                         dns_rdataclass_t zclass,
230                         unsigned int options,
231                         dns_rdatacallbacks_t *callbacks,
232                         isc_task_t *task,
233                         dns_loaddonefunc_t done, void *done_arg,
234                         dns_loadctx_t **ctxp, isc_mem_t *mctx);
235
236 /*%<
237  * Loads a RFC1305 master file from a file, stream, buffer, or existing
238  * lexer into rdatasets and then calls 'callbacks->commit' to commit the
239  * rdatasets.  Rdata memory belongs to dns_master_load and will be
240  * reused / released when the callback completes.  dns_load_master will
241  * abort if callbacks->commit returns any value other than ISC_R_SUCCESS.
242  *
243  * If 'DNS_MASTER_AGETTL' is set and the master file contains one or more
244  * $DATE directives, the TTLs of the data will be aged accordingly.
245  *
246  * 'callbacks->commit' is assumed to call 'callbacks->error' or
247  * 'callbacks->warn' to generate any error messages required.
248  *
249  * 'done' is called with 'done_arg' and a result code when the loading
250  * is completed or has failed.  If the initial setup fails 'done' is
251  * not called.
252  *
253  * 'resign' the number of seconds before a RRSIG expires that it should
254  * be re-signed.  0 is used if not provided.
255  *
256  * Requires:
257  *\li   'master_file' points to a valid string.
258  *\li   'lexer' points to a valid lexer.
259  *\li   'top' points to a valid name.
260  *\li   'origin' points to a valid name.
261  *\li   'callbacks->commit' points to a valid function.
262  *\li   'callbacks->error' points to a valid function.
263  *\li   'callbacks->warn' points to a valid function.
264  *\li   'mctx' points to a valid memory context.
265  *\li   'task' and 'done' to be valid.
266  *\li   'lmgr' to be valid.
267  *\li   'ctxp != NULL && ctxp == NULL'.
268  *
269  * Returns:
270  *\li   ISC_R_SUCCESS upon successfully loading the master file.
271  *\li   ISC_R_SEENINCLUDE upon successfully loading the master file with
272  *              a $INCLUDE statement.
273  *\li   ISC_R_NOMEMORY out of memory.
274  *\li   ISC_R_UNEXPECTEDEND expected to be able to read a input token and
275  *              there was not one.
276  *\li   ISC_R_UNEXPECTED
277  *\li   DNS_R_NOOWNER failed to specify a ownername.
278  *\li   DNS_R_NOTTL failed to specify a ttl.
279  *\li   DNS_R_BADCLASS record class did not match zone class.
280  *\li   DNS_R_CONTINUE load still in progress (dns_master_load*inc() only).
281  *\li   Any dns_rdata_fromtext() error code.
282  *\li   Any error code from callbacks->commit().
283  */
284
285 void
286 dns_loadctx_detach(dns_loadctx_t **ctxp);
287 /*%<
288  * Detach from the load context.
289  *
290  * Requires:
291  *\li   '*ctxp' to be valid.
292  *
293  * Ensures:
294  *\li   '*ctxp == NULL'
295  */
296
297 void
298 dns_loadctx_attach(dns_loadctx_t *source, dns_loadctx_t **target);
299 /*%<
300  * Attach to the load context.
301  *
302  * Requires:
303  *\li   'source' to be valid.
304  *\li   'target != NULL && *target == NULL'.
305  */
306
307 void
308 dns_loadctx_cancel(dns_loadctx_t *ctx);
309 /*%<
310  * Cancel loading the zone file associated with this load context.
311  *
312  * Requires:
313  *\li   'ctx' to be valid
314  */
315
316 void
317 dns_master_initrawheader(dns_masterrawheader_t *header);
318 /*%<
319  * Initializes the header for a raw master file, setting all
320  * values to zero.
321  */
322 ISC_LANG_ENDDECLS
323
324 #endif /* DNS_MASTER_H */