11539Srgrimes/* 2269867Sume * Portions Copyright (C) 2004, 2005, 2008, 2009 Internet Systems Consortium, Inc. ("ISC") 3269867Sume * Portions Copyright (C) 1996-2003 Internet Software Consortium. 4269867Sume * 5269867Sume * Permission to use, copy, modify, and/or distribute this software for any 6269867Sume * purpose with or without fee is hereby granted, provided that the above 7269867Sume * copyright notice and this permission notice appear in all copies. 8269867Sume * 9269867Sume * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10269867Sume * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11269867Sume * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12269867Sume * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13269867Sume * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14269867Sume * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15269867Sume * PERFORMANCE OF THIS SOFTWARE. 16269867Sume */ 17269867Sume 18331722Seadler/* 191539Srgrimes * Copyright (c) 1983, 1989, 1993 2036888Speter * The Regents of the University of California. All rights reserved. 21269867Sume * 221539Srgrimes * Redistribution and use in source and binary forms, with or without 231539Srgrimes * modification, are permitted provided that the following conditions 241539Srgrimes * are met: 251539Srgrimes * 1. Redistributions of source code must retain the above copyright 261539Srgrimes * notice, this list of conditions and the following disclaimer. 271539Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 281539Srgrimes * notice, this list of conditions and the following disclaimer in the 291539Srgrimes * documentation and/or other materials provided with the distribution. 30203965Simp * 3. Neither the name of the University nor the names of its contributors 311539Srgrimes * may be used to endorse or promote products derived from this software 321539Srgrimes * without specific prior written permission. 33269867Sume * 341539Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 351539Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 361539Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 371539Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 381539Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 391539Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 401539Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 411539Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 421539Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 431539Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 441539Srgrimes * SUCH DAMAGE. 4536888Speter */ 4636888Speter 4736888Speter/* 48269867Sume * $Id: nameser.h,v 1.16 2009/03/03 01:52:48 each Exp $ 4950473Speter * $FreeBSD$ 501539Srgrimes */ 511539Srgrimes 5210132Speter#ifndef _ARPA_NAMESER_H_ 5336888Speter#define _ARPA_NAMESER_H_ 541539Srgrimes 55170244Sume/*! \file */ 56170244Sume 5736888Speter#define BIND_4_COMPAT 5836888Speter 59156960Sume#include <sys/param.h> 601539Srgrimes#include <sys/types.h> 613070Spst#include <sys/cdefs.h> 621539Srgrimes 63170244Sume/*% 64156960Sume * Revision information. This is the release date in YYYYMMDD format. 65156960Sume * It can change every day so the right thing to do with it is use it 66156960Sume * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not 67156960Sume * compare for equality; rather, use it to determine whether your libbind.a 68156960Sume * contains a new enough lib/nameser/ to support the feature you need. 693070Spst */ 703070Spst 71269867Sume#define __NAMESER 20090302 /*%< New interface version stamp. */ 723070Spst/* 73170244Sume * Define constants based on RFC0883, RFC1034, RFC 1035 741539Srgrimes */ 75170244Sume#define NS_PACKETSZ 512 /*%< default UDP packet size */ 76269867Sume#define NS_MAXDNAME 1025 /*%< maximum domain name (presentation format)*/ 77170244Sume#define NS_MAXMSG 65535 /*%< maximum message size */ 78170244Sume#define NS_MAXCDNAME 255 /*%< maximum compressed domain name */ 79170244Sume#define NS_MAXLABEL 63 /*%< maximum length of domain label */ 80269867Sume#define NS_MAXLABELS 128 /*%< theoretical max #/labels per domain name */ 81269867Sume#define NS_MAXNNAME 256 /*%< maximum uncompressed (binary) domain name*/ 82269867Sume#define NS_MAXPADDR (sizeof "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") 83170244Sume#define NS_HFIXEDSZ 12 /*%< #/bytes of fixed data in header */ 84170244Sume#define NS_QFIXEDSZ 4 /*%< #/bytes of fixed data in query */ 85170244Sume#define NS_RRFIXEDSZ 10 /*%< #/bytes of fixed data in r record */ 86170244Sume#define NS_INT32SZ 4 /*%< #/bytes of data in a u_int32_t */ 87170244Sume#define NS_INT16SZ 2 /*%< #/bytes of data in a u_int16_t */ 88170244Sume#define NS_INT8SZ 1 /*%< #/bytes of data in a u_int8_t */ 89170244Sume#define NS_INADDRSZ 4 /*%< IPv4 T_A */ 90170244Sume#define NS_IN6ADDRSZ 16 /*%< IPv6 T_AAAA */ 91170244Sume#define NS_CMPRSFLGS 0xc0 /*%< Flag bits indicating name compression. */ 92170244Sume#define NS_DEFAULTPORT 53 /*%< For both TCP and UDP. */ 931539Srgrimes/* 9436888Speter * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord() 9536888Speter * in synch with it. 961539Srgrimes */ 9736888Spetertypedef enum __ns_sect { 98170244Sume ns_s_qd = 0, /*%< Query: Question. */ 99170244Sume ns_s_zn = 0, /*%< Update: Zone. */ 100170244Sume ns_s_an = 1, /*%< Query: Answer. */ 101170244Sume ns_s_pr = 1, /*%< Update: Prerequisites. */ 102170244Sume ns_s_ns = 2, /*%< Query: Name servers. */ 103170244Sume ns_s_ud = 2, /*%< Update: Update. */ 104170244Sume ns_s_ar = 3, /*%< Query|Update: Additional records. */ 10536888Speter ns_s_max = 4 10636888Speter} ns_sect; 1071539Srgrimes 108170244Sume/*% 109298849Spfg * Network name (compressed or not) type. Equivalent to a pointer when used 110269867Sume * in a function prototype. Can be const'd. 111269867Sume */ 112269867Sumetypedef u_char ns_nname[NS_MAXNNAME]; 113269867Sumetypedef const u_char *ns_nname_ct; 114269867Sumetypedef u_char *ns_nname_t; 115269867Sume 116269867Sumestruct ns_namemap { ns_nname_ct base; int len; }; 117269867Sumetypedef struct ns_namemap *ns_namemap_t; 118269867Sumetypedef const struct ns_namemap *ns_namemap_ct; 119269867Sume 120269867Sume/*% 12136888Speter * This is a message handle. It is caller allocated and has no dynamic data. 12236888Speter * This structure is intended to be opaque to all but ns_parse.c, thus the 12336888Speter * leading _'s on the member names. Use the accessor functions, not the _'s. 1241539Srgrimes */ 12536888Spetertypedef struct __ns_msg { 12636888Speter const u_char *_msg, *_eom; 12736888Speter u_int16_t _id, _flags, _counts[ns_s_max]; 12836888Speter const u_char *_sections[ns_s_max]; 12936888Speter ns_sect _sect; 13036888Speter int _rrnum; 131156960Sume const u_char *_msg_ptr; 13236888Speter} ns_msg; 13336888Speter 134269867Sume/* 135269867Sume * This is a newmsg handle, used when constructing new messages with 136269867Sume * ns_newmsg_init, et al. 137269867Sume */ 138269867Sumestruct ns_newmsg { 139269867Sume ns_msg msg; 140269867Sume const u_char *dnptrs[25]; 141269867Sume const u_char **lastdnptr; 142269867Sume}; 143269867Sumetypedef struct ns_newmsg ns_newmsg; 144269867Sume 14536888Speter/* Private data structure - do not use from outside library. */ 14636888Speterstruct _ns_flagdata { int mask, shift; }; 14736888Speterextern struct _ns_flagdata _ns_flagdata[]; 14836888Speter 14936888Speter/* Accessor macros - this is part of the public interface. */ 150156960Sume 15136888Speter#define ns_msg_id(handle) ((handle)._id + 0) 15236888Speter#define ns_msg_base(handle) ((handle)._msg + 0) 15336888Speter#define ns_msg_end(handle) ((handle)._eom + 0) 15436888Speter#define ns_msg_size(handle) ((handle)._eom - (handle)._msg) 15536888Speter#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) 15636888Speter 157170244Sume/*% 15836888Speter * This is a parsed record. It is caller allocated and has no dynamic data. 1591539Srgrimes */ 16036888Spetertypedef struct __ns_rr { 161156960Sume char name[NS_MAXDNAME]; 16236888Speter u_int16_t type; 16347742Speter u_int16_t rr_class; 16436888Speter u_int32_t ttl; 16536888Speter u_int16_t rdlength; 166156960Sume const u_char * rdata; 16736888Speter} ns_rr; 1681539Srgrimes 169269867Sume/* 170269867Sume * Same thing, but using uncompressed network binary names, and real C types. 171269867Sume */ 172269867Sumetypedef struct __ns_rr2 { 173269867Sume ns_nname nname; 174269867Sume size_t nnamel; 175269867Sume int type; 176269867Sume int rr_class; 177269867Sume u_int ttl; 178269867Sume int rdlength; 179269867Sume const u_char * rdata; 180269867Sume} ns_rr2; 181269867Sume 18236888Speter/* Accessor macros - this is part of the public interface. */ 18336888Speter#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") 184269867Sume#define ns_rr_nname(rr) ((const ns_nname_t)(rr).nname) 185269867Sume#define ns_rr_nnamel(rr) ((rr).nnamel + 0) 186156960Sume#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) 187156960Sume#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) 18836888Speter#define ns_rr_ttl(rr) ((rr).ttl + 0) 18936888Speter#define ns_rr_rdlen(rr) ((rr).rdlength + 0) 19036888Speter#define ns_rr_rdata(rr) ((rr).rdata + 0) 19136888Speter 192170244Sume/*% 19336888Speter * These don't have to be in the same order as in the packet flags word, 19436888Speter * and they can even overlap in some cases, but they will need to be kept 19536888Speter * in synch with ns_parse.c:ns_flagdata[]. 1961539Srgrimes */ 19736888Spetertypedef enum __ns_flag { 198170244Sume ns_f_qr, /*%< Question/Response. */ 199170244Sume ns_f_opcode, /*%< Operation code. */ 200170244Sume ns_f_aa, /*%< Authoritative Answer. */ 201170244Sume ns_f_tc, /*%< Truncation occurred. */ 202170244Sume ns_f_rd, /*%< Recursion Desired. */ 203170244Sume ns_f_ra, /*%< Recursion Available. */ 204170244Sume ns_f_z, /*%< MBZ. */ 205170244Sume ns_f_ad, /*%< Authentic Data (DNSSEC). */ 206170244Sume ns_f_cd, /*%< Checking Disabled (DNSSEC). */ 207170244Sume ns_f_rcode, /*%< Response code. */ 20836888Speter ns_f_max 20936888Speter} ns_flag; 2101539Srgrimes 211170244Sume/*% 21236888Speter * Currently defined opcodes. 21336888Speter */ 21436888Spetertypedef enum __ns_opcode { 215170244Sume ns_o_query = 0, /*%< Standard query. */ 216170244Sume ns_o_iquery = 1, /*%< Inverse query (deprecated/unsupported). */ 217170244Sume ns_o_status = 2, /*%< Name server status query (unsupported). */ 21836888Speter /* Opcode 3 is undefined/reserved. */ 219170244Sume ns_o_notify = 4, /*%< Zone change notification. */ 220170244Sume ns_o_update = 5, /*%< Zone update message. */ 22136888Speter ns_o_max = 6 22236888Speter} ns_opcode; 22336888Speter 224170244Sume/*% 22536888Speter * Currently defined response codes. 22636888Speter */ 22736888Spetertypedef enum __ns_rcode { 228170244Sume ns_r_noerror = 0, /*%< No error occurred. */ 229170244Sume ns_r_formerr = 1, /*%< Format error. */ 230170244Sume ns_r_servfail = 2, /*%< Server failure. */ 231170244Sume ns_r_nxdomain = 3, /*%< Name error. */ 232170244Sume ns_r_notimpl = 4, /*%< Unimplemented. */ 233170244Sume ns_r_refused = 5, /*%< Operation refused. */ 23436888Speter /* these are for BIND_UPDATE */ 235170244Sume ns_r_yxdomain = 6, /*%< Name exists */ 236170244Sume ns_r_yxrrset = 7, /*%< RRset exists */ 237170244Sume ns_r_nxrrset = 8, /*%< RRset does not exist */ 238170244Sume ns_r_notauth = 9, /*%< Not authoritative for zone */ 239170244Sume ns_r_notzone = 10, /*%< Zone of record different from zone section */ 240156960Sume ns_r_max = 11, 241156960Sume /* The following are EDNS extended rcodes */ 242156960Sume ns_r_badvers = 16, 243156960Sume /* The following are TSIG errors */ 244156960Sume ns_r_badsig = 16, 245156960Sume ns_r_badkey = 17, 246156960Sume ns_r_badtime = 18 24736888Speter} ns_rcode; 24836888Speter 24936888Speter/* BIND_UPDATE */ 25036888Spetertypedef enum __ns_update_operation { 25136888Speter ns_uop_delete = 0, 25236888Speter ns_uop_add = 1, 25336888Speter ns_uop_max = 2 25436888Speter} ns_update_operation; 25536888Speter 256170244Sume/*% 257156960Sume * This structure is used for TSIG authenticated messages 25836888Speter */ 259156960Sumestruct ns_tsig_key { 260269867Sume char name[NS_MAXDNAME], alg[NS_MAXDNAME]; 261269867Sume unsigned char *data; 262269867Sume int len; 26336888Speter}; 264156960Sumetypedef struct ns_tsig_key ns_tsig_key; 26536888Speter 266170244Sume/*% 267156960Sume * This structure is used for TSIG authenticated TCP messages 268156960Sume */ 269156960Sumestruct ns_tcp_tsig_state { 270156960Sume int counter; 271156960Sume struct dst_key *key; 272156960Sume void *ctx; 273156960Sume unsigned char sig[NS_PACKETSZ]; 274156960Sume int siglen; 275156960Sume}; 276156960Sumetypedef struct ns_tcp_tsig_state ns_tcp_tsig_state; 277156960Sume 278156960Sume#define NS_TSIG_FUDGE 300 279156960Sume#define NS_TSIG_TCP_COUNT 100 280156960Sume#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" 281156960Sume 282156960Sume#define NS_TSIG_ERROR_NO_TSIG -10 283156960Sume#define NS_TSIG_ERROR_NO_SPACE -11 284156960Sume#define NS_TSIG_ERROR_FORMERR -12 285156960Sume 286170244Sume/*% 28736888Speter * Currently defined type values for resources and queries. 28836888Speter */ 28936888Spetertypedef enum __ns_type { 290170244Sume ns_t_invalid = 0, /*%< Cookie. */ 291170244Sume ns_t_a = 1, /*%< Host address. */ 292170244Sume ns_t_ns = 2, /*%< Authoritative server. */ 293170244Sume ns_t_md = 3, /*%< Mail destination. */ 294170244Sume ns_t_mf = 4, /*%< Mail forwarder. */ 295170244Sume ns_t_cname = 5, /*%< Canonical name. */ 296170244Sume ns_t_soa = 6, /*%< Start of authority zone. */ 297170244Sume ns_t_mb = 7, /*%< Mailbox domain name. */ 298170244Sume ns_t_mg = 8, /*%< Mail group member. */ 299170244Sume ns_t_mr = 9, /*%< Mail rename name. */ 300170244Sume ns_t_null = 10, /*%< Null resource record. */ 301170244Sume ns_t_wks = 11, /*%< Well known service. */ 302170244Sume ns_t_ptr = 12, /*%< Domain name pointer. */ 303170244Sume ns_t_hinfo = 13, /*%< Host information. */ 304170244Sume ns_t_minfo = 14, /*%< Mailbox information. */ 305170244Sume ns_t_mx = 15, /*%< Mail routing information. */ 306170244Sume ns_t_txt = 16, /*%< Text strings. */ 307170244Sume ns_t_rp = 17, /*%< Responsible person. */ 308170244Sume ns_t_afsdb = 18, /*%< AFS cell database. */ 309170244Sume ns_t_x25 = 19, /*%< X_25 calling address. */ 310170244Sume ns_t_isdn = 20, /*%< ISDN calling address. */ 311170244Sume ns_t_rt = 21, /*%< Router. */ 312170244Sume ns_t_nsap = 22, /*%< NSAP address. */ 313170244Sume ns_t_nsap_ptr = 23, /*%< Reverse NSAP lookup (deprecated). */ 314170244Sume ns_t_sig = 24, /*%< Security signature. */ 315170244Sume ns_t_key = 25, /*%< Security key. */ 316170244Sume ns_t_px = 26, /*%< X.400 mail mapping. */ 317170244Sume ns_t_gpos = 27, /*%< Geographical position (withdrawn). */ 318269867Sume ns_t_aaaa = 28, /*%< IPv6 Address. */ 319170244Sume ns_t_loc = 29, /*%< Location Information. */ 320170244Sume ns_t_nxt = 30, /*%< Next domain (security). */ 321170244Sume ns_t_eid = 31, /*%< Endpoint identifier. */ 322170244Sume ns_t_nimloc = 32, /*%< Nimrod Locator. */ 323170244Sume ns_t_srv = 33, /*%< Server Selection. */ 324170244Sume ns_t_atma = 34, /*%< ATM Address */ 325170244Sume ns_t_naptr = 35, /*%< Naming Authority PoinTeR */ 326170244Sume ns_t_kx = 36, /*%< Key Exchange */ 327170244Sume ns_t_cert = 37, /*%< Certification record */ 328269867Sume ns_t_a6 = 38, /*%< IPv6 address (experimental) */ 329269867Sume ns_t_dname = 39, /*%< Non-terminal DNAME */ 330170244Sume ns_t_sink = 40, /*%< Kitchen sink (experimentatl) */ 331170244Sume ns_t_opt = 41, /*%< EDNS0 option (meta-RR) */ 332170244Sume ns_t_apl = 42, /*%< Address prefix list (RFC3123) */ 333269867Sume ns_t_ds = 43, /*%< Delegation Signer */ 334269867Sume ns_t_sshfp = 44, /*%< SSH Fingerprint */ 335269867Sume ns_t_ipseckey = 45, /*%< IPSEC Key */ 336269867Sume ns_t_rrsig = 46, /*%< RRset Signature */ 337269867Sume ns_t_nsec = 47, /*%< Negative security */ 338269867Sume ns_t_dnskey = 48, /*%< DNS Key */ 339269867Sume ns_t_dhcid = 49, /*%< Dynamic host configuratin identifier */ 340269867Sume ns_t_nsec3 = 50, /*%< Negative security type 3 */ 341269867Sume ns_t_nsec3param = 51, /*%< Negative security type 3 parameters */ 342269867Sume ns_t_hip = 55, /*%< Host Identity Protocol */ 343269867Sume ns_t_spf = 99, /*%< Sender Policy Framework */ 344170244Sume ns_t_tkey = 249, /*%< Transaction key */ 345170244Sume ns_t_tsig = 250, /*%< Transaction signature. */ 346170244Sume ns_t_ixfr = 251, /*%< Incremental zone transfer. */ 347170244Sume ns_t_axfr = 252, /*%< Transfer zone of authority. */ 348170244Sume ns_t_mailb = 253, /*%< Transfer mailbox records. */ 349170244Sume ns_t_maila = 254, /*%< Transfer mail agent records. */ 350170244Sume ns_t_any = 255, /*%< Wildcard match. */ 351170244Sume ns_t_zxfr = 256, /*%< BIND-specific, nonstandard. */ 352269867Sume ns_t_dlv = 32769, /*%< DNSSEC look-aside validatation. */ 35336888Speter ns_t_max = 65536 35436888Speter} ns_type; 35536888Speter 356156960Sume/* Exclusively a QTYPE? (not also an RTYPE) */ 357156960Sume#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ 358156960Sume (t) == ns_t_mailb || (t) == ns_t_maila) 359156960Sume/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */ 360156960Sume#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) 361156960Sume/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */ 362156960Sume#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) 363156960Sume#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) 364156960Sume#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ 365156960Sume (t) == ns_t_zxfr) 366156960Sume 367170244Sume/*% 3681539Srgrimes * Values for class field 3691539Srgrimes */ 37036888Spetertypedef enum __ns_class { 371170244Sume ns_c_invalid = 0, /*%< Cookie. */ 372170244Sume ns_c_in = 1, /*%< Internet. */ 373170244Sume ns_c_2 = 2, /*%< unallocated/unsupported. */ 374170244Sume ns_c_chaos = 3, /*%< MIT Chaos-net. */ 375170244Sume ns_c_hs = 4, /*%< MIT Hesiod. */ 3761539Srgrimes /* Query class values which do not appear in resource records */ 377170244Sume ns_c_none = 254, /*%< for prereq. sections in update requests */ 378170244Sume ns_c_any = 255, /*%< Wildcard match. */ 37936888Speter ns_c_max = 65536 38036888Speter} ns_class; 3811539Srgrimes 382156960Sume/* DNSSEC constants. */ 383156960Sume 384156960Sumetypedef enum __ns_key_types { 385170244Sume ns_kt_rsa = 1, /*%< key type RSA/MD5 */ 386170244Sume ns_kt_dh = 2, /*%< Diffie Hellman */ 387170244Sume ns_kt_dsa = 3, /*%< Digital Signature Standard (MANDATORY) */ 388170244Sume ns_kt_private = 254 /*%< Private key type starts with OID */ 389156960Sume} ns_key_types; 390156960Sume 391156960Sumetypedef enum __ns_cert_types { 392170244Sume cert_t_pkix = 1, /*%< PKIX (X.509v3) */ 393170244Sume cert_t_spki = 2, /*%< SPKI */ 394170244Sume cert_t_pgp = 3, /*%< PGP */ 395170244Sume cert_t_url = 253, /*%< URL private type */ 396170244Sume cert_t_oid = 254 /*%< OID private type */ 397156960Sume} ns_cert_types; 398156960Sume 399156960Sume/* Flags field of the KEY RR rdata. */ 400170244Sume#define NS_KEY_TYPEMASK 0xC000 /*%< Mask for "type" bits */ 401170244Sume#define NS_KEY_TYPE_AUTH_CONF 0x0000 /*%< Key usable for both */ 402170244Sume#define NS_KEY_TYPE_CONF_ONLY 0x8000 /*%< Key usable for confidentiality */ 403170244Sume#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /*%< Key usable for authentication */ 404170244Sume#define NS_KEY_TYPE_NO_KEY 0xC000 /*%< No key usable for either; no key */ 40521056Speter/* The type bits can also be interpreted independently, as single bits: */ 406170244Sume#define NS_KEY_NO_AUTH 0x8000 /*%< Key unusable for authentication */ 407170244Sume#define NS_KEY_NO_CONF 0x4000 /*%< Key unusable for confidentiality */ 408156960Sume#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */ 409170244Sume#define NS_KEY_EXTENDED_FLAGS 0x1000 /*%< reserved - must be zero */ 410170244Sume#define NS_KEY_RESERVED4 0x0800 /*%< reserved - must be zero */ 411170244Sume#define NS_KEY_RESERVED5 0x0400 /*%< reserved - must be zero */ 412170244Sume#define NS_KEY_NAME_TYPE 0x0300 /*%< these bits determine the type */ 413170244Sume#define NS_KEY_NAME_USER 0x0000 /*%< key is assoc. with user */ 414170244Sume#define NS_KEY_NAME_ENTITY 0x0200 /*%< key is assoc. with entity eg host */ 415170244Sume#define NS_KEY_NAME_ZONE 0x0100 /*%< key is zone key */ 416170244Sume#define NS_KEY_NAME_RESERVED 0x0300 /*%< reserved meaning */ 417170244Sume#define NS_KEY_RESERVED8 0x0080 /*%< reserved - must be zero */ 418170244Sume#define NS_KEY_RESERVED9 0x0040 /*%< reserved - must be zero */ 419170244Sume#define NS_KEY_RESERVED10 0x0020 /*%< reserved - must be zero */ 420170244Sume#define NS_KEY_RESERVED11 0x0010 /*%< reserved - must be zero */ 421170244Sume#define NS_KEY_SIGNATORYMASK 0x000F /*%< key can sign RR's of same name */ 422156960Sume#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ 42336888Speter NS_KEY_RESERVED4 | \ 424156960Sume NS_KEY_RESERVED5 | \ 425156960Sume NS_KEY_RESERVED8 | \ 426156960Sume NS_KEY_RESERVED9 | \ 42736888Speter NS_KEY_RESERVED10 | \ 42836888Speter NS_KEY_RESERVED11 ) 429170244Sume#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */ 43021056Speter/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */ 431170244Sume#define NS_ALG_MD5RSA 1 /*%< MD5 with RSA */ 432170244Sume#define NS_ALG_DH 2 /*%< Diffie Hellman KEY */ 433170244Sume#define NS_ALG_DSA 3 /*%< DSA KEY */ 434156960Sume#define NS_ALG_DSS NS_ALG_DSA 435170244Sume#define NS_ALG_EXPIRE_ONLY 253 /*%< No alg, no security */ 436170244Sume#define NS_ALG_PRIVATE_OID 254 /*%< Key begins with OID giving alg */ 437156960Sume/* Protocol values */ 438156960Sume/* value 0 is reserved */ 439156960Sume#define NS_KEY_PROT_TLS 1 440156960Sume#define NS_KEY_PROT_EMAIL 2 441156960Sume#define NS_KEY_PROT_DNSSEC 3 442156960Sume#define NS_KEY_PROT_IPSEC 4 443156960Sume#define NS_KEY_PROT_ANY 255 444156960Sume 44521056Speter/* Signatures */ 446170244Sume#define NS_MD5RSA_MIN_BITS 512 /*%< Size of a mod or exp in bits */ 447156960Sume#define NS_MD5RSA_MAX_BITS 4096 44836888Speter /* Total of binary mod and exp */ 44936888Speter#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) 45036888Speter /* Max length of text sig block */ 45136888Speter#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) 452156960Sume#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) 453156960Sume#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) 45421056Speter 455156960Sume#define NS_DSA_SIG_SIZE 41 456156960Sume#define NS_DSA_MIN_SIZE 213 457156960Sume#define NS_DSA_MAX_BYTES 405 458156960Sume 45936888Speter/* Offsets into SIG record rdata to find various values */ 460170244Sume#define NS_SIG_TYPE 0 /*%< Type flags */ 461170244Sume#define NS_SIG_ALG 2 /*%< Algorithm */ 462170244Sume#define NS_SIG_LABELS 3 /*%< How many labels in name */ 463170244Sume#define NS_SIG_OTTL 4 /*%< Original TTL */ 464170244Sume#define NS_SIG_EXPIR 8 /*%< Expiration time */ 465170244Sume#define NS_SIG_SIGNED 12 /*%< Signature time */ 466170244Sume#define NS_SIG_FOOT 16 /*%< Key footprint */ 467170244Sume#define NS_SIG_SIGNER 18 /*%< Domain name of who signed it */ 46836888Speter/* How RR types are represented as bit-flags in NXT records */ 46936888Speter#define NS_NXT_BITS 8 47036888Speter#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) 47136888Speter#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) 47236888Speter#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) 473156960Sume#define NS_NXT_MAX 127 47421056Speter 475170244Sume/*% 476186090Sume * EDNS0 extended flags and option codes, host order. 477156960Sume */ 478156960Sume#define NS_OPT_DNSSEC_OK 0x8000U 479186090Sume#define NS_OPT_NSID 3 4801539Srgrimes 481170244Sume/*% 4821539Srgrimes * Inline versions of get/put short/long. Pointer is advanced. 4831539Srgrimes */ 484156960Sume#define NS_GET16(s, cp) do { \ 485156960Sume register const u_char *t_cp = (const u_char *)(cp); \ 4863070Spst (s) = ((u_int16_t)t_cp[0] << 8) \ 4873070Spst | ((u_int16_t)t_cp[1]) \ 4883070Spst ; \ 48936888Speter (cp) += NS_INT16SZ; \ 490156960Sume} while (0) 4911539Srgrimes 492156960Sume#define NS_GET32(l, cp) do { \ 493156960Sume register const u_char *t_cp = (const u_char *)(cp); \ 4943070Spst (l) = ((u_int32_t)t_cp[0] << 24) \ 4953070Spst | ((u_int32_t)t_cp[1] << 16) \ 4963070Spst | ((u_int32_t)t_cp[2] << 8) \ 4973070Spst | ((u_int32_t)t_cp[3]) \ 4983070Spst ; \ 49936888Speter (cp) += NS_INT32SZ; \ 500156960Sume} while (0) 5011539Srgrimes 502156960Sume#define NS_PUT16(s, cp) do { \ 5031539Srgrimes register u_int16_t t_s = (u_int16_t)(s); \ 5041539Srgrimes register u_char *t_cp = (u_char *)(cp); \ 5051539Srgrimes *t_cp++ = t_s >> 8; \ 5061539Srgrimes *t_cp = t_s; \ 50736888Speter (cp) += NS_INT16SZ; \ 508156960Sume} while (0) 5091539Srgrimes 510156960Sume#define NS_PUT32(l, cp) do { \ 5111539Srgrimes register u_int32_t t_l = (u_int32_t)(l); \ 5121539Srgrimes register u_char *t_cp = (u_char *)(cp); \ 5131539Srgrimes *t_cp++ = t_l >> 24; \ 5141539Srgrimes *t_cp++ = t_l >> 16; \ 5151539Srgrimes *t_cp++ = t_l >> 8; \ 5161539Srgrimes *t_cp = t_l; \ 51736888Speter (cp) += NS_INT32SZ; \ 518156960Sume} while (0) 5191539Srgrimes 520170244Sume/*% 521156960Sume * ANSI C identifier hiding for bind's lib/nameser. 52236888Speter */ 523156960Sume#define ns_msg_getflag __ns_msg_getflag 52436888Speter#define ns_get16 __ns_get16 52536888Speter#define ns_get32 __ns_get32 52636888Speter#define ns_put16 __ns_put16 52736888Speter#define ns_put32 __ns_put32 52836888Speter#define ns_initparse __ns_initparse 529156960Sume#define ns_skiprr __ns_skiprr 53036888Speter#define ns_parserr __ns_parserr 531269867Sume#define ns_parserr2 __ns_parserr2 53236888Speter#define ns_sprintrr __ns_sprintrr 53336888Speter#define ns_sprintrrf __ns_sprintrrf 53436888Speter#define ns_format_ttl __ns_format_ttl 53536888Speter#define ns_parse_ttl __ns_parse_ttl 536156960Sume#if 0 537156960Sume#define ns_datetosecs __ns_datetosecs 538156960Sume#endif 539156960Sume#define ns_name_ntol __ns_name_ntol 54036888Speter#define ns_name_ntop __ns_name_ntop 54136888Speter#define ns_name_pton __ns_name_pton 542269867Sume#define ns_name_pton2 __ns_name_pton2 54336888Speter#define ns_name_unpack __ns_name_unpack 544269867Sume#define ns_name_unpack2 __ns_name_unpack2 54536888Speter#define ns_name_pack __ns_name_pack 54636888Speter#define ns_name_compress __ns_name_compress 54736888Speter#define ns_name_uncompress __ns_name_uncompress 548156467Sume#define ns_name_skip __ns_name_skip 549156960Sume#define ns_name_rollback __ns_name_rollback 550269867Sume#define ns_name_length __ns_name_length 551269867Sume#define ns_name_eq __ns_name_eq 552269867Sume#define ns_name_owned __ns_name_owned 553269867Sume#define ns_name_map __ns_name_map 554269867Sume#define ns_name_labels __ns_name_labels 555156960Sume#if 0 556156960Sume#define ns_sign __ns_sign 557156960Sume#define ns_sign2 __ns_sign2 558156960Sume#define ns_sign_tcp __ns_sign_tcp 559156960Sume#define ns_sign_tcp2 __ns_sign_tcp2 560156960Sume#define ns_sign_tcp_init __ns_sign_tcp_init 561156960Sume#define ns_find_tsig __ns_find_tsig 562156960Sume#define ns_verify __ns_verify 563156960Sume#define ns_verify_tcp __ns_verify_tcp 564156960Sume#define ns_verify_tcp_init __ns_verify_tcp_init 565158787Sume#endif 566156960Sume#define ns_samedomain __ns_samedomain 567158787Sume#if 0 568156960Sume#define ns_subdomain __ns_subdomain 569156960Sume#endif 570156960Sume#define ns_makecanon __ns_makecanon 571156960Sume#define ns_samename __ns_samename 572269867Sume#define ns_newmsg_init __ns_newmsg_init 573269867Sume#define ns_newmsg_copy __ns_newmsg_copy 574269867Sume#define ns_newmsg_id __ns_newmsg_id 575269867Sume#define ns_newmsg_flag __ns_newmsg_flag 576269867Sume#define ns_newmsg_q __ns_newmsg_q 577269867Sume#define ns_newmsg_rr __ns_newmsg_rr 578269867Sume#define ns_newmsg_done __ns_newmsg_done 579269867Sume#define ns_rdata_unpack __ns_rdata_unpack 580269867Sume#define ns_rdata_equal __ns_rdata_equal 581269867Sume#define ns_rdata_refers __ns_rdata_refers 58236888Speter 58336888Speter__BEGIN_DECLS 584156960Sumeint ns_msg_getflag(ns_msg, int); 58593032Simpu_int ns_get16(const u_char *); 58693032Simpu_long ns_get32(const u_char *); 58793032Simpvoid ns_put16(u_int, u_char *); 58893032Simpvoid ns_put32(u_long, u_char *); 58993032Simpint ns_initparse(const u_char *, int, ns_msg *); 590156960Sumeint ns_skiprr(const u_char *, const u_char *, ns_sect, int); 59193032Simpint ns_parserr(ns_msg *, ns_sect, int, ns_rr *); 592269867Sumeint ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *); 59393032Simpint ns_sprintrr(const ns_msg *, const ns_rr *, 59493032Simp const char *, const char *, char *, size_t); 59593032Simpint ns_sprintrrf(const u_char *, size_t, const char *, 59693032Simp ns_class, ns_type, u_long, const u_char *, 59793032Simp size_t, const char *, const char *, 59893032Simp char *, size_t); 59993032Simpint ns_format_ttl(u_long, char *, size_t); 60093032Simpint ns_parse_ttl(const char *, u_long *); 601156960Sume#if 0 602156960Sumeu_int32_t ns_datetosecs(const char *cp, int *errp); 603156960Sume#endif 604156960Sumeint ns_name_ntol(const u_char *, u_char *, size_t); 60593032Simpint ns_name_ntop(const u_char *, char *, size_t); 60693032Simpint ns_name_pton(const char *, u_char *, size_t); 607269867Sumeint ns_name_pton2(const char *, u_char *, size_t, size_t *); 60893032Simpint ns_name_unpack(const u_char *, const u_char *, 60993032Simp const u_char *, u_char *, size_t); 610269867Sumeint ns_name_unpack2(const u_char *, const u_char *, 611269867Sume const u_char *, u_char *, size_t, 612269867Sume size_t *); 61393032Simpint ns_name_pack(const u_char *, u_char *, int, 61493032Simp const u_char **, const u_char **); 61593032Simpint ns_name_uncompress(const u_char *, const u_char *, 61693032Simp const u_char *, char *, size_t); 61793032Simpint ns_name_compress(const char *, u_char *, size_t, 61893032Simp const u_char **, const u_char **); 61993032Simpint ns_name_skip(const u_char **, const u_char *); 620156960Sumevoid ns_name_rollback(const u_char *, const u_char **, 621156960Sume const u_char **); 622269867Sumessize_t ns_name_length(ns_nname_ct, size_t); 623269867Sumeint ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t); 624269867Sumeint ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int); 625269867Sumeint ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int); 626269867Sumeint ns_name_labels(ns_nname_ct, size_t); 627156960Sume#if 0 628156960Sumeint ns_sign(u_char *, int *, int, int, void *, 629156960Sume const u_char *, int, u_char *, int *, time_t); 630156960Sumeint ns_sign2(u_char *, int *, int, int, void *, 631156960Sume const u_char *, int, u_char *, int *, time_t, 632156960Sume u_char **, u_char **); 633156960Sumeint ns_sign_tcp(u_char *, int *, int, int, 634156960Sume ns_tcp_tsig_state *, int); 635156960Sumeint ns_sign_tcp2(u_char *, int *, int, int, 636156960Sume ns_tcp_tsig_state *, int, 637156960Sume u_char **, u_char **); 638156960Sumeint ns_sign_tcp_init(void *, const u_char *, int, 639156960Sume ns_tcp_tsig_state *); 640156960Sumeu_char *ns_find_tsig(u_char *, u_char *); 641156960Sumeint ns_verify(u_char *, int *, void *, 642156960Sume const u_char *, int, u_char *, int *, 643156960Sume time_t *, int); 644156960Sumeint ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); 645156960Sumeint ns_verify_tcp_init(void *, const u_char *, int, 646156960Sume ns_tcp_tsig_state *); 647158787Sume#endif 648156960Sumeint ns_samedomain(const char *, const char *); 649158787Sume#if 0 650156960Sumeint ns_subdomain(const char *, const char *); 651156960Sume#endif 652156960Sumeint ns_makecanon(const char *, char *, size_t); 653156960Sumeint ns_samename(const char *, const char *); 654269867Sumeint ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *); 655269867Sumeint ns_newmsg_copy(ns_newmsg *, ns_msg *); 656269867Sumevoid ns_newmsg_id(ns_newmsg *handle, u_int16_t id); 657269867Sumevoid ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value); 658269867Sumeint ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname, 659269867Sume ns_type qtype, ns_class qclass); 660269867Sumeint ns_newmsg_rr(ns_newmsg *handle, ns_sect sect, 661269867Sume ns_nname_ct name, ns_type type, 662269867Sume ns_class rr_class, u_int32_t ttl, 663269867Sume u_int16_t rdlen, const u_char *rdata); 664269867Sumesize_t ns_newmsg_done(ns_newmsg *handle); 665269867Sumessize_t ns_rdata_unpack(const u_char *, const u_char *, ns_type, 666269867Sume const u_char *, size_t, u_char *, size_t); 667269867Sumeint ns_rdata_equal(ns_type, 668269867Sume const u_char *, size_t, 669269867Sume const u_char *, size_t); 670269867Sumeint ns_rdata_refers(ns_type, 671269867Sume const u_char *, size_t, 672269867Sume const u_char *); 67336888Speter__END_DECLS 67436888Speter 67536888Speter#ifdef BIND_4_COMPAT 67636888Speter#include <arpa/nameser_compat.h> 67736888Speter#endif 67836888Speter 67910132Speter#endif /* !_ARPA_NAMESER_H_ */ 680170244Sume/*! \file */ 681