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