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 #ifndef _ARPA_NAMESER_H_
00052 #define _ARPA_NAMESER_H_
00053
00054 #define BIND_4_COMPAT
00055
00056 #if 0
00057 #include <sys/param.h>
00058 #if (!defined(BSD)) || (BSD < 199306)
00059 # include <sys/bitypes.h>
00060 #else
00061 # include <sys/types.h>
00062 #endif
00063 #include <sys/cdefs.h>
00064 #endif
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 #define __NAMESER 19991006
00075
00076
00077
00078
00079 #define NS_PACKETSZ 512
00080 #define NS_MAXDNAME 1025
00081 #define NS_MAXCDNAME 255
00082 #define NS_MAXLABEL 63
00083 #define NS_HFIXEDSZ 12
00084 #define NS_QFIXEDSZ 4
00085 #define NS_RRFIXEDSZ 10
00086 #define NS_INT32SZ 4
00087 #define NS_INT16SZ 2
00088 #define NS_INT8SZ 1
00089 #define NS_INADDRSZ 4
00090 #define NS_IN6ADDRSZ 16
00091 #define NS_CMPRSFLGS 0xc0
00092 #define NS_DEFAULTPORT 53
00093
00094
00095
00096
00097
00098 typedef enum __ns_sect {
00099 ns_s_qd = 0,
00100 ns_s_zn = 0,
00101 ns_s_an = 1,
00102 ns_s_pr = 1,
00103 ns_s_ns = 2,
00104 ns_s_ud = 2,
00105 ns_s_ar = 3,
00106 ns_s_max = 4
00107 } ns_sect;
00108
00109
00110
00111
00112
00113
00114 typedef struct __ns_msg {
00115 const u_char *_msg, *_eom;
00116 u_int16_t _id, _flags, _counts[ns_s_max];
00117 const u_char *_sections[ns_s_max];
00118 ns_sect _sect;
00119 int _rrnum;
00120 const u_char *_ptr;
00121 } ns_msg;
00122
00123
00124 struct _ns_flagdata { int mask, shift; };
00125 extern struct _ns_flagdata _ns_flagdata[];
00126
00127
00128 #define ns_msg_getflag(handle, flag) ( \
00129 ((handle)._flags & _ns_flagdata[flag].mask) \
00130 >> _ns_flagdata[flag].shift \
00131 )
00132 #define ns_msg_id(handle) ((handle)._id + 0)
00133 #define ns_msg_base(handle) ((handle)._msg + 0)
00134 #define ns_msg_end(handle) ((handle)._eom + 0)
00135 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
00136 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
00137
00138
00139
00140
00141 typedef struct __ns_rr {
00142 char name[NS_MAXDNAME];
00143 u_int16_t type;
00144 u_int16_t rr_class;
00145 u_int32_t ttl;
00146 u_int16_t rdlength;
00147 const u_char * rdata;
00148 } ns_rr;
00149
00150
00151 #define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
00152 #define ns_rr_type(rr) ((ns_type)((rr).type + 0))
00153 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
00154 #define ns_rr_ttl(rr) ((rr).ttl + 0)
00155 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
00156 #define ns_rr_rdata(rr) ((rr).rdata + 0)
00157
00158
00159
00160
00161
00162
00163 typedef enum __ns_flag {
00164 ns_f_qr,
00165 ns_f_opcode,
00166 ns_f_aa,
00167 ns_f_tc,
00168 ns_f_rd,
00169 ns_f_ra,
00170 ns_f_z,
00171 ns_f_ad,
00172 ns_f_cd,
00173 ns_f_rcode,
00174 ns_f_max
00175 } ns_flag;
00176
00177
00178
00179
00180 typedef enum __ns_opcode {
00181 ns_o_query = 0,
00182 ns_o_iquery = 1,
00183 ns_o_status = 2,
00184
00185 ns_o_notify = 4,
00186 ns_o_update = 5,
00187 ns_o_max = 6
00188 } ns_opcode;
00189
00190
00191
00192
00193 typedef enum __ns_rcode {
00194 ns_r_noerror = 0,
00195 ns_r_formerr = 1,
00196 ns_r_servfail = 2,
00197 ns_r_nxdomain = 3,
00198 ns_r_notimpl = 4,
00199 ns_r_refused = 5,
00200
00201 ns_r_yxdomain = 6,
00202 ns_r_yxrrset = 7,
00203 ns_r_nxrrset = 8,
00204 ns_r_notauth = 9,
00205 ns_r_notzone = 10,
00206 ns_r_max = 11,
00207
00208 ns_r_badsig = 16,
00209 ns_r_badkey = 17,
00210 ns_r_badtime = 18
00211 } ns_rcode;
00212
00213
00214 typedef enum __ns_update_operation {
00215 ns_uop_delete = 0,
00216 ns_uop_add = 1,
00217 ns_uop_max = 2
00218 } ns_update_operation;
00219
00220
00221
00222
00223 struct ns_tsig_key {
00224 char name[NS_MAXDNAME], alg[NS_MAXDNAME];
00225 unsigned char *data;
00226 int len;
00227 };
00228 typedef struct ns_tsig_key ns_tsig_key;
00229
00230
00231
00232
00233 struct ns_tcp_tsig_state {
00234 int counter;
00235 struct dst_key *key;
00236 void *ctx;
00237 unsigned char sig[NS_PACKETSZ];
00238 int siglen;
00239 };
00240 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
00241
00242 #define NS_TSIG_FUDGE 300
00243 #define NS_TSIG_TCP_COUNT 100
00244 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
00245
00246 #define NS_TSIG_ERROR_NO_TSIG -10
00247 #define NS_TSIG_ERROR_NO_SPACE -11
00248 #define NS_TSIG_ERROR_FORMERR -12
00249
00250
00251
00252
00253 typedef enum __ns_type {
00254 ns_t_invalid = 0,
00255 ns_t_a = 1,
00256 ns_t_ns = 2,
00257 ns_t_md = 3,
00258 ns_t_mf = 4,
00259 ns_t_cname = 5,
00260 ns_t_soa = 6,
00261 ns_t_mb = 7,
00262 ns_t_mg = 8,
00263 ns_t_mr = 9,
00264 ns_t_null = 10,
00265 ns_t_wks = 11,
00266 ns_t_ptr = 12,
00267 ns_t_hinfo = 13,
00268 ns_t_minfo = 14,
00269 ns_t_mx = 15,
00270 ns_t_txt = 16,
00271 ns_t_rp = 17,
00272 ns_t_afsdb = 18,
00273 ns_t_x25 = 19,
00274 ns_t_isdn = 20,
00275 ns_t_rt = 21,
00276 ns_t_nsap = 22,
00277 ns_t_nsap_ptr = 23,
00278 ns_t_sig = 24,
00279 ns_t_key = 25,
00280 ns_t_px = 26,
00281 ns_t_gpos = 27,
00282 ns_t_aaaa = 28,
00283 ns_t_loc = 29,
00284 ns_t_nxt = 30,
00285 ns_t_eid = 31,
00286 ns_t_nimloc = 32,
00287 ns_t_srv = 33,
00288 ns_t_atma = 34,
00289 ns_t_naptr = 35,
00290 ns_t_kx = 36,
00291 ns_t_cert = 37,
00292 ns_t_a6 = 38,
00293 ns_t_dname = 39,
00294 ns_t_sink = 40,
00295 ns_t_opt = 41,
00296 ns_t_tsig = 250,
00297 ns_t_ixfr = 251,
00298 ns_t_axfr = 252,
00299 ns_t_mailb = 253,
00300 ns_t_maila = 254,
00301 ns_t_any = 255,
00302 ns_t_zxfr = 256,
00303 ns_t_max__
00304 } ns_type;
00305
00306
00307 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
00308 (t) == ns_t_mailb || (t) == ns_t_maila)
00309
00310 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
00311
00312 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
00313 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
00314 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
00315 (t) == ns_t_zxfr)
00316
00317
00318
00319
00320 typedef enum __ns_class {
00321 ns_c_invalid = 0,
00322 ns_c_in = 1,
00323 ns_c_2 = 2,
00324 ns_c_chaos = 3,
00325 ns_c_hs = 4,
00326
00327 ns_c_none = 254,
00328 ns_c_any = 255,
00329 ns_c_max__
00330 } ns_class;
00331
00332
00333
00334 typedef enum __ns_key_types {
00335 ns_kt_rsa = 1,
00336 ns_kt_dh = 2,
00337 ns_kt_dsa = 3,
00338 ns_kt_private = 254
00339 } ns_key_types;
00340
00341 typedef enum __ns_cert_types {
00342 cert_t_pkix = 1,
00343 cert_t_spki = 2,
00344 cert_t_pgp = 3,
00345 cert_t_url = 253,
00346 cert_t_oid = 254
00347 } ns_cert_types;
00348
00349
00350 #define NS_KEY_TYPEMASK 0xC000
00351 #define NS_KEY_TYPE_AUTH_CONF 0x0000
00352 #define NS_KEY_TYPE_CONF_ONLY 0x8000
00353 #define NS_KEY_TYPE_AUTH_ONLY 0x4000
00354 #define NS_KEY_TYPE_NO_KEY 0xC000
00355
00356 #define NS_KEY_NO_AUTH 0x8000
00357 #define NS_KEY_NO_CONF 0x4000
00358 #define NS_KEY_RESERVED2 0x2000
00359 #define NS_KEY_EXTENDED_FLAGS 0x1000
00360 #define NS_KEY_RESERVED4 0x0800
00361 #define NS_KEY_RESERVED5 0x0400
00362 #define NS_KEY_NAME_TYPE 0x0300
00363 #define NS_KEY_NAME_USER 0x0000
00364 #define NS_KEY_NAME_ENTITY 0x0200
00365 #define NS_KEY_NAME_ZONE 0x0100
00366 #define NS_KEY_NAME_RESERVED 0x0300
00367 #define NS_KEY_RESERVED8 0x0080
00368 #define NS_KEY_RESERVED9 0x0040
00369 #define NS_KEY_RESERVED10 0x0020
00370 #define NS_KEY_RESERVED11 0x0010
00371 #define NS_KEY_SIGNATORYMASK 0x000F
00372 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
00373 NS_KEY_RESERVED4 | \
00374 NS_KEY_RESERVED5 | \
00375 NS_KEY_RESERVED8 | \
00376 NS_KEY_RESERVED9 | \
00377 NS_KEY_RESERVED10 | \
00378 NS_KEY_RESERVED11 )
00379 #define NS_KEY_RESERVED_BITMASK2 0xFFFF
00380
00381
00382 #define NS_ALG_MD5RSA 1
00383 #define NS_ALG_DH 2
00384 #define NS_ALG_DSA 3
00385 #define NS_ALG_DSS NS_ALG_DSA
00386 #define NS_ALG_EXPIRE_ONLY 253
00387 #define NS_ALG_PRIVATE_OID 254
00388
00389
00390
00391 #define NS_KEY_PROT_TLS 1
00392 #define NS_KEY_PROT_EMAIL 2
00393 #define NS_KEY_PROT_DNSSEC 3
00394 #define NS_KEY_PROT_IPSEC 4
00395 #define NS_KEY_PROT_ANY 255
00396
00397
00398 #define NS_MD5RSA_MIN_BITS 512
00399 #define NS_MD5RSA_MAX_BITS 2552
00400
00401 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
00402
00403 #define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
00404 #define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8)
00405 #define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8)
00406
00407 #define NS_DSA_SIG_SIZE 41
00408 #define NS_DSA_MIN_SIZE 213
00409 #define NS_DSA_MAX_BYTES 405
00410
00411
00412 #define NS_SIG_TYPE 0
00413 #define NS_SIG_ALG 2
00414 #define NS_SIG_LABELS 3
00415 #define NS_SIG_OTTL 4
00416 #define NS_SIG_EXPIR 8
00417 #define NS_SIG_SIGNED 12
00418 #define NS_SIG_FOOT 16
00419 #define NS_SIG_SIGNER 18
00420
00421
00422 #define NS_NXT_BITS 8
00423 #define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS)))
00424 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
00425 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS)))
00426 #define NS_NXT_MAX 127
00427
00428
00429
00430
00431 #define NS_GET16(s, cp) do { \
00432 register u_char *t_cp = (u_char *)(cp); \
00433 (s) = ((u_int16_t)t_cp[0] << 8) \
00434 | ((u_int16_t)t_cp[1]) \
00435 ; \
00436 (cp) += NS_INT16SZ; \
00437 } while (0)
00438
00439 #define NS_GET32(l, cp) do { \
00440 register u_char *t_cp = (u_char *)(cp); \
00441 (l) = ((u_int32_t)t_cp[0] << 24) \
00442 | ((u_int32_t)t_cp[1] << 16) \
00443 | ((u_int32_t)t_cp[2] << 8) \
00444 | ((u_int32_t)t_cp[3]) \
00445 ; \
00446 (cp) += NS_INT32SZ; \
00447 } while (0)
00448
00449 #define NS_PUT16(s, cp) do { \
00450 register u_int16_t t_s = (u_int16_t)(s); \
00451 register u_char *t_cp = (u_char *)(cp); \
00452 *t_cp++ = t_s >> 8; \
00453 *t_cp = t_s; \
00454 (cp) += NS_INT16SZ; \
00455 } while (0)
00456
00457 #define NS_PUT32(l, cp) do { \
00458 register u_int32_t t_l = (u_int32_t)(l); \
00459 register u_char *t_cp = (u_char *)(cp); \
00460 *t_cp++ = t_l >> 24; \
00461 *t_cp++ = t_l >> 16; \
00462 *t_cp++ = t_l >> 8; \
00463 *t_cp = t_l; \
00464 (cp) += NS_INT32SZ; \
00465 } while (0)
00466
00467
00468
00469
00470 #define ns_get16 __ns_get16
00471 #define ns_get32 __ns_get32
00472 #define ns_put16 __ns_put16
00473 #define ns_put32 __ns_put32
00474 #define ns_initparse __ns_initparse
00475 #define ns_skiprr __ns_skiprr
00476 #define ns_parserr __ns_parserr
00477 #define ns_sprintrr __ns_sprintrr
00478 #define ns_sprintrrf __ns_sprintrrf
00479 #define ns_format_ttl __ns_format_ttl
00480 #define ns_parse_ttl __ns_parse_ttl
00481 #define ns_datetosecs __ns_datetosecs
00482 #define ns_name_ntol __ns_name_ntol
00483 #define ns_name_ntop __ns_name_ntop
00484 #define ns_name_pton __ns_name_pton
00485 #define ns_name_unpack __ns_name_unpack
00486 #define ns_name_pack __ns_name_pack
00487 #define ns_name_compress __ns_name_compress
00488 #define ns_name_uncompress __ns_name_uncompress
00489 #define ns_name_skip __ns_name_skip
00490 #define ns_name_rollback __ns_name_rollback
00491 #define ns_sign __ns_sign
00492 #define ns_sign_tcp __ns_sign_tcp
00493 #define ns_sign_tcp_init __ns_sign_tcp_init
00494 #define ns_find_tsig __ns_find_tsig
00495 #define ns_verify __ns_verify
00496 #define ns_verify_tcp __ns_verify_tcp
00497 #define ns_verify_tcp_init __ns_verify_tcp_init
00498 #define ns_samedomain __ns_samedomain
00499 #define ns_subdomain __ns_subdomain
00500 #define ns_makecanon __ns_makecanon
00501 #define ns_samename __ns_samename
00502
00503 #if 0
00504 __BEGIN_DECLS
00505 u_int ns_get16 __P((const u_char *));
00506 u_long ns_get32 __P((const u_char *));
00507 void ns_put16 __P((u_int, u_char *));
00508 void ns_put32 __P((u_long, u_char *));
00509 int ns_initparse __P((const u_char *, int, ns_msg *));
00510 int ns_skiprr __P((const u_char *, const u_char *, ns_sect, int));
00511 int ns_parserr __P((ns_msg *, ns_sect, int, ns_rr *));
00512 int ns_sprintrr __P((const ns_msg *, const ns_rr *,
00513 const char *, const char *, char *, size_t));
00514 int ns_sprintrrf __P((const u_char *, size_t, const char *,
00515 ns_class, ns_type, u_long, const u_char *,
00516 size_t, const char *, const char *,
00517 char *, size_t));
00518 int ns_format_ttl __P((u_long, char *, size_t));
00519 int ns_parse_ttl __P((const char *, u_long *));
00520 u_int32_t ns_datetosecs __P((const char *cp, int *errp));
00521 int ns_name_ntol __P((const u_char *, u_char *, size_t));
00522 int ns_name_ntop __P((const u_char *, char *, size_t));
00523 int ns_name_pton __P((const char *, u_char *, size_t));
00524 int ns_name_unpack __P((const u_char *, const u_char *,
00525 const u_char *, u_char *, size_t));
00526 int ns_name_pack __P((const u_char *, u_char *, int,
00527 const u_char **, const u_char **));
00528 int ns_name_uncompress __P((const u_char *, const u_char *,
00529 const u_char *, char *, size_t));
00530 int ns_name_compress __P((const char *, u_char *, size_t,
00531 const u_char **, const u_char **));
00532 int ns_name_skip __P((const u_char **, const u_char *));
00533 void ns_name_rollback __P((const u_char *, const u_char **,
00534 const u_char **));
00535 int ns_sign __P((u_char *, int *, int, int, void *,
00536 const u_char *, int, u_char *, int *, time_t));
00537 int ns_sign_tcp __P((u_char *, int *, int, int,
00538 ns_tcp_tsig_state *, int));
00539 int ns_sign_tcp_init __P((void *, const u_char *, int,
00540 ns_tcp_tsig_state *));
00541 u_char *ns_find_tsig __P((u_char *, u_char *));
00542 int ns_verify __P((u_char *, int *, void *,
00543 const u_char *, int, u_char *, int *,
00544 time_t *, int));
00545 int ns_verify_tcp __P((u_char *, int *, ns_tcp_tsig_state *, int));
00546 int ns_verify_tcp_init __P((void *, const u_char *, int,
00547 ns_tcp_tsig_state *));
00548 int ns_samedomain __P((const char *, const char *));
00549 int ns_subdomain __P((const char *, const char *));
00550 int ns_makecanon __P((const char *, char *, size_t));
00551 int ns_samename __P((const char *, const char *));
00552 __END_DECLS
00553 #endif
00554
00555 #ifdef BIND_4_COMPAT
00556 #include <arpa/nameser_compat.h>
00557 #endif
00558
00559 #endif