1 3e0d8fb3 2005-12-27 devnull #define OUdphdrsize Udphdrsize
2 3e0d8fb3 2005-12-27 devnull #define OUdphdr Udphdr
6 3e0d8fb3 2005-12-27 devnull /* RR types */
11 3e0d8fb3 2005-12-27 devnull Tcname= 5,
16 3e0d8fb3 2005-12-27 devnull Tnull= 10,
17 3e0d8fb3 2005-12-27 devnull Twks= 11,
18 3e0d8fb3 2005-12-27 devnull Tptr= 12,
19 3e0d8fb3 2005-12-27 devnull Thinfo= 13,
20 3e0d8fb3 2005-12-27 devnull Tminfo= 14,
22 3e0d8fb3 2005-12-27 devnull Ttxt= 16,
24 3e0d8fb3 2005-12-27 devnull Tsig= 24,
25 3e0d8fb3 2005-12-27 devnull Tkey= 25,
26 3e0d8fb3 2005-12-27 devnull Taaaa= 28,
27 3e0d8fb3 2005-12-27 devnull Tcert= 37,
29 3e0d8fb3 2005-12-27 devnull /* query types (all RR types are also queries) */
30 3e0d8fb3 2005-12-27 devnull Tixfr= 251, /* incremental zone transfer */
31 3e0d8fb3 2005-12-27 devnull Taxfr= 252, /* zone transfer */
32 3e0d8fb3 2005-12-27 devnull Tmailb= 253, /* { Tmb, Tmg, Tmr } */
33 3e0d8fb3 2005-12-27 devnull Tall= 255, /* all records */
35 3e0d8fb3 2005-12-27 devnull /* classes */
36 3e0d8fb3 2005-12-27 devnull Csym= 0, /* internal symbols */
37 3e0d8fb3 2005-12-27 devnull Cin= 1, /* internet */
38 3e0d8fb3 2005-12-27 devnull Ccs, /* CSNET (obsolete) */
39 3e0d8fb3 2005-12-27 devnull Cch, /* Chaos net */
40 3e0d8fb3 2005-12-27 devnull Chs, /* Hesiod (?) */
42 3e0d8fb3 2005-12-27 devnull /* class queries (all class types are also queries) */
43 3e0d8fb3 2005-12-27 devnull Call= 255, /* all classes */
45 3e0d8fb3 2005-12-27 devnull /* opcodes */
46 3e0d8fb3 2005-12-27 devnull Oquery= 0<<11, /* normal query */
47 3e0d8fb3 2005-12-27 devnull Oinverse= 1<<11, /* inverse query */
48 3e0d8fb3 2005-12-27 devnull Ostatus= 2<<11, /* status request */
49 3e0d8fb3 2005-12-27 devnull Onotify= 4<<11, /* notify slaves of updates */
50 3e0d8fb3 2005-12-27 devnull Omask= 0xf<<11, /* mask for opcode */
52 3e0d8fb3 2005-12-27 devnull /* response codes */
54 3e0d8fb3 2005-12-27 devnull Rformat= 1, /* format error */
55 3e0d8fb3 2005-12-27 devnull Rserver= 2, /* server failure (e.g. no answer from something) */
56 3e0d8fb3 2005-12-27 devnull Rname= 3, /* bad name */
57 3e0d8fb3 2005-12-27 devnull Runimplimented= 4, /* unimplemented */
58 3e0d8fb3 2005-12-27 devnull Rrefused= 5, /* we don't like you */
59 3e0d8fb3 2005-12-27 devnull Rmask= 0xf, /* mask for response */
60 3e0d8fb3 2005-12-27 devnull Rtimeout= 0x10, /* timeout sending (for internal use only) */
62 3e0d8fb3 2005-12-27 devnull /* bits in flag word (other than opcode and response) */
63 3e0d8fb3 2005-12-27 devnull Fresp= 1<<15, /* message is a response */
64 3e0d8fb3 2005-12-27 devnull Fauth= 1<<10, /* true if an authoritative response */
65 3e0d8fb3 2005-12-27 devnull Ftrunc= 1<<9, /* truncated message */
66 3e0d8fb3 2005-12-27 devnull Frecurse= 1<<8, /* request recursion */
67 3e0d8fb3 2005-12-27 devnull Fcanrec= 1<<7, /* server can recurse */
69 3e0d8fb3 2005-12-27 devnull Domlen= 256, /* max domain name length (with NULL) */
70 3e0d8fb3 2005-12-27 devnull Labellen= 256, /* max domain label length (with NULL) */
71 3e0d8fb3 2005-12-27 devnull Strlen= 256, /* max string length (with NULL) */
72 3e0d8fb3 2005-12-27 devnull Iplen= 32, /* max ascii ip address length (with NULL) */
74 3e0d8fb3 2005-12-27 devnull /* time to live values (in seconds) */
76 3e0d8fb3 2005-12-27 devnull Hour= 60*Min, /* */
77 3e0d8fb3 2005-12-27 devnull Day= 24*Hour, /* Ta, Tmx */
78 3e0d8fb3 2005-12-27 devnull Week= 7*Day, /* Tsoa, Tns */
79 3e0d8fb3 2005-12-27 devnull Year= 52*Week,
80 3e0d8fb3 2005-12-27 devnull DEFTTL= Day,
82 3e0d8fb3 2005-12-27 devnull /* reserved time (can't be timed out earlier) */
83 3e0d8fb3 2005-12-27 devnull Reserved= 5*Min,
85 3e0d8fb3 2005-12-27 devnull /* packet sizes */
86 3e0d8fb3 2005-12-27 devnull Maxudp= 512, /* maximum bytes per udp message */
87 3e0d8fb3 2005-12-27 devnull Maxudpin= 2048, /* maximum bytes per udp message */
89 3e0d8fb3 2005-12-27 devnull /* length of domain name hash table */
90 3e0d8fb3 2005-12-27 devnull HTLEN= 4*1024,
92 3e0d8fb3 2005-12-27 devnull RRmagic= 0xdeadbabe,
93 3e0d8fb3 2005-12-27 devnull DNmagic= 0xa110a110,
95 3e0d8fb3 2005-12-27 devnull /* parallelism */
96 3e0d8fb3 2005-12-27 devnull Maxactive= 32,
99 3e0d8fb3 2005-12-27 devnull typedef struct DN DN;
100 3e0d8fb3 2005-12-27 devnull typedef struct DNSmsg DNSmsg;
101 3e0d8fb3 2005-12-27 devnull typedef struct RR RR;
102 3e0d8fb3 2005-12-27 devnull typedef struct SOA SOA;
103 3e0d8fb3 2005-12-27 devnull typedef struct Area Area;
104 3e0d8fb3 2005-12-27 devnull typedef struct Request Request;
105 3e0d8fb3 2005-12-27 devnull typedef struct Key Key;
106 3e0d8fb3 2005-12-27 devnull typedef struct Cert Cert;
107 3e0d8fb3 2005-12-27 devnull typedef struct Sig Sig;
108 3e0d8fb3 2005-12-27 devnull typedef struct Null Null;
109 3e0d8fb3 2005-12-27 devnull typedef struct Server Server;
110 3e0d8fb3 2005-12-27 devnull typedef struct Txt Txt;
113 3e0d8fb3 2005-12-27 devnull * a structure to track a request and any slave process handling it
115 3e0d8fb3 2005-12-27 devnull struct Request
117 3e0d8fb3 2005-12-27 devnull int isslave; /* pid of slave */
118 3e0d8fb3 2005-12-27 devnull ulong aborttime; /* time at which we give up */
119 3e0d8fb3 2005-12-27 devnull jmp_buf mret; /* where master jumps to after starting a slave */
124 3e0d8fb3 2005-12-27 devnull * a domain name
126 3e0d8fb3 2005-12-27 devnull struct DN
128 3e0d8fb3 2005-12-27 devnull DN *next; /* hash collision list */
129 3e0d8fb3 2005-12-27 devnull ulong magic;
130 3e0d8fb3 2005-12-27 devnull char *name; /* owner */
131 3e0d8fb3 2005-12-27 devnull RR *rr; /* resource records off this name */
132 3e0d8fb3 2005-12-27 devnull ulong referenced; /* time last referenced */
133 3e0d8fb3 2005-12-27 devnull ulong lookuptime; /* last time we tried to get a better value */
134 3e0d8fb3 2005-12-27 devnull ushort class; /* RR class */
135 3e0d8fb3 2005-12-27 devnull char refs; /* for mark and sweep */
136 3e0d8fb3 2005-12-27 devnull char nonexistent; /* true if we get an authoritative nx for this domain */
137 3e0d8fb3 2005-12-27 devnull ulong ordinal;
141 3e0d8fb3 2005-12-27 devnull * security info
143 3e0d8fb3 2005-12-27 devnull struct Key
145 3e0d8fb3 2005-12-27 devnull int flags;
146 3e0d8fb3 2005-12-27 devnull int proto;
147 3e0d8fb3 2005-12-27 devnull int alg;
148 3e0d8fb3 2005-12-27 devnull int dlen;
149 3e0d8fb3 2005-12-27 devnull uchar *data;
151 3e0d8fb3 2005-12-27 devnull struct Cert
153 3e0d8fb3 2005-12-27 devnull int type;
154 3e0d8fb3 2005-12-27 devnull int tag;
155 3e0d8fb3 2005-12-27 devnull int alg;
156 3e0d8fb3 2005-12-27 devnull int dlen;
157 3e0d8fb3 2005-12-27 devnull uchar *data;
159 3e0d8fb3 2005-12-27 devnull struct Sig
161 3e0d8fb3 2005-12-27 devnull int type;
162 3e0d8fb3 2005-12-27 devnull int alg;
163 3e0d8fb3 2005-12-27 devnull int labels;
164 3e0d8fb3 2005-12-27 devnull ulong ttl;
165 3e0d8fb3 2005-12-27 devnull ulong exp;
166 3e0d8fb3 2005-12-27 devnull ulong incep;
167 3e0d8fb3 2005-12-27 devnull int tag;
168 3e0d8fb3 2005-12-27 devnull DN *signer;
169 3e0d8fb3 2005-12-27 devnull int dlen;
170 3e0d8fb3 2005-12-27 devnull uchar *data;
172 3e0d8fb3 2005-12-27 devnull struct Null
174 3e0d8fb3 2005-12-27 devnull int dlen;
175 3e0d8fb3 2005-12-27 devnull uchar *data;
179 3e0d8fb3 2005-12-27 devnull * text strings
181 3e0d8fb3 2005-12-27 devnull struct Txt
183 3e0d8fb3 2005-12-27 devnull Txt *next;
184 3e0d8fb3 2005-12-27 devnull char *p;
188 3e0d8fb3 2005-12-27 devnull * an unpacked resource record
190 3e0d8fb3 2005-12-27 devnull struct RR
192 3e0d8fb3 2005-12-27 devnull RR *next;
193 3e0d8fb3 2005-12-27 devnull ulong magic;
194 3e0d8fb3 2005-12-27 devnull DN *owner; /* domain that owns this resource record */
195 3e0d8fb3 2005-12-27 devnull uchar negative; /* this is a cached negative response */
196 3e0d8fb3 2005-12-27 devnull ulong pc;
197 3e0d8fb3 2005-12-27 devnull ulong ttl; /* time to live to be passed on */
198 3e0d8fb3 2005-12-27 devnull ulong expire; /* time this entry expires locally */
199 3e0d8fb3 2005-12-27 devnull ushort type; /* RR type */
200 3e0d8fb3 2005-12-27 devnull ushort query; /* query tyis is in response to */
201 3e0d8fb3 2005-12-27 devnull uchar auth; /* authoritative */
202 3e0d8fb3 2005-12-27 devnull uchar db; /* from database */
203 3e0d8fb3 2005-12-27 devnull uchar cached; /* rr in cache */
204 3e0d8fb3 2005-12-27 devnull ulong marker; /* used locally when scanning rrlists */
206 3e0d8fb3 2005-12-27 devnull DN *negsoaowner; /* soa for cached negative response */
207 3e0d8fb3 2005-12-27 devnull DN *host; /* hostname - soa, cname, mb, md, mf, mx, ns */
208 3e0d8fb3 2005-12-27 devnull DN *cpu; /* cpu type - hinfo */
209 3e0d8fb3 2005-12-27 devnull DN *mb; /* mailbox - mg, minfo */
210 3e0d8fb3 2005-12-27 devnull DN *ip; /* ip addrss - a */
211 3e0d8fb3 2005-12-27 devnull DN *rp; /* rp arg - rp */
212 3e0d8fb3 2005-12-27 devnull int cruftlen;
213 3e0d8fb3 2005-12-27 devnull ulong arg0;
216 3e0d8fb3 2005-12-27 devnull int negrcode; /* response code for cached negative response */
217 3e0d8fb3 2005-12-27 devnull DN *rmb; /* responsible maibox - minfo, soa, rp */
218 3e0d8fb3 2005-12-27 devnull DN *ptr; /* pointer to domain name - ptr */
219 3e0d8fb3 2005-12-27 devnull DN *os; /* operating system - hinfo */
220 3e0d8fb3 2005-12-27 devnull ulong pref; /* preference value - mx */
221 3e0d8fb3 2005-12-27 devnull ulong local; /* ns served from local database - ns */
222 3e0d8fb3 2005-12-27 devnull ulong arg1;
225 3e0d8fb3 2005-12-27 devnull SOA *soa; /* soa timers - soa */
226 3e0d8fb3 2005-12-27 devnull Key *key;
227 3e0d8fb3 2005-12-27 devnull Cert *cert;
228 3e0d8fb3 2005-12-27 devnull Sig *sig;
229 3e0d8fb3 2005-12-27 devnull Null *null;
230 3e0d8fb3 2005-12-27 devnull Txt *txt;
235 3e0d8fb3 2005-12-27 devnull * list of servers
237 3e0d8fb3 2005-12-27 devnull struct Server
239 3e0d8fb3 2005-12-27 devnull Server *next;
240 3e0d8fb3 2005-12-27 devnull char *name;
244 3e0d8fb3 2005-12-27 devnull * timers for a start of authenticated record
246 3e0d8fb3 2005-12-27 devnull struct SOA
248 3e0d8fb3 2005-12-27 devnull ulong serial; /* zone serial # (sec) - soa */
249 3e0d8fb3 2005-12-27 devnull ulong refresh; /* zone refresh interval (sec) - soa */
250 3e0d8fb3 2005-12-27 devnull ulong retry; /* zone retry interval (sec) - soa */
251 3e0d8fb3 2005-12-27 devnull ulong expire; /* time to expiration (sec) - soa */
252 3e0d8fb3 2005-12-27 devnull ulong minttl; /* minimum time to live for any entry (sec) - soa */
253 3e0d8fb3 2005-12-27 devnull Server *slaves; /* slave servers */
257 3e0d8fb3 2005-12-27 devnull * domain messages
259 3e0d8fb3 2005-12-27 devnull struct DNSmsg
261 3e0d8fb3 2005-12-27 devnull ushort id;
262 3e0d8fb3 2005-12-27 devnull int flags;
263 3e0d8fb3 2005-12-27 devnull int qdcount; /* questions */
265 3e0d8fb3 2005-12-27 devnull int ancount; /* answers */
267 3e0d8fb3 2005-12-27 devnull int nscount; /* name servers */
269 3e0d8fb3 2005-12-27 devnull int arcount; /* hints */
274 3e0d8fb3 2005-12-27 devnull * definition of local area for dblookup
276 3e0d8fb3 2005-12-27 devnull struct Area
278 3e0d8fb3 2005-12-27 devnull Area *next;
280 3e0d8fb3 2005-12-27 devnull int len; /* strlen(area->soarr->owner->name) */
281 3e0d8fb3 2005-12-27 devnull RR *soarr; /* soa defining this area */
282 3e0d8fb3 2005-12-27 devnull int neednotify;
283 3e0d8fb3 2005-12-27 devnull int needrefresh;
288 3e0d8fb3 2005-12-27 devnull Recurse,
289 3e0d8fb3 2005-12-27 devnull Dontrecurse,
294 3e0d8fb3 2005-12-27 devnull /* dn.c */
295 3e0d8fb3 2005-12-27 devnull extern char *rrtname[];
296 3e0d8fb3 2005-12-27 devnull extern char *rname[];
297 3e0d8fb3 2005-12-27 devnull extern char *opname[];
298 3e0d8fb3 2005-12-27 devnull extern void db2cache(int);
299 3e0d8fb3 2005-12-27 devnull extern void dninit(void);
300 3e0d8fb3 2005-12-27 devnull extern DN* dnlookup(char*, int, int);
301 3e0d8fb3 2005-12-27 devnull extern void dnage(DN*);
302 3e0d8fb3 2005-12-27 devnull extern void dnageall(int);
303 3e0d8fb3 2005-12-27 devnull extern void dnagedb(void);
304 3e0d8fb3 2005-12-27 devnull extern void dnauthdb(void);
305 3e0d8fb3 2005-12-27 devnull extern void dnget(void);
306 3e0d8fb3 2005-12-27 devnull extern void dnpurge(void);
307 3e0d8fb3 2005-12-27 devnull extern void dnput(void);
308 3e0d8fb3 2005-12-27 devnull extern Area* inmyarea(char*);
309 3e0d8fb3 2005-12-27 devnull extern void rrattach(RR*, int);
310 3e0d8fb3 2005-12-27 devnull extern RR* rralloc(int);
311 3e0d8fb3 2005-12-27 devnull extern void rrfree(RR*);
312 3e0d8fb3 2005-12-27 devnull extern void rrfreelist(RR*);
313 3e0d8fb3 2005-12-27 devnull extern RR* rrlookup(DN*, int, int);
314 3e0d8fb3 2005-12-27 devnull extern RR* rrcat(RR**, RR*);
315 3e0d8fb3 2005-12-27 devnull extern RR** rrcopy(RR*, RR**);
316 3e0d8fb3 2005-12-27 devnull extern RR* rrremneg(RR**);
317 3e0d8fb3 2005-12-27 devnull extern RR* rrremtype(RR**, int);
318 3e0d8fb3 2005-12-27 devnull extern int rrfmt(Fmt*);
319 3e0d8fb3 2005-12-27 devnull extern int rravfmt(Fmt*);
320 3e0d8fb3 2005-12-27 devnull extern int rrsupported(int);
321 3e0d8fb3 2005-12-27 devnull extern int rrtype(char*);
322 3e0d8fb3 2005-12-27 devnull extern char* rrname(int, char*, int);
323 3e0d8fb3 2005-12-27 devnull extern int tsame(int, int);
324 3e0d8fb3 2005-12-27 devnull extern void dndump(char*);
325 3e0d8fb3 2005-12-27 devnull extern int getactivity(Request*);
326 3e0d8fb3 2005-12-27 devnull extern void putactivity(void);
327 3e0d8fb3 2005-12-27 devnull extern void abort(); /* char*, ... */;
328 3e0d8fb3 2005-12-27 devnull extern void warning(char*, ...);
329 3e0d8fb3 2005-12-27 devnull extern void slave(Request*);
330 3e0d8fb3 2005-12-27 devnull extern void dncheck(void*, int);
331 3e0d8fb3 2005-12-27 devnull extern void unique(RR*);
332 3e0d8fb3 2005-12-27 devnull extern int subsume(char*, char*);
333 3e0d8fb3 2005-12-27 devnull extern RR* randomize(RR*);
334 3e0d8fb3 2005-12-27 devnull extern void* emalloc(int);
335 3e0d8fb3 2005-12-27 devnull extern char* estrdup(char*);
336 3e0d8fb3 2005-12-27 devnull extern void dnptr(uchar*, uchar*, char*, int, int);
337 3e0d8fb3 2005-12-27 devnull extern void addserver(Server**, char*);
338 3e0d8fb3 2005-12-27 devnull extern Server* copyserverlist(Server*);
339 3e0d8fb3 2005-12-27 devnull extern void freeserverlist(Server*);
341 3e0d8fb3 2005-12-27 devnull /* dnarea.c */
342 3e0d8fb3 2005-12-27 devnull extern void refresh_areas(Area*);
343 3e0d8fb3 2005-12-27 devnull extern void freearea(Area**);
344 3e0d8fb3 2005-12-27 devnull extern void addarea(DN *dp, RR *rp, Ndbtuple *t);
346 3e0d8fb3 2005-12-27 devnull /* dblookup.c */
347 3e0d8fb3 2005-12-27 devnull extern RR* dblookup(char*, int, int, int, int);
348 3e0d8fb3 2005-12-27 devnull extern RR* dbinaddr(DN*, int);
349 3e0d8fb3 2005-12-27 devnull extern int baddelegation(RR*, RR*, uchar*);
350 3e0d8fb3 2005-12-27 devnull extern RR* dnsservers(int);
351 3e0d8fb3 2005-12-27 devnull extern RR* domainlist(int);
352 3e0d8fb3 2005-12-27 devnull extern int opendatabase(void);
354 3e0d8fb3 2005-12-27 devnull /* dns.c */
355 3e0d8fb3 2005-12-27 devnull extern char* walkup(char*);
356 3e0d8fb3 2005-12-27 devnull extern RR* getdnsservers(int);
357 3e0d8fb3 2005-12-27 devnull extern void logreply(int, uchar*, DNSmsg*);
358 3e0d8fb3 2005-12-27 devnull extern void logsend(int, int, uchar*, char*, char*, int);
360 3e0d8fb3 2005-12-27 devnull /* dnresolve.c */
361 3e0d8fb3 2005-12-27 devnull extern RR* dnresolve(char*, int, int, Request*, RR**, int, int, int, int*);
362 3e0d8fb3 2005-12-27 devnull extern int udpport(void);
363 3e0d8fb3 2005-12-27 devnull extern int mkreq(DN *dp, int type, uchar *buf, int flags, ushort reqno);
365 3e0d8fb3 2005-12-27 devnull /* dnserver.c */
366 3e0d8fb3 2005-12-27 devnull extern void dnserver(DNSmsg*, DNSmsg*, Request*);
367 3e0d8fb3 2005-12-27 devnull extern void dntcpserver(char*);
369 3e0d8fb3 2005-12-27 devnull /* dnnotify.c */
370 3e0d8fb3 2005-12-27 devnull extern void dnnotify(DNSmsg*, DNSmsg*, Request*);
371 3e0d8fb3 2005-12-27 devnull extern void notifyproc(void);
373 3e0d8fb3 2005-12-27 devnull /* convDNS2M.c */
374 3e0d8fb3 2005-12-27 devnull extern int convDNS2M(DNSmsg*, uchar*, int);
376 3e0d8fb3 2005-12-27 devnull /* convM2DNS.c */
377 3e0d8fb3 2005-12-27 devnull extern char* convM2DNS(uchar*, int, DNSmsg*);
379 3e0d8fb3 2005-12-27 devnull /* malloc.c */
380 3e0d8fb3 2005-12-27 devnull extern void mallocsanity(void*);
381 3e0d8fb3 2005-12-27 devnull extern void lasthist(void*, int, ulong);
383 3e0d8fb3 2005-12-27 devnull extern int debug;
384 3e0d8fb3 2005-12-27 devnull extern int traceactivity;
385 3e0d8fb3 2005-12-27 devnull extern char *trace;
386 3e0d8fb3 2005-12-27 devnull extern int testing; /* test cache whenever removing a DN */
387 3e0d8fb3 2005-12-27 devnull extern int cachedb;
388 3e0d8fb3 2005-12-27 devnull extern int needrefresh;
389 3e0d8fb3 2005-12-27 devnull extern char *dbfile;
390 3e0d8fb3 2005-12-27 devnull extern char mntpt[];
391 3e0d8fb3 2005-12-27 devnull extern char *logfile;
392 3e0d8fb3 2005-12-27 devnull extern int resolver;
393 3e0d8fb3 2005-12-27 devnull extern int maxage; /* age of oldest entry in cache (secs) */
394 3e0d8fb3 2005-12-27 devnull extern char *zonerefreshprogram;
395 3e0d8fb3 2005-12-27 devnull extern int sendnotifies;
396 3e0d8fb3 2005-12-27 devnull extern ulong now; /* time base */
397 3e0d8fb3 2005-12-27 devnull extern Area *owned;
398 3e0d8fb3 2005-12-27 devnull extern Area *delegated;
400 3e0d8fb3 2005-12-27 devnull #pragma varargck type "R" RR*
401 3e0d8fb3 2005-12-27 devnull #pragma varargck type "Q" RR*