home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / arpa / nameser.h < prev    next >
Text File  |  1999-05-11  |  19KB  |  394 lines

  1. /*
  2.  * ++Copyright++ 1983, 1989, 1993
  3.  * -
  4.  * Copyright (c) 1983, 1989, 1993
  5.  *    The Regents of the University of California.  All rights reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  * 1. Redistributions of source code must retain the above copyright
  11.  *    notice, this list of conditions and the following disclaimer.
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in the
  14.  *    documentation and/or other materials provided with the distribution.
  15.  * 3. All advertising materials mentioning features or use of this software
  16.  *    must display the following acknowledgement:
  17.  *      This product includes software developed by the University of
  18.  *      California, Berkeley and its contributors.
  19.  * 4. Neither the name of the University nor the names of its contributors
  20.  *    may be used to endorse or promote products derived from this software
  21.  *    without specific prior written permission.
  22.  *
  23.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  24.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  27.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  29.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  30.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  31.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  32.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  33.  * SUCH DAMAGE.
  34.  * -
  35.  * Portions Copyright (c) 1993 by Digital Equipment Corporation.
  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, and that
  40.  * the name of Digital Equipment Corporation not be used in advertising or
  41.  * publicity pertaining to distribution of the document or software without
  42.  * specific, written prior permission.
  43.  *
  44.  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
  45.  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
  46.  * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
  47.  * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  48.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  49.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  50.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  51.  * SOFTWARE.
  52.  * -
  53.  * Portions Copyright (c) 1995 by International Business Machines, Inc.
  54.  *
  55.  * International Business Machines, Inc. (hereinafter called IBM) grants
  56.  * permission under its copyrights to use, copy, modify, and distribute this
  57.  * Software with or without fee, provided that the above copyright notice and
  58.  * all paragraphs of this notice appear in all copies, and that the name of IBM
  59.  * not be used in connection with the marketing of any product incorporating
  60.  * the Software or modifications thereof, without specific, written prior
  61.  * permission.
  62.  *
  63.  * To the extent it has a right to do so, IBM grants an immunity from suit
  64.  * under its patents, if any, for the use, sale or manufacture of products to
  65.  * the extent that such products are used for performing Domain Name System
  66.  * dynamic updates in TCP/IP networks by means of the Software.  No immunity is
  67.  * granted for any product per se or for any other function of any product.
  68.  *
  69.  * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
  70.  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  71.  * PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
  72.  * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
  73.  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
  74.  * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
  75.  * --Copyright--
  76.  */
  77.  
  78. /*
  79.  *      @(#)nameser.h   8.1 (Berkeley) 6/2/93
  80.  *      $Id: nameser.h,v 8.11 1996/10/08 04:51:02 vixie Exp $
  81.  */
  82.  
  83. #ifndef _ARPA_NAMESER_H_
  84. #define _ARPA_NAMESER_H_
  85.  
  86. #ifdef TCPV40HDRS
  87. #include <stack16\arpa\nameser.h>
  88. #else
  89. #include <sys/param.h>
  90. #include <types.h>
  91. #include <sys/cdefs.h>
  92.  
  93. /*
  94.  * revision information.  this is the release date in YYYYMMDD format.
  95.  * it can change every day so the right thing to do with it is use it
  96.  * in preprocessor commands such as "#if (__BIND > 19931104)".  do not
  97.  * compare for equality; rather, use it to determine whether your resolver
  98.  * is new enough to contain a certain feature.
  99.  */
  100.  
  101. #define __BIND          19960801        /* interface version stamp */
  102.  
  103. /*
  104.  * Define constants based on rfc883
  105.  */
  106. #define PACKETSZ        512             /* maximum packet size */
  107. #define MAXDNAME        1025            /* maximum presentation domain name */
  108. #define MAXCDNAME       255             /* maximum compressed domain name */
  109. #define MAXLABEL        63              /* maximum length of domain label */
  110. #define HFIXEDSZ        12              /* #/bytes of fixed data in header */
  111. #define QFIXEDSZ        4               /* #/bytes of fixed data in query */
  112. #define RRFIXEDSZ       10              /* #/bytes of fixed data in r record */
  113. #define INT32SZ         4               /* for systems without 32-bit ints */
  114. #define INT16SZ         2               /* for systems without 16-bit ints */
  115. #define INADDRSZ        4               /* IPv4 T_A */
  116. #define IN6ADDRSZ       16              /* IPv6 T_AAAA */
  117.  
  118. /*
  119.  * Internet nameserver port number
  120.  */
  121. #define NAMESERVER_PORT 53
  122.  
  123. /*
  124.  * Currently defined opcodes
  125.  */
  126. #define QUERY           0x0             /* standard query */
  127. #define IQUERY          0x1             /* inverse query */
  128. #define STATUS          0x2             /* nameserver status query */
  129. /*#define xxx           0x3*/           /* 0x3 reserved */
  130. #define NS_NOTIFY_OP    0x4             /* notify secondary of SOA change */
  131.  
  132. /*
  133.  * Currently defined response codes
  134.  */
  135. #define NOERROR         0               /* no error */
  136. #define FORMERR         1               /* format error */
  137. #define SERVFAIL        2               /* server failure */
  138. #define NXDOMAIN        3               /* non existent domain */
  139. #define NOTIMP          4               /* not implemented */
  140. #define REFUSED         5               /* query refused */
  141.  
  142. /*
  143.  * Type values for resources and queries
  144.  */
  145. #define T_A             1               /* host address */
  146. #define T_NS            2               /* authoritative server */
  147. #define T_MD            3               /* mail destination */
  148. #define T_MF            4               /* mail forwarder */
  149. #define T_CNAME         5               /* canonical name */
  150. #define T_SOA           6               /* start of authority zone */
  151. #define T_MB            7               /* mailbox domain name */
  152. #define T_MG            8               /* mail group member */
  153. #define T_MR            9               /* mail rename name */
  154. #define T_NULL          10              /* null resource record */
  155. #define T_WKS           11              /* well known service */
  156. #define T_PTR           12              /* domain name pointer */
  157. #define T_HINFO         13              /* host information */
  158. #define T_MINFO         14              /* mailbox information */
  159. #define T_MX            15              /* mail routing information */
  160. #define T_TXT           16              /* text strings */
  161. #define T_RP            17              /* responsible person */
  162. #define T_AFSDB         18              /* AFS cell database */
  163. #define T_X25           19              /* X_25 calling address */
  164. #define T_ISDN          20              /* ISDN calling address */
  165. #define T_RT            21              /* router */
  166. #define T_NSAP          22              /* NSAP address */
  167. #define T_NSAP_PTR      23              /* reverse NSAP lookup (deprecated) */
  168. #define T_SIG           24              /* security signature */
  169. #define T_KEY           25              /* security key */
  170. #define T_PX            26              /* X.400 mail mapping */
  171. #define T_GPOS          27              /* geographical position (withdrawn) */
  172. #define T_AAAA          28              /* IP6 Address */
  173. #define T_LOC           29              /* Location Information */
  174. #define T_NXT           30              /* Next Valid Name in Zone */
  175. #define T_EID           31              /* Endpoint identifier */
  176. #define T_NIMLOC        32              /* Nimrod locator */
  177. #define T_SRV           33              /* Server selection */
  178. #define T_ATMA          34              /* ATM Address */
  179. #define T_NAPTR         35              /* Naming Authority PoinTeR */
  180.         /* non standard */
  181. #define T_UINFO         100             /* user (finger) information */
  182. #define T_UID           101             /* user ID */
  183. #define T_GID           102             /* group ID */
  184. #define T_UNSPEC        103             /* Unspecified format (binary data) */
  185.         /* Query type values which do not appear in resource records */
  186. #define T_IXFR          251             /* incremental zone transfer */
  187. #define T_AXFR          252             /* transfer zone of authority */
  188. #define T_MAILB         253             /* transfer mailbox records */
  189. #define T_MAILA         254             /* transfer mail agent records */
  190. #define T_ANY           255             /* wildcard match */
  191.  
  192. /*
  193.  * Values for class field
  194.  */
  195.  
  196. #define C_IN            1               /* the arpa internet */
  197. #define C_CHAOS         3               /* for chaos net (MIT) */
  198. #define C_HS            4               /* for Hesiod name server (MIT) (XXX) */
  199.         /* Query class values which do not appear in resource records */
  200. #define C_ANY           255             /* wildcard match */
  201.  
  202. /*
  203.  * Flags field of the KEY RR rdata
  204.  */
  205. #define KEYFLAG_TYPEMASK        0xC000  /* Mask for "type" bits */
  206. #define KEYFLAG_TYPE_AUTH_CONF  0x0000  /* Key usable for both */
  207. #define KEYFLAG_TYPE_CONF_ONLY  0x8000  /* Key usable for confidentiality */
  208. #define KEYFLAG_TYPE_AUTH_ONLY  0x4000  /* Key usable for authentication */
  209. #define KEYFLAG_TYPE_NO_KEY     0xC000  /* No key usable for either; no key */
  210. /* The type bits can also be interpreted independently, as single bits: */
  211. #define KEYFLAG_NO_AUTH         0x8000  /* Key not usable for authentication */
  212. #define KEYFLAG_NO_CONF         0x4000  /* Key not usable for confidentiality */
  213.  
  214. #define KEYFLAG_EXPERIMENTAL    0x2000  /* Security is *mandatory* if bit=0 */
  215. #define KEYFLAG_RESERVED3       0x1000  /* reserved - must be zero */
  216. #define KEYFLAG_RESERVED4       0x0800  /* reserved - must be zero */
  217. #define KEYFLAG_USERACCOUNT     0x0400  /* key is assoc. with a user acct */
  218. #define KEYFLAG_ENTITY          0x0200  /* key is assoc. with entity eg host */
  219. #define KEYFLAG_ZONEKEY         0x0100  /* key is zone key for the zone named */
  220. #define KEYFLAG_IPSEC           0x0080  /* key is for IPSEC use (host or user)*/
  221. #define KEYFLAG_EMAIL           0x0040  /* key is for email (MIME security) */
  222. #define KEYFLAG_RESERVED10      0x0020  /* reserved - must be zero */
  223. #define KEYFLAG_RESERVED11      0x0010  /* reserved - must be zero */
  224. #define KEYFLAG_SIGNATORYMASK   0x000F  /* key can sign DNS RR's of same name */
  225.  
  226. #define  KEYFLAG_RESERVED_BITMASK ( KEYFLAG_RESERVED3 | \
  227.                                     KEYFLAG_RESERVED4 | \
  228.                                     KEYFLAG_RESERVED10| KEYFLAG_RESERVED11)
  229.  
  230. /* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
  231. #define ALGORITHM_MD5RSA        1       /* MD5 with RSA */
  232. #define ALGORITHM_EXPIRE_ONLY   253     /* No alg, no security */
  233. #define ALGORITHM_PRIVATE_OID   254     /* Key begins with OID indicating alg */
  234.  
  235. /* Signatures */
  236.                                         /* Size of a mod or exp in bits */
  237. #define MIN_MD5RSA_KEY_PART_BITS         512
  238. #define MAX_MD5RSA_KEY_PART_BITS        2552
  239.                                         /* Total of binary mod and exp, bytes */
  240. #define MAX_MD5RSA_KEY_BYTES            ((MAX_MD5RSA_KEY_PART_BITS+7/8)*2+3)
  241.                                         /* Max length of text sig block */
  242. #define MAX_KEY_BASE64                  (((MAX_MD5RSA_KEY_BYTES+2)/3)*4)
  243.  
  244. /*
  245.  * Status return codes for T_UNSPEC conversion routines
  246.  */
  247. #define CONV_SUCCESS    0
  248. #define CONV_OVERFLOW   (-1)
  249. #define CONV_BADFMT     (-2)
  250. #define CONV_BADCKSUM   (-3)
  251. #define CONV_BADBUFLEN  (-4)
  252.  
  253. #ifndef BYTE_ORDER
  254. #if (BSD >= 199103)
  255. # include <machine/endian.h>
  256. #else
  257. #ifdef linux
  258. # include <endian.h>
  259. #else
  260. #define LITTLE_ENDIAN   1234    /* least-significant byte first (vax, pc) */
  261. #define BIG_ENDIAN      4321    /* most-significant byte first (IBM, net) */
  262. #define PDP_ENDIAN      3412    /* LSB first in word, MSW first in long (pdp)*/
  263.  
  264. #if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
  265.     defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
  266.     defined(__alpha__) || defined(__alpha)
  267. #define BYTE_ORDER      LITTLE_ENDIAN
  268. #endif
  269.  
  270. #if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
  271.     defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
  272.     defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
  273.     defined(apollo) || defined(__convex__) || defined(_CRAY) || \
  274.     defined(__hppa) || defined(__hp9000) || \
  275.     defined(__hp9000s300) || defined(__hp9000s700) || \
  276.     defined (BIT_ZERO_ON_LEFT) || defined(m68k)
  277. #define BYTE_ORDER      BIG_ENDIAN
  278. #endif
  279. #endif /* linux */
  280. #endif /* BSD */
  281. #endif /* BYTE_ORDER */
  282.  
  283. #if !defined(BYTE_ORDER) || \
  284.     (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
  285.     BYTE_ORDER != PDP_ENDIAN)
  286.         /* you must determine what the correct bit order is for
  287.          * your compiler - the next line is an intentional error
  288.          * which will force your compiles to bomb until you fix
  289.          * the above macros.
  290.          */
  291.   error "Undefined or invalid BYTE_ORDER";
  292. #endif
  293.  
  294. /*
  295.  * Structure for query header.  The order of the fields is machine- and
  296.  * compiler-dependent, depending on the byte/bit order and the layout
  297.  * of bit fields.  We use bit fields only in int variables, as this
  298.  * is all ANSI requires.  This requires a somewhat confusing rearrangement.
  299.  */
  300.  
  301. #pragma pack(1)
  302. typedef struct {
  303.         unsigned        id :16;         /* query identification number */
  304. #if BYTE_ORDER == BIG_ENDIAN
  305.                         /* fields in third byte */
  306.         unsigned        qr: 1;          /* response flag */
  307.         unsigned        opcode: 4;      /* purpose of message */
  308.         unsigned        aa: 1;          /* authoritive answer */
  309.         unsigned        tc: 1;          /* truncated message */
  310.         unsigned        rd: 1;          /* recursion desired */
  311.                         /* fields in fourth byte */
  312.         unsigned        ra: 1;          /* recursion available */
  313.         unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
  314.         unsigned        ad: 1;          /* authentic data from named */
  315.         unsigned        cd: 1;          /* checking disabled by resolver */
  316.         unsigned        rcode :4;       /* response code */
  317. #endif
  318. #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
  319.                         /* fields in third byte */
  320.         unsigned        rd :1;          /* recursion desired */
  321.         unsigned        tc :1;          /* truncated message */
  322.         unsigned        aa :1;          /* authoritive answer */
  323.         unsigned        opcode :4;      /* purpose of message */
  324.         unsigned        qr :1;          /* response flag */
  325.                         /* fields in fourth byte */
  326.         unsigned        rcode :4;       /* response code */
  327.         unsigned        cd: 1;          /* checking disabled by resolver */
  328.         unsigned        ad: 1;          /* authentic data from named */
  329.         unsigned        unused :1;      /* unused bits (MBZ as of 4.9.3a3) */
  330.         unsigned        ra :1;          /* recursion available */
  331. #endif
  332.                         /* remaining bytes */
  333.         unsigned        qdcount :16;    /* number of question entries */
  334.         unsigned        ancount :16;    /* number of answer entries */
  335.         unsigned        nscount :16;    /* number of authority entries */
  336.         unsigned        arcount :16;    /* number of resource entries */
  337. } HEADER;
  338. #pragma pack()
  339.  
  340. /*
  341.  * Defines for handling compressed domain names
  342.  */
  343. #define INDIR_MASK      0xc0
  344.  
  345. __BEGIN_DECLS
  346. extern  u_int16_t _System _getshort __TCPPROTO((const u_char *));
  347. extern  u_int32_t _System _getlong __TCPPROTO((const u_char *));
  348. __END_DECLS
  349.  
  350. /*
  351.  * Inline versions of get/put short/long.  Pointer is advanced.
  352.  *
  353.  * These macros demonstrate the property of C whereby it can be
  354.  * portable or it can be elegant but rarely both.
  355.  */
  356. #define GETSHORT(s, cp) { \
  357.         register u_char *t_cp = (u_char *)(cp); \
  358.         (s) = ((u_int16_t)t_cp[0] << 8) \
  359.             | ((u_int16_t)t_cp[1]) \
  360.             ; \
  361.         (cp) += INT16SZ; \
  362. }
  363.  
  364. #define GETLONG(l, cp) { \
  365.         register u_char *t_cp = (u_char *)(cp); \
  366.         (l) = ((u_int32_t)t_cp[0] << 24) \
  367.             | ((u_int32_t)t_cp[1] << 16) \
  368.             | ((u_int32_t)t_cp[2] << 8) \
  369.             | ((u_int32_t)t_cp[3]) \
  370.             ; \
  371.         (cp) += INT32SZ; \
  372. }
  373.  
  374. #define PUTSHORT(s, cp) { \
  375.         register u_int16_t t_s = (u_int16_t)(s); \
  376.         register u_char *t_cp = (u_char *)(cp); \
  377.         *t_cp++ = t_s >> 8; \
  378.         *t_cp   = t_s; \
  379.         (cp) += INT16SZ; \
  380. }
  381.  
  382. #define PUTLONG(l, cp) { \
  383.         register u_int32_t t_l = (u_int32_t)(l); \
  384.         register u_char *t_cp = (u_char *)(cp); \
  385.         *t_cp++ = t_l >> 24; \
  386.         *t_cp++ = t_l >> 16; \
  387.         *t_cp++ = t_l >> 8; \
  388.         *t_cp   = t_l; \
  389.         (cp) += INT32SZ; \
  390. }
  391.  
  392. #endif /* TCPV40HDRS */
  393. #endif /* !_ARPA_NAMESER_H_ */
  394.