OLD | NEW |
(Empty) | |
| 1 #ifndef _ARPA_NAMESER_H |
| 2 #define _ARPA_NAMESER_H |
| 3 |
| 4 #ifdef __cplusplus |
| 5 extern "C" { |
| 6 #endif |
| 7 |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
| 10 |
| 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 |
| 18 #define NS_QFIXEDSZ 4 |
| 19 #define NS_RRFIXEDSZ 10 |
| 20 #define NS_INT32SZ 4 |
| 21 #define NS_INT16SZ 2 |
| 22 #define NS_INT8SZ 1 |
| 23 #define NS_INADDRSZ 4 |
| 24 #define NS_IN6ADDRSZ 16 |
| 25 #define NS_CMPRSFLGS 0xc0 |
| 26 #define NS_DEFAULTPORT 53 |
| 27 |
| 28 typedef enum __ns_sect { |
| 29 ns_s_qd = 0, |
| 30 ns_s_zn = 0, |
| 31 ns_s_an = 1, |
| 32 ns_s_pr = 1, |
| 33 ns_s_ns = 2, |
| 34 ns_s_ud = 2, |
| 35 ns_s_ar = 3, |
| 36 ns_s_max = 4 |
| 37 } ns_sect; |
| 38 |
| 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]; |
| 43 ns_sect _sect; |
| 44 int _rrnum; |
| 45 const unsigned char *_msg_ptr; |
| 46 } ns_msg; |
| 47 |
| 48 struct _ns_flagdata { int mask, shift; }; |
| 49 extern const struct _ns_flagdata _ns_flagdata[]; |
| 50 |
| 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
) |
| 58 |
| 59 typedef struct __ns_rr { |
| 60 char name[NS_MAXDNAME]; |
| 61 uint16_t type; |
| 62 uint16_t rr_class; |
| 63 uint32_t ttl; |
| 64 uint16_t rdlength; |
| 65 const unsigned char *rdata; |
| 66 } ns_rr; |
| 67 |
| 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) |
| 74 |
| 75 typedef enum __ns_flag { |
| 76 ns_f_qr, |
| 77 ns_f_opcode, |
| 78 ns_f_aa, |
| 79 ns_f_tc, |
| 80 ns_f_rd, |
| 81 ns_f_ra, |
| 82 ns_f_z, |
| 83 ns_f_ad, |
| 84 ns_f_cd, |
| 85 ns_f_rcode, |
| 86 ns_f_max |
| 87 } ns_flag; |
| 88 |
| 89 typedef enum __ns_opcode { |
| 90 ns_o_query = 0, |
| 91 ns_o_iquery = 1, |
| 92 ns_o_status = 2, |
| 93 ns_o_notify = 4, |
| 94 ns_o_update = 5, |
| 95 ns_o_max = 6 |
| 96 } ns_opcode; |
| 97 |
| 98 typedef enum __ns_rcode { |
| 99 ns_r_noerror = 0, |
| 100 ns_r_formerr = 1, |
| 101 ns_r_servfail = 2, |
| 102 ns_r_nxdomain = 3, |
| 103 ns_r_notimpl = 4, |
| 104 ns_r_refused = 5, |
| 105 ns_r_yxdomain = 6, |
| 106 ns_r_yxrrset = 7, |
| 107 ns_r_nxrrset = 8, |
| 108 ns_r_notauth = 9, |
| 109 ns_r_notzone = 10, |
| 110 ns_r_max = 11, |
| 111 ns_r_badvers = 16, |
| 112 ns_r_badsig = 16, |
| 113 ns_r_badkey = 17, |
| 114 ns_r_badtime = 18 |
| 115 } ns_rcode; |
| 116 |
| 117 typedef enum __ns_update_operation { |
| 118 ns_uop_delete = 0, |
| 119 ns_uop_add = 1, |
| 120 ns_uop_max = 2 |
| 121 } ns_update_operation; |
| 122 |
| 123 struct ns_tsig_key { |
| 124 char name[NS_MAXDNAME], alg[NS_MAXDNAME]; |
| 125 unsigned char *data; |
| 126 int len; |
| 127 }; |
| 128 typedef struct ns_tsig_key ns_tsig_key; |
| 129 |
| 130 struct ns_tcp_tsig_state { |
| 131 int counter; |
| 132 struct dst_key *key; |
| 133 void *ctx; |
| 134 unsigned char sig[NS_PACKETSZ]; |
| 135 int siglen; |
| 136 }; |
| 137 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; |
| 138 |
| 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" |
| 142 |
| 143 #define NS_TSIG_ERROR_NO_TSIG -10 |
| 144 #define NS_TSIG_ERROR_NO_SPACE -11 |
| 145 #define NS_TSIG_ERROR_FORMERR -12 |
| 146 |
| 147 typedef enum __ns_type { |
| 148 ns_t_invalid = 0, |
| 149 ns_t_a = 1, |
| 150 ns_t_ns = 2, |
| 151 ns_t_md = 3, |
| 152 ns_t_mf = 4, |
| 153 ns_t_cname = 5, |
| 154 ns_t_soa = 6, |
| 155 ns_t_mb = 7, |
| 156 ns_t_mg = 8, |
| 157 ns_t_mr = 9, |
| 158 ns_t_null = 10, |
| 159 ns_t_wks = 11, |
| 160 ns_t_ptr = 12, |
| 161 ns_t_hinfo = 13, |
| 162 ns_t_minfo = 14, |
| 163 ns_t_mx = 15, |
| 164 ns_t_txt = 16, |
| 165 ns_t_rp = 17, |
| 166 ns_t_afsdb = 18, |
| 167 ns_t_x25 = 19, |
| 168 ns_t_isdn = 20, |
| 169 ns_t_rt = 21, |
| 170 ns_t_nsap = 22, |
| 171 ns_t_nsap_ptr = 23, |
| 172 ns_t_sig = 24, |
| 173 ns_t_key = 25, |
| 174 ns_t_px = 26, |
| 175 ns_t_gpos = 27, |
| 176 ns_t_aaaa = 28, |
| 177 ns_t_loc = 29, |
| 178 ns_t_nxt = 30, |
| 179 ns_t_eid = 31, |
| 180 ns_t_nimloc = 32, |
| 181 ns_t_srv = 33, |
| 182 ns_t_atma = 34, |
| 183 ns_t_naptr = 35, |
| 184 ns_t_kx = 36, |
| 185 ns_t_cert = 37, |
| 186 ns_t_a6 = 38, |
| 187 ns_t_dname = 39, |
| 188 ns_t_sink = 40, |
| 189 ns_t_opt = 41, |
| 190 ns_t_apl = 42, |
| 191 ns_t_tkey = 249, |
| 192 ns_t_tsig = 250, |
| 193 ns_t_ixfr = 251, |
| 194 ns_t_axfr = 252, |
| 195 ns_t_mailb = 253, |
| 196 ns_t_maila = 254, |
| 197 ns_t_any = 255, |
| 198 ns_t_zxfr = 256, |
| 199 ns_t_max = 65536 |
| 200 } ns_type; |
| 201 |
| 202 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ |
| 203 (t) == ns_t_mailb || (t) == ns_t_maila) |
| 204 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) |
| 205 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) |
| 206 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) |
| 207 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ |
| 208 (t) == ns_t_zxfr) |
| 209 |
| 210 typedef enum __ns_class { |
| 211 ns_c_invalid = 0, |
| 212 ns_c_in = 1, |
| 213 ns_c_2 = 2, |
| 214 ns_c_chaos = 3, |
| 215 ns_c_hs = 4, |
| 216 ns_c_none = 254, |
| 217 ns_c_any = 255, |
| 218 ns_c_max = 65536 |
| 219 } ns_class; |
| 220 |
| 221 typedef enum __ns_key_types { |
| 222 ns_kt_rsa = 1, |
| 223 ns_kt_dh = 2, |
| 224 ns_kt_dsa = 3, |
| 225 ns_kt_private = 254 |
| 226 } ns_key_types; |
| 227 |
| 228 typedef enum __ns_cert_types { |
| 229 cert_t_pkix = 1, |
| 230 cert_t_spki = 2, |
| 231 cert_t_pgp = 3, |
| 232 cert_t_url = 253, |
| 233 cert_t_oid = 254 |
| 234 } ns_cert_types; |
| 235 |
| 236 #define NS_KEY_TYPEMASK 0xC000 |
| 237 #define NS_KEY_TYPE_AUTH_CONF 0x0000 |
| 238 #define NS_KEY_TYPE_CONF_ONLY 0x8000 |
| 239 #define NS_KEY_TYPE_AUTH_ONLY 0x4000 |
| 240 #define NS_KEY_TYPE_NO_KEY 0xC000 |
| 241 #define NS_KEY_NO_AUTH 0x8000 |
| 242 #define NS_KEY_NO_CONF 0x4000 |
| 243 #define NS_KEY_RESERVED2 0x2000 |
| 244 #define NS_KEY_EXTENDED_FLAGS 0x1000 |
| 245 #define NS_KEY_RESERVED4 0x0800 |
| 246 #define NS_KEY_RESERVED5 0x0400 |
| 247 #define NS_KEY_NAME_TYPE 0x0300 |
| 248 #define NS_KEY_NAME_USER 0x0000 |
| 249 #define NS_KEY_NAME_ENTITY 0x0200 |
| 250 #define NS_KEY_NAME_ZONE 0x0100 |
| 251 #define NS_KEY_NAME_RESERVED 0x0300 |
| 252 #define NS_KEY_RESERVED8 0x0080 |
| 253 #define NS_KEY_RESERVED9 0x0040 |
| 254 #define NS_KEY_RESERVED10 0x0020 |
| 255 #define NS_KEY_RESERVED11 0x0010 |
| 256 #define NS_KEY_SIGNATORYMASK 0x000F |
| 257 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ |
| 258 NS_KEY_RESERVED4 | \ |
| 259 NS_KEY_RESERVED5 | \ |
| 260 NS_KEY_RESERVED8 | \ |
| 261 NS_KEY_RESERVED9 | \ |
| 262 NS_KEY_RESERVED10 | \ |
| 263 NS_KEY_RESERVED11 ) |
| 264 #define NS_KEY_RESERVED_BITMASK2 0xFFFF |
| 265 #define NS_ALG_MD5RSA 1 |
| 266 #define NS_ALG_DH 2 |
| 267 #define NS_ALG_DSA 3 |
| 268 #define NS_ALG_DSS NS_ALG_DSA |
| 269 #define NS_ALG_EXPIRE_ONLY 253 |
| 270 #define NS_ALG_PRIVATE_OID 254 |
| 271 |
| 272 #define NS_KEY_PROT_TLS 1 |
| 273 #define NS_KEY_PROT_EMAIL 2 |
| 274 #define NS_KEY_PROT_DNSSEC 3 |
| 275 #define NS_KEY_PROT_IPSEC 4 |
| 276 #define NS_KEY_PROT_ANY 255 |
| 277 |
| 278 #define NS_MD5RSA_MIN_BITS 512 |
| 279 #define NS_MD5RSA_MAX_BITS 4096 |
| 280 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) |
| 281 #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) |
| 282 #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) |
| 283 #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) |
| 284 |
| 285 #define NS_DSA_SIG_SIZE 41 |
| 286 #define NS_DSA_MIN_SIZE 213 |
| 287 #define NS_DSA_MAX_BYTES 405 |
| 288 |
| 289 #define NS_SIG_TYPE 0 |
| 290 #define NS_SIG_ALG 2 |
| 291 #define NS_SIG_LABELS 3 |
| 292 #define NS_SIG_OTTL 4 |
| 293 #define NS_SIG_EXPIR 8 |
| 294 #define NS_SIG_SIGNED 12 |
| 295 #define NS_SIG_FOOT 16 |
| 296 #define NS_SIG_SIGNER 18 |
| 297 #define NS_NXT_BITS 8 |
| 298 #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) |
| 299 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) |
| 300 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) |
| 301 #define NS_NXT_MAX 127 |
| 302 |
| 303 #define NS_OPT_DNSSEC_OK 0x8000U |
| 304 #define NS_OPT_NSID 3 |
| 305 |
| 306 #define NS_GET16(s, cp) (void)((s) = ns_get16(((cp)+=2)-2)) |
| 307 #define NS_GET32(l, cp) (void)((l) = ns_get32(((cp)+=4)-4)) |
| 308 #define NS_PUT16(s, cp) ns_put16((s), ((cp)+=2)-2) |
| 309 #define NS_PUT32(l, cp) ns_put32((l), ((cp)+=4)-4) |
| 310 |
| 311 unsigned ns_get16(const unsigned char *); |
| 312 unsigned long ns_get32(const unsigned char *); |
| 313 void ns_put16(unsigned, unsigned char *); |
| 314 void ns_put32(unsigned long, unsigned char *); |
| 315 |
| 316 int ns_initparse(const unsigned char *, int, ns_msg *); |
| 317 int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); |
| 318 int ns_skiprr(const unsigned char *, const unsigned char *, ns_sect, int); |
| 319 int ns_name_uncompress(const unsigned char *, const unsigned char *, const unsig
ned char *, char *, size_t); |
| 320 |
| 321 |
| 322 #define __BIND 19950621 |
| 323 |
| 324 typedef struct { |
| 325 unsigned id :16; |
| 326 #if __BYTE_ORDER == __BIG_ENDIAN |
| 327 unsigned qr: 1; |
| 328 unsigned opcode: 4; |
| 329 unsigned aa: 1; |
| 330 unsigned tc: 1; |
| 331 unsigned rd: 1; |
| 332 unsigned ra: 1; |
| 333 unsigned unused :1; |
| 334 unsigned ad: 1; |
| 335 unsigned cd: 1; |
| 336 unsigned rcode :4; |
| 337 #else |
| 338 unsigned rd :1; |
| 339 unsigned tc :1; |
| 340 unsigned aa :1; |
| 341 unsigned opcode :4; |
| 342 unsigned qr :1; |
| 343 unsigned rcode :4; |
| 344 unsigned cd: 1; |
| 345 unsigned ad: 1; |
| 346 unsigned unused :1; |
| 347 unsigned ra :1; |
| 348 #endif |
| 349 unsigned qdcount :16; |
| 350 unsigned ancount :16; |
| 351 unsigned nscount :16; |
| 352 unsigned arcount :16; |
| 353 } HEADER; |
| 354 |
| 355 #define PACKETSZ NS_PACKETSZ |
| 356 #define MAXDNAME NS_MAXDNAME |
| 357 #define MAXCDNAME NS_MAXCDNAME |
| 358 #define MAXLABEL NS_MAXLABEL |
| 359 #define HFIXEDSZ NS_HFIXEDSZ |
| 360 #define QFIXEDSZ NS_QFIXEDSZ |
| 361 #define RRFIXEDSZ NS_RRFIXEDSZ |
| 362 #define INT32SZ NS_INT32SZ |
| 363 #define INT16SZ NS_INT16SZ |
| 364 #define INT8SZ NS_INT8SZ |
| 365 #define INADDRSZ NS_INADDRSZ |
| 366 #define IN6ADDRSZ NS_IN6ADDRSZ |
| 367 #define INDIR_MASK NS_CMPRSFLGS |
| 368 #define NAMESERVER_PORT NS_DEFAULTPORT |
| 369 |
| 370 #define S_ZONE ns_s_zn |
| 371 #define S_PREREQ ns_s_pr |
| 372 #define S_UPDATE ns_s_ud |
| 373 #define S_ADDT ns_s_ar |
| 374 |
| 375 #define QUERY ns_o_query |
| 376 #define IQUERY ns_o_iquery |
| 377 #define STATUS ns_o_status |
| 378 #define NS_NOTIFY_OP ns_o_notify |
| 379 #define NS_UPDATE_OP ns_o_update |
| 380 |
| 381 #define NOERROR ns_r_noerror |
| 382 #define FORMERR ns_r_formerr |
| 383 #define SERVFAIL ns_r_servfail |
| 384 #define NXDOMAIN ns_r_nxdomain |
| 385 #define NOTIMP ns_r_notimpl |
| 386 #define REFUSED ns_r_refused |
| 387 #define YXDOMAIN ns_r_yxdomain |
| 388 #define YXRRSET ns_r_yxrrset |
| 389 #define NXRRSET ns_r_nxrrset |
| 390 #define NOTAUTH ns_r_notauth |
| 391 #define NOTZONE ns_r_notzone |
| 392 |
| 393 #define DELETE ns_uop_delete |
| 394 #define ADD ns_uop_add |
| 395 |
| 396 #define T_A ns_t_a |
| 397 #define T_NS ns_t_ns |
| 398 #define T_MD ns_t_md |
| 399 #define T_MF ns_t_mf |
| 400 #define T_CNAME ns_t_cname |
| 401 #define T_SOA ns_t_soa |
| 402 #define T_MB ns_t_mb |
| 403 #define T_MG ns_t_mg |
| 404 #define T_MR ns_t_mr |
| 405 #define T_NULL ns_t_null |
| 406 #define T_WKS ns_t_wks |
| 407 #define T_PTR ns_t_ptr |
| 408 #define T_HINFO ns_t_hinfo |
| 409 #define T_MINFO ns_t_minfo |
| 410 #define T_MX ns_t_mx |
| 411 #define T_TXT ns_t_txt |
| 412 #define T_RP ns_t_rp |
| 413 #define T_AFSDB ns_t_afsdb |
| 414 #define T_X25 ns_t_x25 |
| 415 #define T_ISDN ns_t_isdn |
| 416 #define T_RT ns_t_rt |
| 417 #define T_NSAP ns_t_nsap |
| 418 #define T_NSAP_PTR ns_t_nsap_ptr |
| 419 #define T_SIG ns_t_sig |
| 420 #define T_KEY ns_t_key |
| 421 #define T_PX ns_t_px |
| 422 #define T_GPOS ns_t_gpos |
| 423 #define T_AAAA ns_t_aaaa |
| 424 #define T_LOC ns_t_loc |
| 425 #define T_NXT ns_t_nxt |
| 426 #define T_EID ns_t_eid |
| 427 #define T_NIMLOC ns_t_nimloc |
| 428 #define T_SRV ns_t_srv |
| 429 #define T_ATMA ns_t_atma |
| 430 #define T_NAPTR ns_t_naptr |
| 431 #define T_A6 ns_t_a6 |
| 432 #define T_DNAME ns_t_dname |
| 433 #define T_TSIG ns_t_tsig |
| 434 #define T_IXFR ns_t_ixfr |
| 435 #define T_AXFR ns_t_axfr |
| 436 #define T_MAILB ns_t_mailb |
| 437 #define T_MAILA ns_t_maila |
| 438 #define T_ANY ns_t_any |
| 439 |
| 440 #define C_IN ns_c_in |
| 441 #define C_CHAOS ns_c_chaos |
| 442 #define C_HS ns_c_hs |
| 443 #define C_NONE ns_c_none |
| 444 #define C_ANY ns_c_any |
| 445 |
| 446 #define GETSHORT NS_GET16 |
| 447 #define GETLONG NS_GET32 |
| 448 #define PUTSHORT NS_PUT16 |
| 449 #define PUTLONG NS_PUT32 |
| 450 |
| 451 #ifdef __cplusplus |
| 452 } |
| 453 #endif |
| 454 |
| 455 #endif |
OLD | NEW |