"Fossies" - the Fresh Open Source Software Archive

Member "libspf2-1.2.10/src/libreplace/arpa_nameser.h" (28 Jan 2012, 22367 Bytes) of package /linux/privat/libspf2-1.2.10.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "arpa_nameser.h" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * Copyright (c) 1983, 1989, 1993
    3  *    The Regents of the University of California.  All rights reserved.
    4  * 
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  * 3. All advertising materials mentioning features or use of this software
   14  *    must display the following acknowledgement:
   15  *  This product includes software developed by the University of
   16  *  California, Berkeley and its contributors.
   17  * 4. Neither the name of the University nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  * 
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  */
   33 
   34 /*
   35  * Copyright (c) 1996-1999 by Internet Software Consortium.
   36  *
   37  * Permission to use, copy, modify, and distribute this software for any
   38  * purpose with or without fee is hereby granted, provided that the above
   39  * copyright notice and this permission notice appear in all copies.
   40  *
   41  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
   42  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
   43  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
   44  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
   45  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
   46  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
   47  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
   48  * SOFTWARE.
   49  */
   50 
   51 /*
   52  *  $Id: nameser.h,v 1.2.2.4 2003/06/27 03:51:37 marka Exp $
   53  */
   54 
   55 #ifndef REPLACE_ARPA_NAMESER_H_
   56 #define REPLACE_ARPA_NAMESER_H_
   57 
   58 #ifndef __P
   59 #  define __P(x) x
   60 #endif
   61 
   62 #if defined( HAVE_ARPA_NAMESER_H ) && defined( HAVE_NS_TYPE )
   63 #define dn_expand       __dn_expand
   64 int     dn_expand __P((const u_char *, const u_char *, const u_char *,
   65                    char *, int));
   66 #endif
   67 #define dn_skipname     __dn_skipname
   68 int     dn_skipname __P((const u_char *, const u_char *));
   69 
   70 #include <sys/param.h>
   71 #ifdef HAVE_SYS_TYPES_H
   72 #include <sys/types.h>    /* types (u_char .. etc..) */
   73 #endif
   74 
   75 #ifdef HAVE_INTTYPES_H
   76 #include <inttypes.h>
   77 #endif
   78 
   79 #ifndef HAVE_U_INT8_T
   80 # ifdef HAVE_UINT8_T
   81     typedef uint8_t u_int8_t;
   82 # else
   83     typedef unsigned char u_int8_t;
   84 # endif
   85 #endif
   86 
   87 #ifndef HAVE_U_INT16_T
   88 # ifdef HAVE_UINT16_T
   89     typedef uint16_t u_int16_t;
   90 # else
   91     typedef unsigned short u_int16_t;
   92 # endif
   93 #endif
   94 
   95 #ifndef HAVE_U_INT32_T
   96 # ifdef HAVE_UINT32_T
   97     typedef uint32_t u_int32_t;
   98 # else
   99     typedef unsigned int u_int32_t;
  100 # endif
  101 #endif
  102 
  103 
  104 #if 0
  105 #if (!defined(BSD)) || (BSD < 199306)
  106 # include <sys/bitypes.h>
  107 #else
  108 # include <sys/types.h>
  109 #endif
  110 #include <sys/cdefs.h>
  111 #endif
  112 
  113 /*
  114  * Revision information.  This is the release date in YYYYMMDD format.
  115  * It can change every day so the right thing to do with it is use it
  116  * in preprocessor commands such as "#if (__NAMESER > 19931104)".  Do not
  117  * compare for equality; rather, use it to determine whether your libbind.a
  118  * contains a new enough lib/nameser/ to support the feature you need.
  119  */
  120 
  121 #define __NAMESER   19991006    /* New interface version stamp. */
  122 
  123 /*
  124  * Define constants based on RFC 883, RFC 1034, RFC 1035
  125  */
  126 #define NS_PACKETSZ 512 /* default UDP packet size */
  127 #define NS_MAXDNAME 1025    /* maximum domain name */
  128 #define NS_MAXMSG   65535   /* maximum message size */
  129 #define NS_MAXCDNAME    255 /* maximum compressed domain name */
  130 #define NS_MAXLABEL 63  /* maximum length of domain label */
  131 #define NS_HFIXEDSZ 12  /* #/bytes of fixed data in header */
  132 #define NS_QFIXEDSZ 4   /* #/bytes of fixed data in query */
  133 #define NS_RRFIXEDSZ    10  /* #/bytes of fixed data in r record */
  134 #define NS_INT32SZ  4   /* #/bytes of data in a u_int32_t */
  135 #define NS_INT16SZ  2   /* #/bytes of data in a u_int16_t */
  136 #define NS_INT8SZ   1   /* #/bytes of data in a u_int8_t */
  137 #define NS_INADDRSZ 4   /* IPv4 T_A */
  138 #define NS_IN6ADDRSZ    16  /* IPv6 T_AAAA */
  139 #define NS_CMPRSFLGS    0xc0    /* Flag bits indicating name compression. */
  140 #define NS_DEFAULTPORT  53  /* For both TCP and UDP. */
  141 
  142 /*
  143  * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
  144  * in synch with it.
  145  */
  146 typedef enum __ns_sect {
  147     ns_s_qd = 0,        /* Query: Question. */
  148     ns_s_zn = 0,        /* Update: Zone. */
  149     ns_s_an = 1,        /* Query: Answer. */
  150     ns_s_pr = 1,        /* Update: Prerequisites. */
  151     ns_s_ns = 2,        /* Query: Name servers. */
  152     ns_s_ud = 2,        /* Update: Update. */
  153     ns_s_ar = 3,        /* Query|Update: Additional records. */
  154     ns_s_max = 4
  155 } ns_sect;
  156 
  157 /*
  158  * This is a message handle.  It is caller allocated and has no dynamic data.
  159  * This structure is intended to be opaque to all but ns_parse.c, thus the
  160  * leading _'s on the member names.  Use the accessor functions, not the _'s.
  161  */
  162 typedef struct __ns_msg {
  163     const u_char    *_msg, *_eom;
  164     u_int16_t   _id, _flags, _counts[ns_s_max];
  165     const u_char    *_sections[ns_s_max];
  166     ns_sect     _sect;
  167     int     _rrnum;
  168     const u_char    *_msg_ptr;
  169 } ns_msg;
  170 
  171 /* Private data structure - do not use from outside library. */
  172 struct _ns_flagdata {  int mask, shift;  };
  173 extern struct _ns_flagdata _ns_flagdata[];
  174 
  175 /* Accessor macros - this is part of the public interface. */
  176 
  177 #define ns_msg_id(handle) ((handle)._id + 0)
  178 #define ns_msg_base(handle) ((handle)._msg + 0)
  179 #define ns_msg_end(handle) ((handle)._eom + 0)
  180 #define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
  181 #define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
  182 
  183 /*
  184  * This is a parsed record.  It is caller allocated and has no dynamic data.
  185  */
  186 typedef struct __ns_rr {
  187     char        name[NS_MAXDNAME];
  188     u_int16_t   type;
  189     u_int16_t   rr_class;
  190     u_int32_t   ttl;
  191     u_int16_t   rdlength;
  192     const u_char *  rdata;
  193 } ns_rr;
  194 
  195 /* Accessor macros - this is part of the public interface. */
  196 #define ns_rr_name(rr)  (((rr).name[0] != '\0') ? (rr).name : ".")
  197 #define ns_rr_type(rr)  ((ns_type)((rr).type + 0))
  198 #define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0))
  199 #define ns_rr_ttl(rr)   ((rr).ttl + 0)
  200 #define ns_rr_rdlen(rr) ((rr).rdlength + 0)
  201 #define ns_rr_rdata(rr) ((rr).rdata + 0)
  202 
  203 /*
  204  * These don't have to be in the same order as in the packet flags word,
  205  * and they can even overlap in some cases, but they will need to be kept
  206  * in synch with ns_parse.c:ns_flagdata[].
  207  */
  208 typedef enum __ns_flag {
  209     ns_f_qr,        /* Question/Response. */
  210     ns_f_opcode,        /* Operation code. */
  211     ns_f_aa,        /* Authoritative Answer. */
  212     ns_f_tc,        /* Truncation occurred. */
  213     ns_f_rd,        /* Recursion Desired. */
  214     ns_f_ra,        /* Recursion Available. */
  215     ns_f_z,         /* MBZ. */
  216     ns_f_ad,        /* Authentic Data (DNSSEC). */
  217     ns_f_cd,        /* Checking Disabled (DNSSEC). */
  218     ns_f_rcode,     /* Response code. */
  219     ns_f_max
  220 } ns_flag;
  221 
  222 /*
  223  * Currently defined opcodes.
  224  */
  225 typedef enum __ns_opcode {
  226     ns_o_query = 0,     /* Standard query. */
  227     ns_o_iquery = 1,    /* Inverse query (deprecated/unsupported). */
  228     ns_o_status = 2,    /* Name server status query (unsupported). */
  229                 /* Opcode 3 is undefined/reserved. */
  230     ns_o_notify = 4,    /* Zone change notification. */
  231     ns_o_update = 5,    /* Zone update message. */
  232     ns_o_max = 6
  233 } ns_opcode;
  234 
  235 /*
  236  * Currently defined response codes.
  237  */
  238 typedef enum __ns_rcode {
  239     ns_r_noerror = 0,   /* No error occurred. */
  240     ns_r_formerr = 1,   /* Format error. */
  241     ns_r_servfail = 2,  /* Server failure. */
  242     ns_r_nxdomain = 3,  /* Name error. */
  243     ns_r_notimpl = 4,   /* Unimplemented. */
  244     ns_r_refused = 5,   /* Operation refused. */
  245     /* these are for BIND_UPDATE */
  246     ns_r_yxdomain = 6,  /* Name exists */
  247     ns_r_yxrrset = 7,   /* RRset exists */
  248     ns_r_nxrrset = 8,   /* RRset does not exist */
  249     ns_r_notauth = 9,   /* Not authoritative for zone */
  250     ns_r_notzone = 10,  /* Zone of record different from zone section */
  251     ns_r_max = 11,
  252     /* The following are EDNS extended rcodes */
  253     ns_r_badvers = 16,
  254     /* The following are TSIG errors */
  255     ns_r_badsig = 16,
  256     ns_r_badkey = 17,
  257     ns_r_badtime = 18
  258 } ns_rcode;
  259 
  260 /* BIND_UPDATE */
  261 typedef enum __ns_update_operation {
  262     ns_uop_delete = 0,
  263     ns_uop_add = 1,
  264     ns_uop_max = 2
  265 } ns_update_operation;
  266 
  267 /*
  268  * This structure is used for TSIG authenticated messages
  269  */
  270 struct ns_tsig_key {
  271         char name[NS_MAXDNAME], alg[NS_MAXDNAME];
  272         unsigned char *data;
  273         int len;
  274 };
  275 typedef struct ns_tsig_key ns_tsig_key;
  276 
  277 /*
  278  * This structure is used for TSIG authenticated TCP messages
  279  */
  280 struct ns_tcp_tsig_state {
  281     int counter;
  282     struct dst_key *key;
  283     void *ctx;
  284     unsigned char sig[NS_PACKETSZ];
  285     int siglen;
  286 };
  287 typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
  288 
  289 #define NS_TSIG_FUDGE 300
  290 #define NS_TSIG_TCP_COUNT 100
  291 #define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
  292 
  293 #define NS_TSIG_ERROR_NO_TSIG -10
  294 #define NS_TSIG_ERROR_NO_SPACE -11
  295 #define NS_TSIG_ERROR_FORMERR -12
  296 
  297 /*
  298  * Currently defined type values for resources and queries.
  299  */
  300 typedef enum __ns_type {
  301     ns_t_invalid = 0,   /* Cookie. */
  302     ns_t_a = 1,     /* Host address. */
  303     ns_t_ns = 2,        /* Authoritative server. */
  304     ns_t_md = 3,        /* Mail destination. */
  305     ns_t_mf = 4,        /* Mail forwarder. */
  306     ns_t_cname = 5,     /* Canonical name. */
  307     ns_t_soa = 6,       /* Start of authority zone. */
  308     ns_t_mb = 7,        /* Mailbox domain name. */
  309     ns_t_mg = 8,        /* Mail group member. */
  310     ns_t_mr = 9,        /* Mail rename name. */
  311     ns_t_null = 10,     /* Null resource record. */
  312     ns_t_wks = 11,      /* Well known service. */
  313     ns_t_ptr = 12,      /* Domain name pointer. */
  314     ns_t_hinfo = 13,    /* Host information. */
  315     ns_t_minfo = 14,    /* Mailbox information. */
  316     ns_t_mx = 15,       /* Mail routing information. */
  317     ns_t_txt = 16,      /* Text strings. */
  318     ns_t_rp = 17,       /* Responsible person. */
  319     ns_t_afsdb = 18,    /* AFS cell database. */
  320     ns_t_x25 = 19,      /* X_25 calling address. */
  321     ns_t_isdn = 20,     /* ISDN calling address. */
  322     ns_t_rt = 21,       /* Router. */
  323     ns_t_nsap = 22,     /* NSAP address. */
  324     ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
  325     ns_t_sig = 24,      /* Security signature. */
  326     ns_t_key = 25,      /* Security key. */
  327     ns_t_px = 26,       /* X.400 mail mapping. */
  328     ns_t_gpos = 27,     /* Geographical position (withdrawn). */
  329     ns_t_aaaa = 28,     /* Ip6 Address. */
  330     ns_t_loc = 29,      /* Location Information. */
  331     ns_t_nxt = 30,      /* Next domain (security). */
  332     ns_t_eid = 31,      /* Endpoint identifier. */
  333     ns_t_nimloc = 32,   /* Nimrod Locator. */
  334     ns_t_srv = 33,      /* Server Selection. */
  335     ns_t_atma = 34,     /* ATM Address */
  336     ns_t_naptr = 35,    /* Naming Authority PoinTeR */
  337     ns_t_kx = 36,       /* Key Exchange */
  338     ns_t_cert = 37,     /* Certification record */
  339     ns_t_a6 = 38,       /* IPv6 address (deprecates AAAA) */
  340     ns_t_dname = 39,    /* Non-terminal DNAME (for IPv6) */
  341     ns_t_sink = 40,     /* Kitchen sink (experimentatl) */
  342     ns_t_opt = 41,      /* EDNS0 option (meta-RR) */
  343     ns_t_apl = 42,      /* Address prefix list (RFC 3123) */
  344     ns_t_tkey = 249,    /* Transaction key */
  345     ns_t_tsig = 250,    /* Transaction signature. */
  346     ns_t_ixfr = 251,    /* Incremental zone transfer. */
  347     ns_t_axfr = 252,    /* Transfer zone of authority. */
  348     ns_t_mailb = 253,   /* Transfer mailbox records. */
  349     ns_t_maila = 254,   /* Transfer mail agent records. */
  350     ns_t_any = 255,     /* Wildcard match. */
  351     ns_t_zxfr = 256,    /* BIND-specific, nonstandard. */
  352     ns_t_max = 65536
  353 } ns_type;
  354 
  355 /* Exclusively a QTYPE? (not also an RTYPE) */
  356 #define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
  357               (t) == ns_t_mailb || (t) == ns_t_maila)
  358 /* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
  359 #define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
  360 /* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
  361 #define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
  362 #define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
  363 #define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
  364                (t) == ns_t_zxfr)
  365 
  366 /*
  367  * Values for class field
  368  */
  369 typedef enum __ns_class {
  370     ns_c_invalid = 0,   /* Cookie. */
  371     ns_c_in = 1,        /* Internet. */
  372     ns_c_2 = 2,     /* unallocated/unsupported. */
  373     ns_c_chaos = 3,     /* MIT Chaos-net. */
  374     ns_c_hs = 4,        /* MIT Hesiod. */
  375     /* Query class values which do not appear in resource records */
  376     ns_c_none = 254,    /* for prereq. sections in update requests */
  377     ns_c_any = 255,     /* Wildcard match. */
  378     ns_c_max = 65536
  379 } ns_class;
  380 
  381 /* DNSSEC constants. */
  382 
  383 typedef enum __ns_key_types {
  384     ns_kt_rsa = 1,      /* key type RSA/MD5 */
  385     ns_kt_dh  = 2,      /* Diffie Hellman */
  386     ns_kt_dsa = 3,      /* Digital Signature Standard (MANDATORY) */
  387     ns_kt_private = 254 /* Private key type starts with OID */
  388 } ns_key_types;
  389 
  390 typedef enum __ns_cert_types {
  391     cert_t_pkix = 1,    /* PKIX (X.509v3) */
  392     cert_t_spki = 2,    /* SPKI */
  393     cert_t_pgp  = 3,    /* PGP */
  394     cert_t_url  = 253,  /* URL private type */
  395     cert_t_oid  = 254   /* OID private type */
  396 } ns_cert_types;
  397 
  398 /* Flags field of the KEY RR rdata. */
  399 #define NS_KEY_TYPEMASK     0xC000  /* Mask for "type" bits */
  400 #define NS_KEY_TYPE_AUTH_CONF   0x0000  /* Key usable for both */
  401 #define NS_KEY_TYPE_CONF_ONLY   0x8000  /* Key usable for confidentiality */
  402 #define NS_KEY_TYPE_AUTH_ONLY   0x4000  /* Key usable for authentication */
  403 #define NS_KEY_TYPE_NO_KEY  0xC000  /* No key usable for either; no key */
  404 /* The type bits can also be interpreted independently, as single bits: */
  405 #define NS_KEY_NO_AUTH      0x8000  /* Key unusable for authentication */
  406 #define NS_KEY_NO_CONF      0x4000  /* Key unusable for confidentiality */
  407 #define NS_KEY_RESERVED2    0x2000  /* Security is *mandatory* if bit=0 */
  408 #define NS_KEY_EXTENDED_FLAGS   0x1000  /* reserved - must be zero */
  409 #define NS_KEY_RESERVED4    0x0800  /* reserved - must be zero */
  410 #define NS_KEY_RESERVED5    0x0400  /* reserved - must be zero */
  411 #define NS_KEY_NAME_TYPE    0x0300  /* these bits determine the type */
  412 #define NS_KEY_NAME_USER    0x0000  /* key is assoc. with user */
  413 #define NS_KEY_NAME_ENTITY  0x0200  /* key is assoc. with entity eg host */
  414 #define NS_KEY_NAME_ZONE    0x0100  /* key is zone key */
  415 #define NS_KEY_NAME_RESERVED    0x0300  /* reserved meaning */
  416 #define NS_KEY_RESERVED8    0x0080  /* reserved - must be zero */
  417 #define NS_KEY_RESERVED9    0x0040  /* reserved - must be zero */
  418 #define NS_KEY_RESERVED10   0x0020  /* reserved - must be zero */
  419 #define NS_KEY_RESERVED11   0x0010  /* reserved - must be zero */
  420 #define NS_KEY_SIGNATORYMASK    0x000F  /* key can sign RR's of same name */
  421 #define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
  422                   NS_KEY_RESERVED4 | \
  423                   NS_KEY_RESERVED5 | \
  424                   NS_KEY_RESERVED8 | \
  425                   NS_KEY_RESERVED9 | \
  426                   NS_KEY_RESERVED10 | \
  427                   NS_KEY_RESERVED11 )
  428 #define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */
  429 
  430 /* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
  431 #define NS_ALG_MD5RSA       1   /* MD5 with RSA */
  432 #define NS_ALG_DH               2   /* Diffie Hellman KEY */
  433 #define NS_ALG_DSA              3   /* DSA KEY */
  434 #define NS_ALG_DSS              NS_ALG_DSA
  435 #define NS_ALG_EXPIRE_ONLY  253 /* No alg, no security */
  436 #define NS_ALG_PRIVATE_OID  254 /* Key begins with OID giving alg */
  437 
  438 /* Protocol values  */
  439 /* value 0 is reserved */
  440 #define NS_KEY_PROT_TLS         1
  441 #define NS_KEY_PROT_EMAIL       2
  442 #define NS_KEY_PROT_DNSSEC      3
  443 #define NS_KEY_PROT_IPSEC       4
  444 #define NS_KEY_PROT_ANY     255
  445 
  446 /* Signatures */
  447 #define NS_MD5RSA_MIN_BITS   512    /* Size of a mod or exp in bits */
  448 #define NS_MD5RSA_MAX_BITS  4096
  449     /* Total of binary mod and exp */
  450 #define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
  451     /* Max length of text sig block */
  452 #define NS_MD5RSA_MAX_BASE64    (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
  453 #define NS_MD5RSA_MIN_SIZE  ((NS_MD5RSA_MIN_BITS+7)/8)
  454 #define NS_MD5RSA_MAX_SIZE  ((NS_MD5RSA_MAX_BITS+7)/8)
  455 
  456 #define NS_DSA_SIG_SIZE         41
  457 #define NS_DSA_MIN_SIZE         213
  458 #define NS_DSA_MAX_BYTES        405
  459 
  460 /* Offsets into SIG record rdata to find various values */
  461 #define NS_SIG_TYPE 0   /* Type flags */
  462 #define NS_SIG_ALG  2   /* Algorithm */
  463 #define NS_SIG_LABELS   3   /* How many labels in name */
  464 #define NS_SIG_OTTL 4   /* Original TTL */
  465 #define NS_SIG_EXPIR    8   /* Expiration time */
  466 #define NS_SIG_SIGNED   12  /* Signature time */
  467 #define NS_SIG_FOOT 16  /* Key footprint */
  468 #define NS_SIG_SIGNER   18  /* Domain name of who signed it */
  469 
  470 /* How RR types are represented as bit-flags in NXT records */
  471 #define NS_NXT_BITS 8
  472 #define NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
  473 #define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
  474 #define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
  475 #define NS_NXT_MAX 127
  476 
  477 /*
  478  * EDNS0 extended flags, host order.
  479  */
  480 #define NS_OPT_DNSSEC_OK    0x8000U
  481 
  482 /*
  483  * Inline versions of get/put short/long.  Pointer is advanced.
  484  */
  485 #define NS_GET16(s, cp) do { \
  486     register const u_char *t_cp = (const u_char *)(cp); \
  487     (s) = ((u_int16_t)t_cp[0] << 8) \
  488         | ((u_int16_t)t_cp[1]) \
  489         ; \
  490     (cp) += NS_INT16SZ; \
  491 } while (0)
  492 
  493 #define NS_GET32(l, cp) do { \
  494     register const u_char *t_cp = (const u_char *)(cp); \
  495     (l) = ((u_int32_t)t_cp[0] << 24) \
  496         | ((u_int32_t)t_cp[1] << 16) \
  497         | ((u_int32_t)t_cp[2] << 8) \
  498         | ((u_int32_t)t_cp[3]) \
  499         ; \
  500     (cp) += NS_INT32SZ; \
  501 } while (0)
  502 
  503 #define NS_PUT16(s, cp) do { \
  504     register u_int16_t t_s = (u_int16_t)(s); \
  505     register u_char *t_cp = (u_char *)(cp); \
  506     *t_cp++ = t_s >> 8; \
  507     *t_cp   = t_s; \
  508     (cp) += NS_INT16SZ; \
  509 } while (0)
  510 
  511 #define NS_PUT32(l, cp) do { \
  512     register u_int32_t t_l = (u_int32_t)(l); \
  513     register u_char *t_cp = (u_char *)(cp); \
  514     *t_cp++ = t_l >> 24; \
  515     *t_cp++ = t_l >> 16; \
  516     *t_cp++ = t_l >> 8; \
  517     *t_cp   = t_l; \
  518     (cp) += NS_INT32SZ; \
  519 } while (0)
  520 
  521 /*
  522  * ANSI C identifier hiding for bind's lib/nameser.
  523  */
  524 #define ns_msg_getflag      __ns_msg_getflag
  525 #define ns_get16        __ns_get16
  526 #define ns_get32        __ns_get32
  527 #define ns_put16        __ns_put16
  528 #define ns_put32        __ns_put32
  529 #define ns_initparse        __ns_initparse
  530 #define ns_skiprr       __ns_skiprr
  531 #define ns_parserr      __ns_parserr
  532 #define ns_sprintrr     __ns_sprintrr
  533 #define ns_sprintrrf        __ns_sprintrrf
  534 #define ns_format_ttl       __ns_format_ttl
  535 #define ns_parse_ttl        __ns_parse_ttl
  536 #define ns_datetosecs       __ns_datetosecs
  537 #define ns_name_ntol        __ns_name_ntol
  538 #define ns_name_ntop        __ns_name_ntop
  539 #define ns_name_pton        __ns_name_pton
  540 #define ns_name_unpack      __ns_name_unpack
  541 #define ns_name_pack        __ns_name_pack
  542 #define ns_name_compress    __ns_name_compress
  543 #define ns_name_uncompress  __ns_name_uncompress
  544 #define ns_name_skip        __ns_name_skip
  545 #define ns_name_rollback    __ns_name_rollback
  546 #define ns_sign         __ns_sign
  547 #define ns_sign2        __ns_sign2
  548 #define ns_sign_tcp     __ns_sign_tcp
  549 #define ns_sign_tcp2        __ns_sign_tcp2
  550 #define ns_sign_tcp_init    __ns_sign_tcp_init
  551 #define ns_find_tsig        __ns_find_tsig
  552 #define ns_verify       __ns_verify
  553 #define ns_verify_tcp       __ns_verify_tcp
  554 #define ns_verify_tcp_init  __ns_verify_tcp_init
  555 #define ns_samedomain       __ns_samedomain
  556 #define ns_subdomain        __ns_subdomain
  557 #define ns_makecanon        __ns_makecanon
  558 #define ns_samename     __ns_samename
  559 
  560 
  561 int     ns_msg_getflag __P((ns_msg, int));
  562 u_int       ns_get16 __P((const u_char *));
  563 u_long      ns_get32 __P((const u_char *));
  564 void        ns_put16 __P((u_int, u_char *));
  565 void        ns_put32 __P((u_long, u_char *));
  566 int     ns_initparse __P((const u_char *, int, ns_msg *));
  567 int     ns_skiprr __P((const u_char *, const u_char *, ns_sect, int));
  568 int     ns_parserr __P((ns_msg *, ns_sect, int, ns_rr *));
  569 int     ns_sprintrr __P((const ns_msg *, const ns_rr *,
  570                  const char *, const char *, char *, size_t));
  571 int     ns_sprintrrf __P((const u_char *, size_t, const char *,
  572                   ns_class, ns_type, u_long, const u_char *,
  573                   size_t, const char *, const char *,
  574                   char *, size_t));
  575 int     ns_format_ttl __P((u_long, char *, size_t));
  576 int     ns_parse_ttl __P((const char *, u_long *));
  577 u_int32_t   ns_datetosecs __P((const char *cp, int *errp));
  578 int     ns_name_ntol __P((const u_char *, u_char *, size_t));
  579 int     ns_name_ntop __P((const u_char *, char *, size_t));
  580 int     ns_name_pton __P((const char *, u_char *, size_t));
  581 int     ns_name_unpack __P((const u_char *, const u_char *,
  582                     const u_char *, u_char *, size_t));
  583 int     ns_name_pack __P((const u_char *, u_char *, int,
  584                   const u_char **, const u_char **));
  585 int     ns_name_uncompress __P((const u_char *, const u_char *,
  586                     const u_char *, char *, size_t));
  587 int     ns_name_compress __P((const char *, u_char *, size_t,
  588                       const u_char **, const u_char **));
  589 int     ns_name_skip __P((const u_char **, const u_char *));
  590 void        ns_name_rollback __P((const u_char *, const u_char **,
  591                       const u_char **));
  592 int     ns_sign __P((u_char *, int *, int, int, void *,
  593                  const u_char *, int, u_char *, int *, time_t));
  594 int     ns_sign2 __P((u_char *, int *, int, int, void *,
  595                   const u_char *, int, u_char *, int *, time_t,
  596                   u_char **, u_char **));
  597 int     ns_sign_tcp __P((u_char *, int *, int, int,
  598                  ns_tcp_tsig_state *, int));
  599 int     ns_sign_tcp2 __P((u_char *, int *, int, int,
  600                   ns_tcp_tsig_state *, int,
  601                   u_char **, u_char **));
  602 int     ns_sign_tcp_init __P((void *, const u_char *, int,
  603                     ns_tcp_tsig_state *));
  604 u_char      *ns_find_tsig __P((u_char *, u_char *));
  605 int     ns_verify __P((u_char *, int *, void *,
  606                    const u_char *, int, u_char *, int *,
  607                    time_t *, int));
  608 int     ns_verify_tcp __P((u_char *, int *, ns_tcp_tsig_state *, int));
  609 int     ns_verify_tcp_init __P((void *, const u_char *, int,
  610                     ns_tcp_tsig_state *));
  611 int     ns_samedomain __P((const char *, const char *));
  612 int     ns_subdomain __P((const char *, const char *));
  613 int     ns_makecanon __P((const char *, char *, size_t));
  614 int     ns_samename __P((const char *, const char *));
  615 
  616 
  617 #endif /* !REPLACE_ARPA_NAMESER_H_ */