File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / minires / resolv.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Oct 9 09:06:54 2012 UTC (11 years, 8 months ago) by misho
Branches: dhcp, MAIN
CVS tags: v4_1_R7p0, v4_1_R7, v4_1_R4, HEAD
dhcp 4.1 r7

    1: /*
    2:  * Copyright (c) 1983, 1987, 1989
    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:  * Portions Copyright (c) 2004,2007-2009 by Internet Systems Consortium,
   36:  *                                          Inc. ("ISC")
   37:  * Portions Copyright (c) 1995-2003 by Internet Software Consortium
   38:  *
   39:  * Permission to use, copy, modify, and distribute this software for any
   40:  * purpose with or without fee is hereby granted, provided that the above
   41:  * copyright notice and this permission notice appear in all copies.
   42:  *
   43:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
   44:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   45:  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
   46:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   47:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   48:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
   49:  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   50:  *
   51:  *   Internet Systems Consortium, Inc.
   52:  *   950 Charter Street
   53:  *   Redwood City, CA 94063
   54:  *   <info@isc.org>
   55:  *   https://www.isc.org/
   56:  */
   57: 
   58: /*
   59:  *	@(#)resolv.h	8.1 (Berkeley) 6/2/93
   60:  *	$Id: resolv.h,v 1.1.1.1 2012/10/09 09:06:54 misho Exp $
   61:  */
   62: 
   63: #ifndef _RESOLV_H_
   64: #define	_RESOLV_H_
   65: 
   66: #include <sys/types.h>
   67: 
   68: /*
   69:  * This used to be defined in res_query.c, now it's in herror.c.
   70:  * [XXX no it's not.  It's in irs/irs_data.c]
   71:  * It was
   72:  * never extern'd by any *.h file before it was placed here.  For thread
   73:  * aware programs, the last h_errno value set is stored in res->h_errno.
   74:  *
   75:  * XXX:	There doesn't seem to be a good reason for exposing RES_SET_H_ERRNO
   76:  *	(and __h_errno_set) to the public via <resolv.h>.
   77:  * XXX:	__h_errno_set is really part of IRS, not part of the resolver.
   78:  *	If somebody wants to build and use a resolver that doesn't use IRS,
   79:  *	what do they do?  Perhaps something like
   80:  *		#ifdef WANT_IRS
   81:  *		# define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
   82:  *		#else
   83:  *		# define RES_SET_H_ERRNO(r,x) (h_errno = (r)->res_h_errno = (x))
   84:  *		#endif
   85:  */
   86: 
   87: #define RES_SET_H_ERRNO(r,x) __h_errno_set(r,x)
   88: struct __res_state; /* forward */
   89: void __h_errno_set(struct __res_state *res, int err);
   90: 
   91: /*
   92:  * Resolver configuration file.
   93:  * Normally not present, but may contain the address of the
   94:  * inital name server(s) to query and the domain search list.
   95:  */
   96: 
   97: #ifndef _PATH_RESCONF
   98: #define _PATH_RESCONF        "/etc/resolv.conf"
   99: #endif
  100: 
  101: typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
  102: 	res_sendhookact;
  103: 
  104: typedef res_sendhookact (*res_send_qhook) (struct sockaddr_in * const *ns,
  105: 					      double **query,
  106: 					      unsigned *querylen,
  107: 					      double *ans,
  108: 					      unsigned anssiz,
  109: 					      int *resplen);
  110: 
  111: typedef res_sendhookact (*res_send_rhook) (const struct sockaddr_in *ns,
  112: 					   double *query,
  113: 					   unsigned querylen,
  114: 					   double *ans,
  115: 					   unsigned anssiz,
  116: 					   int *resplen);
  117: 
  118: struct res_sym {
  119: 	int	number;		/* Identifying number, like T_MX */
  120: 	char *	name;		/* Its symbolic name, like "MX" */
  121: 	char *	humanname;	/* Its fun name, like "mail exchanger" */
  122: };
  123: 
  124: /*
  125:  * Global defines and variables for resolver stub.
  126:  */
  127: #define	MAXNS			3	/* max # name servers we'll track */
  128: #define	MAXDFLSRCH		3	/* # default domain levels to try */
  129: #define	MAXDNSRCH		6	/* max # domains in search path */
  130: #define	LOCALDOMAINPARTS	2	/* min levels in name that is "local" */
  131: 
  132: #define	RES_TIMEOUT		5	/* min. seconds between retries */
  133: #define	MAXRESOLVSORT		10	/* number of net to sort on */
  134: #define	RES_MAXNDOTS		15	/* should reflect bit field size */
  135: #define	RES_MAXRETRANS		30	/* only for resolv.conf/RES_OPTIONS */
  136: #define	RES_MAXRETRY		5	/* only for resolv.conf/RES_OPTIONS */
  137: #define	RES_DFLRETRY		2	/* Default #/tries. */
  138: 
  139: struct __res_state {
  140: 	int	retrans;	 	/* retransmition time interval */
  141: 	int	retry;			/* number of times to retransmit */
  142: 	u_long	options;		/* option flags - see below. */
  143: 	int	nscount;		/* number of name servers */
  144: 	struct sockaddr_in
  145: 		nsaddr_list[MAXNS];	/* address of name server */
  146: #define	nsaddr	nsaddr_list[0]		/* for backward compatibility */
  147: 	u_short	id;			/* current message id */
  148: 	char	*dnsrch[MAXDNSRCH+1];	/* components of domain to search */
  149: 	char	defdname[256];		/* default domain (deprecated) */
  150: 	u_long	pfcode;			/* RES_PRF_ flags - see below. */
  151: 	unsigned ndots:4;		/* threshold for initial abs. query */
  152: 	unsigned nsort:4;		/* number of elements in sort_list[] */
  153: 	char	unused[3];
  154: 	struct {
  155: 		struct in_addr	addr;
  156: 		u_int32_t	mask;
  157: 	} sort_list[MAXRESOLVSORT];
  158: 	res_send_qhook qhook;		/* query hook */
  159: 	res_send_rhook rhook;		/* response hook */
  160: 	int	res_h_errno;		/* last one set for this context */
  161: 	int	_sock;			/* PRIVATE: for res_send i/o */
  162: 	u_int	_flags;			/* PRIVATE: see below */
  163: 	char	pad[52];		/* On an i386 this means 512b total. */
  164: };
  165: 
  166: typedef struct __res_state *res_state;
  167: 
  168: /*
  169:  * Resolver flags (used to be discrete per-module statics ints).
  170:  */
  171: #define	RES_F_VC	0x00000001	/* socket is TCP */
  172: #define	RES_F_CONN	0x00000002	/* socket is connected */
  173: 
  174: /* res_findzonecut() options */
  175: #define	RES_EXHAUSTIVE	0x00000001	/* always do all queries */
  176: 
  177: /*
  178:  * Resolver options (keep these in synch with res_debug.c, please)
  179:  */
  180: #define RES_INIT	0x00000001	/* address initialized */
  181: #define RES_DEBUG	0x00000002	/* print debug messages */
  182: #define RES_AAONLY	0x00000004	/* authoritative answers only (!IMPL)*/
  183: #define RES_USEVC	0x00000008	/* use virtual circuit */
  184: #define RES_PRIMARY	0x00000010	/* query primary server only (!IMPL) */
  185: #define RES_IGNTC	0x00000020	/* ignore trucation errors */
  186: #define RES_RECURSE	0x00000040	/* recursion desired */
  187: #define RES_DEFNAMES	0x00000080	/* use default domain name */
  188: #define RES_STAYOPEN	0x00000100	/* Keep TCP socket open */
  189: #define RES_DNSRCH	0x00000200	/* search up local domain tree */
  190: #define	RES_INSECURE1	0x00000400	/* type 1 security disabled */
  191: #define	RES_INSECURE2	0x00000800	/* type 2 security disabled */
  192: #define	RES_NOALIASES	0x00001000	/* shuts off HOSTALIASES feature */
  193: #define	RES_USE_INET6	0x00002000	/* use/map IPv6 in gethostbyname() */
  194: #define RES_ROTATE	0x00004000	/* rotate ns list after each query */
  195: #define	RES_NOCHECKNAME	0x00008000	/* do not check names for sanity. */
  196: #define	RES_KEEPTSIG	0x00010000	/* do not strip TSIG records */
  197: 
  198: #define RES_DEFAULT	(RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
  199: 
  200: /*
  201:  * Resolver "pfcode" values.  Used by dig.
  202:  */
  203: #define RES_PRF_STATS	0x00000001
  204: #define RES_PRF_UPDATE	0x00000002
  205: #define RES_PRF_CLASS   0x00000004
  206: #define RES_PRF_CMD	0x00000008
  207: #define RES_PRF_QUES	0x00000010
  208: #define RES_PRF_ANS	0x00000020
  209: #define RES_PRF_AUTH	0x00000040
  210: #define RES_PRF_ADD	0x00000080
  211: #define RES_PRF_HEAD1	0x00000100
  212: #define RES_PRF_HEAD2	0x00000200
  213: #define RES_PRF_TTLID	0x00000400
  214: #define RES_PRF_HEADX	0x00000800
  215: #define RES_PRF_QUERY	0x00001000
  216: #define RES_PRF_REPLY	0x00002000
  217: #define RES_PRF_INIT	0x00004000
  218: /*			0x00008000	*/
  219: 
  220: #if 0
  221: /* Things involving an internal (static) resolver context. */
  222: #ifdef _REENTRANT
  223: extern struct __res_state *__res_state(void);
  224: #define _res (*__res_state())
  225: #else
  226: #ifndef __BIND_NOSTATIC
  227: extern struct __res_state _res;
  228: #endif
  229: #endif
  230: 
  231: void		fp_nquery (const u_char *, int, FILE *);
  232: void		fp_query (const u_char *, FILE *);
  233: const char *	hostalias (const char *);
  234: void		p_query (const u_char *);
  235: void		res_close (void);
  236: int		res_init (void);
  237: int		res_isourserver (const struct sockaddr_in *);
  238: int		res_mkquery (int, const char *, int, int, const u_char *,
  239: 				 int, const u_char *, u_char *, int);
  240: int		res_query (const char *, int, int, u_char *, int);
  241: int		res_querydomain (const char *, const char *, int, int,
  242: 				     u_char *, int);
  243: int		res_search (const char *, int, int, u_char *, int);
  244: int		res_send (const u_char *, int, u_char *, int);
  245: int		res_sendsigned (const u_char *, int, ns_tsig_key *,
  246: 				    u_char *, int);
  247: 
  248: #if !defined(SHARED_LIBBIND) || defined(LIB)
  249: /*
  250:  * If libbind is a shared object (well, DLL anyway)
  251:  * these externs break the linker when resolv.h is 
  252:  * included by a lib client (like named)
  253:  * Make them go away if a client is including this
  254:  *
  255:  */
  256: extern const struct res_sym __p_key_syms[];
  257: extern const struct res_sym __p_cert_syms[];
  258: extern const struct res_sym __p_class_syms[];
  259: extern const struct res_sym __p_type_syms[];
  260: extern const struct res_sym __p_rcode_syms[];
  261: #endif /* SHARED_LIBBIND */
  262: 
  263: int		res_hnok (const char *);
  264: int		res_ownok (const char *);
  265: int		res_mailok (const char *);
  266: int		res_dnok (const char *);
  267: int		sym_ston (const struct res_sym *, const char *, int *);
  268: const char *	sym_ntos (const struct res_sym *, int, int *);
  269: const char *	sym_ntop (const struct res_sym *, int, int *);
  270: int		b64_ntop (u_char const *, size_t, char *, size_t);
  271: int		b64_pton (char const *, u_char *, size_t);
  272: int		loc_aton (const char *ascii, u_char *binary);
  273: const char *	loc_ntoa (const u_char *binary, char *ascii);
  274: int		dn_skipname (const u_char *, const u_char *);
  275: void		putlong (u_int32_t, u_char *);
  276: void		putshort (u_int16_t, u_char *);
  277: const char *	p_class (int);
  278: const char *	p_time (u_int32_t);
  279: const char *	p_type (int);
  280: const char *	p_rcode (int);
  281: const u_char *	p_cdnname (const u_char *, const u_char *, int, FILE *);
  282: const u_char *	p_cdname (const u_char *, const u_char *, FILE *);
  283: const u_char *	p_fqnname (const u_char *cp, const u_char *msg,
  284: 			       int, char *, int);
  285: const u_char *	p_fqname (const u_char *, const u_char *, FILE *);
  286: const char *	p_option (u_long option);
  287: char *		p_secstodate (u_long);
  288: int		dn_count_labels (const char *);
  289: int		dn_expand (const u_char *, const u_char *, const u_char *,
  290: 			       char *, int);
  291: u_int		res_randomid (void);
  292: int		res_nameinquery (const char *, int, int,
  293: 				     const u_char *, const u_char *);
  294: int		res_queriesmatch (const u_char *, const u_char *,
  295: 				      const u_char *, const u_char *);
  296: const char *	p_section (int section, int opcode);
  297: /* Things involving a resolver context. */
  298: int		res_ninit (res_state);
  299: int		res_nisourserver (const res_state,
  300: 				      const struct sockaddr_in *);
  301: void		fp_resstat (const res_state, FILE *);
  302: void		res_npquery (const res_state, const u_char *, int, FILE *);
  303: const char *	res_hostalias (const res_state, const char *,
  304: 				   char *, size_t);
  305: int		res_nquery (res_state,
  306: 				const char *, int, int, u_char *, int);
  307: int		res_nsearch (res_state, const char *, int,
  308: 				 int, u_char *, int);
  309: int		res_nquerydomain (res_state,
  310: 				      const char *, const char *, int, int,
  311: 				      u_char *, int);
  312: int		res_nmkquery (res_state,
  313: 				  int, const char *, int, int, const u_char *,
  314: 				  int, const u_char *, u_char *, int);
  315: int		res_nsend (res_state, const u_char *, int, u_char *, int);
  316: int		res_nsendsigned (res_state, const u_char *, int,
  317: 				     ns_tsig_key *, u_char *, int);
  318: int		res_findzonecut (res_state, const char *, ns_class, int,
  319: 				     char *, size_t, struct in_addr *, int);
  320: void		res_nclose (res_state);
  321: 
  322: #endif /* 0 */
  323: #endif /* !_RESOLV_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>