00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef _ARPA_NAMESER_H_
00058 #define _ARPA_NAMESER_H_
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 #define __NAMESER 19991006
00069
00070
00071
00072
00073 #define NS_PACKETSZ 512
00074 #define NS_MAXDNAME 1025
00075 #define NS_MAXCDNAME 255
00076 #define NS_MAXLABEL 63
00077 #define NS_HFIXEDSZ 12
00078 #define NS_QFIXEDSZ 4
00079 #define NS_RRFIXEDSZ 10
00080 #define NS_INT32SZ 4
00081 #define NS_INT16SZ 2
00082 #define NS_INT8SZ 1
00083 #define NS_INADDRSZ 4
00084 #define NS_IN6ADDRSZ 16
00085 #define NS_CMPRSFLGS 0xc0
00086 #define NS_DEFAULTPORT 53
00087
00088
00089
00090
00091
00092 typedef enum __ns_sect {
00093 ns_s_qd = 0,
00094 ns_s_zn = 0,
00095 ns_s_an = 1,
00096 ns_s_pr = 1,
00097 ns_s_ns = 2,
00098 ns_s_ud = 2,
00099 ns_s_ar = 3,
00100 ns_s_max = 4
00101 } ns_sect;
00102
00103
00104
00105
00106
00107
00108 typedef struct __ns_msg {
00109 const u_int8_t *_msg, *_eom;
00110 u_int16_t _id, _flags, _counts[ns_s_max];
00111 const u_int8_t *_sections[ns_s_max];
00112 ns_sect _sect;
00113 int _rrnum;
00114 const u_int8_t *_ptr;
00115 } ns_msg;
00116
00117
00118 struct _ns_flagdata { int mask, shift; };
00119 extern struct _ns_flagdata _ns_flagdata[];
00120
00121
00122 #define ns_msg_getflag(handle, flag) ( \
00123 ((handle)._flags & _ns_flagdata[flag].mask) \
00124 >> _ns_flagdata[flag].shift \
00125 )
00126 #define ns_msg_id(handle) ((handle)._id + 0)
00127 #define ns_msg_base(handle) ((handle)._msg + 0)
00128 #define ns_msg_end(handle) ((handle)._eom + 0)
00129 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
00130 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
00131
00132
00133
00134
00135 typedef struct __ns_rr {
00136 char name[NS_MAXDNAME];
00137 u_int16_t type;
00138 u_int16_t rr_class;
00139 u_int32_t ttl;
00140 u_int16_t rdlength;
00141 const u_int8_t *rdata;
00142 } ns_rr;
00143
00144
00145 #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
00146 #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
00147 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
00148 #define ns_rr_ttl(rr) ((rr).ttl + 0)
00149 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
00150 #define ns_rr_rdata(rr) ((rr).rdata + 0)
00151
00152
00153
00154
00155
00156
00157 typedef enum __ns_flag {
00158 ns_f_qr,
00159 ns_f_opcode,
00160 ns_f_aa,
00161 ns_f_tc,
00162 ns_f_rd,
00163 ns_f_ra,
00164 ns_f_z,
00165 ns_f_ad,
00166 ns_f_cd,
00167 ns_f_rcode,
00168 ns_f_max
00169 } ns_flag;
00170
00171
00172
00173
00174 typedef enum __ns_opcode {
00175 ns_o_query = 0,
00176 ns_o_iquery = 1,
00177 ns_o_status = 2,
00178
00179 ns_o_notify = 4,
00180 ns_o_update = 5,
00181 ns_o_max = 6
00182 } ns_opcode;
00183
00184
00185
00186
00187 typedef enum __ns_rcode {
00188 ns_r_noerror = 0,
00189 ns_r_formerr = 1,
00190 ns_r_servfail = 2,
00191 ns_r_nxdomain = 3,
00192 ns_r_notimpl = 4,
00193 ns_r_refused = 5,
00194
00195 ns_r_yxdomain = 6,
00196 ns_r_yxrrset = 7,
00197 ns_r_nxrrset = 8,
00198 ns_r_notauth = 9,
00199 ns_r_notzone = 10,
00200 ns_r_max = 11,
00201
00202 ns_r_badsig = 16,
00203 ns_r_badkey = 17,
00204 ns_r_badtime = 18
00205 } ns_rcode;
00206
00207
00208 typedef enum __ns_update_operation {
00209 ns_uop_delete = 0,
00210 ns_uop_add = 1,
00211 ns_uop_max = 2
00212 } ns_update_operation;
00213
00214
00215
00216
00217 struct ns_tsig_key {
00218 char name[NS_MAXDNAME], alg[NS_MAXDNAME];
00219 unsigned char *data;
00220 unsigned len;
00221 };
00222 typedef struct ns_tsig_key ns_tsig_key;
00223
00224
00225
00226
00227 struct ns_tcp_tsig_state {
00228 int counter;
00229 struct dst_key *key;
00230 void *ctx;
00231 unsigned char sig[NS_PACKETSZ];
00232 unsigned siglen;
00233 };
00234 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
00235
00236 #define NS_TSIG_FUDGE 300
00237 #define NS_TSIG_TCP_COUNT 100
00238 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
00239
00240 #define NS_TSIG_ERROR_NO_TSIG -10
00241 #define NS_TSIG_ERROR_NO_SPACE -11
00242 #define NS_TSIG_ERROR_FORMERR -12
00243
00244
00245
00246
00247 typedef enum __ns_type {
00248 ns_t_invalid = 0,
00249 ns_t_a = 1,
00250 ns_t_ns = 2,
00251 ns_t_md = 3,
00252 ns_t_mf = 4,
00253 ns_t_cname = 5,
00254 ns_t_soa = 6,
00255 ns_t_mb = 7,
00256 ns_t_mg = 8,
00257 ns_t_mr = 9,
00258 ns_t_null = 10,
00259 ns_t_wks = 11,
00260 ns_t_ptr = 12,
00261 ns_t_hinfo = 13,
00262 ns_t_minfo = 14,
00263 ns_t_mx = 15,
00264 ns_t_txt = 16,
00265 ns_t_rp = 17,
00266 ns_t_afsdb = 18,
00267 ns_t_x25 = 19,
00268 ns_t_isdn = 20,
00269 ns_t_rt = 21,
00270 ns_t_nsap = 22,
00271 ns_t_nsap_ptr = 23,
00272 ns_t_sig = 24,
00273 ns_t_key = 25,
00274 ns_t_px = 26,
00275 ns_t_gpos = 27,
00276 ns_t_aaaa = 28,
00277 ns_t_loc = 29,
00278 ns_t_nxt = 30,
00279 ns_t_eid = 31,
00280 ns_t_nimloc = 32,
00281 ns_t_srv = 33,
00282 ns_t_atma = 34,
00283 ns_t_naptr = 35,
00284 ns_t_kx = 36,
00285 ns_t_cert = 37,
00286 ns_t_a6 = 38,
00287 ns_t_dname = 39,
00288 ns_t_sink = 40,
00289 ns_t_opt = 41,
00290 ns_t_tsig = 250,
00291 ns_t_ixfr = 251,
00292 ns_t_axfr = 252,
00293 ns_t_mailb = 253,
00294 ns_t_maila = 254,
00295 ns_t_any = 255,
00296 ns_t_zxfr = 256,
00297 ns_t_max = 65536
00298 } ns_type;
00299
00300
00301 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
00302 (t) == ns_t_mailb || (t) == ns_t_maila)
00303
00304 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
00305
00306 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
00307 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
00308 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
00309 (t) == ns_t_zxfr)
00310
00311
00312
00313
00314 typedef enum __ns_class {
00315 ns_c_invalid = 0,
00316 ns_c_in = 1,
00317 ns_c_2 = 2,
00318 ns_c_chaos = 3,
00319 ns_c_hs = 4,
00320
00321 ns_c_none = 254,
00322 ns_c_any = 255,
00323 ns_c_max = 65536
00324 } ns_class;
00325
00326
00327
00328 typedef enum __ns_key_types {
00329 ns_kt_rsa = 1,
00330 ns_kt_dh = 2,
00331 ns_kt_dsa = 3,
00332 ns_kt_private = 254
00333 } ns_key_types;
00334
00335 typedef enum __ns_cert_types {
00336 cert_t_pkix = 1,
00337 cert_t_spki = 2,
00338 cert_t_pgp = 3,
00339 cert_t_url = 253,
00340 cert_t_oid = 254
00341 } ns_cert_types;
00342
00343
00344 #define NS_KEY_TYPEMASK 0xC000
00345 #define NS_KEY_TYPE_AUTH_CONF 0x0000
00346 #define NS_KEY_TYPE_CONF_ONLY 0x8000
00347 #define NS_KEY_TYPE_AUTH_ONLY 0x4000
00348 #define NS_KEY_TYPE_NO_KEY 0xC000
00349
00350 #define NS_KEY_NO_AUTH 0x8000
00351 #define NS_KEY_NO_CONF 0x4000
00352 #define NS_KEY_RESERVED2 0x2000
00353 #define NS_KEY_EXTENDED_FLAGS 0x1000
00354 #define NS_KEY_RESERVED4 0x0800
00355 #define NS_KEY_RESERVED5 0x0400
00356 #define NS_KEY_NAME_TYPE 0x0300
00357 #define NS_KEY_NAME_USER 0x0000
00358 #define NS_KEY_NAME_ENTITY 0x0200
00359 #define NS_KEY_NAME_ZONE 0x0100
00360 #define NS_KEY_NAME_RESERVED 0x0300
00361 #define NS_KEY_RESERVED8 0x0080
00362 #define NS_KEY_RESERVED9 0x0040
00363 #define NS_KEY_RESERVED10 0x0020
00364 #define NS_KEY_RESERVED11 0x0010
00365 #define NS_KEY_SIGNATORYMASK 0x000F
00366 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
00367 NS_KEY_RESERVED4 | \
00368 NS_KEY_RESERVED5 | \
00369 NS_KEY_RESERVED8 | \
00370 NS_KEY_RESERVED9 | \
00371 NS_KEY_RESERVED10 | \
00372 NS_KEY_RESERVED11 )
00373 #define NS_KEY_RESERVED_BITMASK2 0xFFFF
00374
00375
00376 #define NS_ALG_MD5RSA 1
00377 #define NS_ALG_DH 2
00378 #define NS_ALG_DSA 3
00379 #define NS_ALG_DSS NS_ALG_DSA
00380 #define NS_ALG_EXPIRE_ONLY 253
00381 #define NS_ALG_PRIVATE_OID 254
00382
00383
00384
00385 #define NS_KEY_PROT_TLS 1
00386 #define NS_KEY_PROT_EMAIL 2
00387 #define NS_KEY_PROT_DNSSEC 3
00388 #define NS_KEY_PROT_IPSEC 4
00389 #define NS_KEY_PROT_ANY 255
00390
00391
00392 #define NS_MD5RSA_MIN_BITS 512
00393 #define NS_MD5RSA_MAX_BITS 2552
00394
00395 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
00396
00397 #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
00398 #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
00399 #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
00400
00401 #define NS_DSA_SIG_SIZE 41
00402 #define NS_DSA_MIN_SIZE 213
00403 #define NS_DSA_MAX_BYTES 405
00404
00405
00406 #define NS_SIG_TYPE 0
00407 #define NS_SIG_ALG 2
00408 #define NS_SIG_LABELS 3
00409 #define NS_SIG_OTTL 4
00410 #define NS_SIG_EXPIR 8
00411 #define NS_SIG_SIGNED 12
00412 #define NS_SIG_FOOT 16
00413 #define NS_SIG_SIGNER 18
00414
00415
00416 #define NS_NXT_BITS 8
00417 #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
00418 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
00419 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
00420 #define NS_NXT_MAX 127
00421
00422
00423
00424
00425 #define NS_GET16(s, cp) do { \
00426 register u_int8_t *t_cp = (u_int8_t *)(cp); \
00427 (s) = ((u_int16_t)t_cp[0] << 8) \
00428 | ((u_int16_t)t_cp[1]) \
00429 ; \
00430 (cp) += NS_INT16SZ; \
00431 } while (0)
00432
00433 #define NS_GET32(l, cp) do { \
00434 register u_int8_t *t_cp = (u_int8_t *)(cp); \
00435 (l) = ((u_int32_t)t_cp[0] << 24) \
00436 | ((u_int32_t)t_cp[1] << 16) \
00437 | ((u_int32_t)t_cp[2] << 8) \
00438 | ((u_int32_t)t_cp[3]) \
00439 ; \
00440 (cp) += NS_INT32SZ; \
00441 } while (0)
00442
00443 #define NS_PUT16(s, cp) do { \
00444 register u_int16_t t_s = (u_int16_t)(s); \
00445 register u_int8_t *t_cp = (u_int8_t *)(cp); \
00446 *t_cp++ = t_s >> 8; \
00447 *t_cp = t_s; \
00448 (cp) += NS_INT16SZ; \
00449 } while (0)
00450
00451 #define NS_PUT32(l, cp) do { \
00452 register u_int32_t t_l = (u_int32_t)(l); \
00453 register u_int8_t *t_cp = (u_int8_t *)(cp); \
00454 *t_cp++ = t_l >> 24; \
00455 *t_cp++ = t_l >> 16; \
00456 *t_cp++ = t_l >> 8; \
00457 *t_cp = t_l; \
00458 (cp) += NS_INT32SZ; \
00459 } while (0)
00460
00461 #include <arpa/nameser_compat.h>
00462
00463 #endif