1 #ifndef _ARPA_NAMESER_H
2 #define _ARPA_NAMESER_H
11 #define __NAMESER 19991006
12 #define NS_PACKETSZ 512
13 #define NS_MAXDNAME 1025
14 #define NS_MAXMSG 65535
15 #define NS_MAXCDNAME 255
16 #define NS_MAXLABEL 63
17 #define NS_HFIXEDSZ 12
19 #define NS_RRFIXEDSZ 10
24 #define NS_IN6ADDRSZ 16
25 #define NS_CMPRSFLGS 0xc0
26 #define NS_DEFAULTPORT 53
28 typedef enum __ns_sect {
39 typedef struct __ns_msg {
40 const unsigned char *_msg, *_eom;
41 uint16_t _id, _flags, _counts[ns_s_max];
42 const unsigned char *_sections[ns_s_max];
45 const unsigned char *_msg_ptr;
48 struct _ns_flagdata { int mask, shift; };
49 extern const struct _ns_flagdata _ns_flagdata[];
51 #define ns_msg_id(handle) ((handle)._id + 0)
52 #define ns_msg_base(handle) ((handle)._msg + 0)
53 #define ns_msg_end(handle) ((handle)._eom + 0)
54 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
55 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
56 #define ns_msg_getflag(handle, flag) \
57 (((handle)._flags & _ns_flagdata[flag].mask) >> _ns_flagdata[flag].shift)
59 typedef struct __ns_rr {
60 char name[NS_MAXDNAME];
65 const unsigned char *rdata;
68 #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
69 #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
70 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
71 #define ns_rr_ttl(rr) ((rr).ttl + 0)
72 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
73 #define ns_rr_rdata(rr) ((rr).rdata + 0)
75 typedef enum __ns_flag {
89 typedef enum __ns_opcode {
98 typedef enum __ns_rcode {
117 typedef enum __ns_update_operation {
121 } ns_update_operation;
124 char name[NS_MAXDNAME], alg[NS_MAXDNAME];
128 typedef struct ns_tsig_key ns_tsig_key;
130 struct ns_tcp_tsig_state {
134 unsigned char sig[NS_PACKETSZ];
137 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
139 #define NS_TSIG_FUDGE 300
140 #define NS_TSIG_TCP_COUNT 100
141 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
143 #define NS_TSIG_ERROR_NO_TSIG -10
144 #define NS_TSIG_ERROR_NO_SPACE -11
145 #define NS_TSIG_ERROR_FORMERR -12
147 typedef enum __ns_type {
199 ns_t_nsec3param = 51,
208 ns_t_openpgpkey = 61,
237 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
238 (t) == ns_t_mailb || (t) == ns_t_maila)
239 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
240 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
241 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
242 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
245 typedef enum __ns_class {
256 typedef enum __ns_key_types {
263 typedef enum __ns_cert_types {
271 #define NS_KEY_TYPEMASK 0xC000
272 #define NS_KEY_TYPE_AUTH_CONF 0x0000
273 #define NS_KEY_TYPE_CONF_ONLY 0x8000
274 #define NS_KEY_TYPE_AUTH_ONLY 0x4000
275 #define NS_KEY_TYPE_NO_KEY 0xC000
276 #define NS_KEY_NO_AUTH 0x8000
277 #define NS_KEY_NO_CONF 0x4000
278 #define NS_KEY_RESERVED2 0x2000
279 #define NS_KEY_EXTENDED_FLAGS 0x1000
280 #define NS_KEY_RESERVED4 0x0800
281 #define NS_KEY_RESERVED5 0x0400
282 #define NS_KEY_NAME_TYPE 0x0300
283 #define NS_KEY_NAME_USER 0x0000
284 #define NS_KEY_NAME_ENTITY 0x0200
285 #define NS_KEY_NAME_ZONE 0x0100
286 #define NS_KEY_NAME_RESERVED 0x0300
287 #define NS_KEY_RESERVED8 0x0080
288 #define NS_KEY_RESERVED9 0x0040
289 #define NS_KEY_RESERVED10 0x0020
290 #define NS_KEY_RESERVED11 0x0010
291 #define NS_KEY_SIGNATORYMASK 0x000F
292 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
297 NS_KEY_RESERVED10 | \
299 #define NS_KEY_RESERVED_BITMASK2 0xFFFF
300 #define NS_ALG_MD5RSA 1
303 #define NS_ALG_DSS NS_ALG_DSA
304 #define NS_ALG_EXPIRE_ONLY 253
305 #define NS_ALG_PRIVATE_OID 254
307 #define NS_KEY_PROT_TLS 1
308 #define NS_KEY_PROT_EMAIL 2
309 #define NS_KEY_PROT_DNSSEC 3
310 #define NS_KEY_PROT_IPSEC 4
311 #define NS_KEY_PROT_ANY 255
313 #define NS_MD5RSA_MIN_BITS 512
314 #define NS_MD5RSA_MAX_BITS 4096
315 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
316 #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
317 #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
318 #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
320 #define NS_DSA_SIG_SIZE 41
321 #define NS_DSA_MIN_SIZE 213
322 #define NS_DSA_MAX_BYTES 405
324 #define NS_SIG_TYPE 0
326 #define NS_SIG_LABELS 3
327 #define NS_SIG_OTTL 4
328 #define NS_SIG_EXPIR 8
329 #define NS_SIG_SIGNED 12
330 #define NS_SIG_FOOT 16
331 #define NS_SIG_SIGNER 18
332 #define NS_NXT_BITS 8
333 #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
334 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
335 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
336 #define NS_NXT_MAX 127
338 #define NS_OPT_DNSSEC_OK 0x8000U
339 #define NS_OPT_NSID 3
341 #define NS_GET16(s, cp) (void)((s) = ns_get16(((cp)+=2)-2))
342 #define NS_GET32(l, cp) (void)((l) = ns_get32(((cp)+=4)-4))
343 #define NS_PUT16(s, cp) ns_put16((s), ((cp)+=2)-2)
344 #define NS_PUT32(l, cp) ns_put32((l), ((cp)+=4)-4)
346 unsigned ns_get16(const unsigned char *);
347 unsigned long ns_get32(const unsigned char *);
348 void ns_put16(unsigned, unsigned char *);
349 void ns_put32(unsigned long, unsigned char *);
351 int ns_initparse(const unsigned char *, int, ns_msg *);
352 int ns_parserr(ns_msg *, ns_sect, int, ns_rr *);
353 int ns_skiprr(const unsigned char *, const unsigned char *, ns_sect, int);
354 int ns_name_uncompress(const unsigned char *, const unsigned char *, const unsigned char *, char *, size_t);
357 #define __BIND 19950621
361 #if __BYTE_ORDER == __BIG_ENDIAN
384 unsigned qdcount :16;
385 unsigned ancount :16;
386 unsigned nscount :16;
387 unsigned arcount :16;
390 #define PACKETSZ NS_PACKETSZ
391 #define MAXDNAME NS_MAXDNAME
392 #define MAXCDNAME NS_MAXCDNAME
393 #define MAXLABEL NS_MAXLABEL
394 #define HFIXEDSZ NS_HFIXEDSZ
395 #define QFIXEDSZ NS_QFIXEDSZ
396 #define RRFIXEDSZ NS_RRFIXEDSZ
397 #define INT32SZ NS_INT32SZ
398 #define INT16SZ NS_INT16SZ
399 #define INT8SZ NS_INT8SZ
400 #define INADDRSZ NS_INADDRSZ
401 #define IN6ADDRSZ NS_IN6ADDRSZ
402 #define INDIR_MASK NS_CMPRSFLGS
403 #define NAMESERVER_PORT NS_DEFAULTPORT
405 #define S_ZONE ns_s_zn
406 #define S_PREREQ ns_s_pr
407 #define S_UPDATE ns_s_ud
408 #define S_ADDT ns_s_ar
410 #define QUERY ns_o_query
411 #define IQUERY ns_o_iquery
412 #define STATUS ns_o_status
413 #define NS_NOTIFY_OP ns_o_notify
414 #define NS_UPDATE_OP ns_o_update
416 #define NOERROR ns_r_noerror
417 #define FORMERR ns_r_formerr
418 #define SERVFAIL ns_r_servfail
419 #define NXDOMAIN ns_r_nxdomain
420 #define NOTIMP ns_r_notimpl
421 #define REFUSED ns_r_refused
422 #define YXDOMAIN ns_r_yxdomain
423 #define YXRRSET ns_r_yxrrset
424 #define NXRRSET ns_r_nxrrset
425 #define NOTAUTH ns_r_notauth
426 #define NOTZONE ns_r_notzone
428 #define DELETE ns_uop_delete
429 #define ADD ns_uop_add
435 #define T_CNAME ns_t_cname
436 #define T_SOA ns_t_soa
440 #define T_NULL ns_t_null
441 #define T_WKS ns_t_wks
442 #define T_PTR ns_t_ptr
443 #define T_HINFO ns_t_hinfo
444 #define T_MINFO ns_t_minfo
446 #define T_TXT ns_t_txt
448 #define T_AFSDB ns_t_afsdb
449 #define T_X25 ns_t_x25
450 #define T_ISDN ns_t_isdn
452 #define T_NSAP ns_t_nsap
453 #define T_NSAP_PTR ns_t_nsap_ptr
454 #define T_SIG ns_t_sig
455 #define T_KEY ns_t_key
457 #define T_GPOS ns_t_gpos
458 #define T_AAAA ns_t_aaaa
459 #define T_LOC ns_t_loc
460 #define T_NXT ns_t_nxt
461 #define T_EID ns_t_eid
462 #define T_NIMLOC ns_t_nimloc
463 #define T_SRV ns_t_srv
464 #define T_ATMA ns_t_atma
465 #define T_NAPTR ns_t_naptr
467 #define T_DNAME ns_t_dname
469 #define T_SSHFP ns_t_sshfp
470 #define T_IPSECKEY ns_t_ipseckey
471 #define T_RRSIG ns_t_rrsig
472 #define T_NSEC ns_t_nsec
473 #define T_DNSKEY ns_t_dnskey
474 #define T_DHCID ns_t_dhcid
475 #define T_NSEC3 ns_t_nsec3
476 #define T_NSEC3PARAM ns_t_nsec3param
477 #define T_TLSA ns_t_tlsa
478 #define T_SMIMEA ns_t_smimea
479 #define T_HIP ns_t_hip
480 #define T_NINFO ns_t_ninfo
481 #define T_RKEY ns_t_rkey
482 #define T_TALINK ns_t_talink
483 #define T_CDS ns_t_cds
484 #define T_CDNSKEY ns_t_cdnskey
485 #define T_OPENPGPKEY ns_t_openpgpkey
486 #define T_CSYNC ns_t_csync
487 #define T_SPF ns_t_spf
488 #define T_UINFO ns_t_uinfo
489 #define T_UID ns_t_uid
490 #define T_GID ns_t_gid
491 #define T_UNSPEC ns_t_unspec
492 #define T_NID ns_t_nid
493 #define T_L32 ns_t_l32
494 #define T_L64 ns_t_l64
496 #define T_EUI48 ns_t_eui48
497 #define T_EUI64 ns_t_eui64
498 #define T_TKEY ns_t_tkey
499 #define T_TSIG ns_t_tsig
500 #define T_IXFR ns_t_ixfr
501 #define T_AXFR ns_t_axfr
502 #define T_MAILB ns_t_mailb
503 #define T_MAILA ns_t_maila
504 #define T_ANY ns_t_any
505 #define T_URI ns_t_uri
506 #define T_CAA ns_t_caa
507 #define T_AVC ns_t_avc
509 #define T_DLV ns_t_dlv
512 #define C_CHAOS ns_c_chaos
514 #define C_NONE ns_c_none
515 #define C_ANY ns_c_any
517 #define GETSHORT NS_GET16
518 #define GETLONG NS_GET32
519 #define PUTSHORT NS_PUT16
520 #define PUTLONG NS_PUT32