Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RESOLVER(3)		    Library Functions Manual		   RESOLVER(3)

NAME
       res_ninit,   res_ourserver_p,  fp_resstat,  res_hostalias,  res_pquery,
       res_nquery,  res_nsearch,  res_nquerydomain,  res_nmkquery,  res_nsend,
       res_nupdate,	 res_nmkupdate,	     res_nclose,      res_nsendsigned,
       res_findzonecut,	res_getservers,	res_setservers,	res_ndestroy, dn_comp,
       dn_expand, hstrerror, res_init,	res_isourserver,  fp_nquery,  p_query,
       hostalias,   res_query,	 res_search,   res_querydomain,	  res_mkquery,
       res_send, res_update, res_close,	herror -- resolver routines

SYNOPSIS
       #include	<sys/types.h>
       #include	<netinet/in.h>
       #include	<arpa/nameser.h>
       #include	<resolv.h>
       #include	<res_update.h>

       typedef struct __res_state *res_state;

       int
       res_ninit(res_state statp);

       int
       res_ourserver_p(const res_state statp, const struct sockaddr_in *addr);

       void
       fp_resstat(const	res_state statp, FILE *fp);

       const char *
       res_hostalias(const res_state  statp,  const  char  *name,  char	 *buf,
	   size_t buflen);

       int
       res_pquery(const	 res_state  statp,  const  u_char  *msg,  int  msglen,
	   FILE	*fp);

       int
       res_nquery(res_state statp, const char *dname,  int  class,  int	 type,
	   u_char *answer, int anslen);

       int
       res_nsearch(res_state  statp,  const  char *dname, int class, int type,
	   u_char * answer, int	anslen);

       int
       res_nquerydomain(res_state statp, const char *name, const char *domain,
	   int class, int type,	u_char *answer,	int anslen);

       int
       res_nmkquery(res_state statp,  int op,  const char *dname,   int	class,
	   int type,   const u_char *data,  int	datalen,  const	u_char *newrr,
	   u_char *buf,	int buflen);

       int
       res_nsend(res_state   statp,   const   u_char   *msg,	int    msglen,
	   u_char *answer, int anslen);

       int
       res_nupdate(res_state statp, ns_updrec *rrecp_in);

       int
       res_nmkupdate(res_state	 statp,	  ns_updrec  *rrecp_in,	 u_char	 *buf,
	   int buflen);

       void
       res_nclose(res_state statp);

       int
       res_nsendsigned(res_state  statp,  const	 u_char	 *msg,	 int   msglen,
	   ns_tsig_key *key, u_char *answer, int anslen);

       int
       res_findzonecut(res_state  statp,  const	 char  *dname, ns_class	class,
	   int options,	char *zname,  size_t  zsize,  struct  in_addr  *addrs,
	   int naddrs);

       int
       res_getservers(res_state	   statp,   union   res_sockaddr_union	 *set,
	   int cnt);

       void
       res_setservers(res_state	statp, const  union  res_sockaddr_union	 *set,
	   int cnt);

       void
       res_ndestroy(res_state statp);

       int
       dn_comp(const	char	*exp_dn,    u_char   *comp_dn,	 int   length,
	   u_char **dnptrs, u_char **lastdnptr);

       int
       dn_expand(const	   u_char     *msg,	const	  u_char     *eomorig,
	   const u_char	*comp_dn, char *exp_dn,	int length);

       const char *
       hstrerror(int err);

   DEPRECATED
       #include	<sys/types.h>
       #include	<netinet/in.h>
       #include	<arpa/nameser.h>
       #include	<resolv.h>
       #include	<res_update.h>

       int
       res_init(void);

       int
       res_isourserver(const struct sockaddr_in	*addr);

       int
       fp_nquery(const u_char *msg, int	msglen,	FILE *fp);

       void
       p_query(const u_char *msg, FILE *fp);

       const char *
       hostalias(const char *name);

       int
       res_query(const	char  *dname,  int  class,  int	 type, u_char *answer,
	   int anslen);

       int
       res_search(const	char *dname, int  class,  int  type,  u_char  *answer,
	   int anslen);

       int
       res_querydomain(const  char  *name,  const  char	 *domain,  int	class,
	   int type, u_char *answer, int anslen);

       int
       res_mkquery(int op,     const char *dname,     int class,     int type,
	   const char *data,   int datalen,  struct rrec *newrr,  u_char *buf,
	   int buflen);

       int
       res_send(const u_char *msg, int msglen, u_char *answer, int anslen);

       int
       res_update(ns_updrec *rrecp_in);

       void
       res_close(void);

       void
       herror(const char *s);

DESCRIPTION
       These routines are used for making, sending and interpreting query  and
       reply messages with Internet domain name	servers.

       State  information is kept in statp and is used to control the behavior
       of these	functions.  statp should be set	to  all	 zeros	prior  to  the
       first call to any of these functions.

       The  functions  res_init(),  res_isourserver(), fp_nquery(), p_query(),
       hostalias(),	res_query(),	 res_search(),	    res_querydomain(),
       res_mkquery(),  res_send(),  res_update(), res_close() and herror() are
       deprecated and are supplied for compatability  with  old	 source	 code.
       They use	global configuration and state information that	is kept	in the
       structure _res rather than that referenced through statp.

       Most  of	the values in statp and	_res are initialized on	the first call
       to res_ninit() /	res_init() to reasonable defaults and can be  ignored.
       Options stored in statp->options	/ _res.options are defined in resolv.h
       and are as follows.  Options are	stored as a simple bit mask containing
       the bitwise "OR"	of the options enabled.

       RES_INIT
		True  if  the  initial	name server address and	default	domain
		name are initialized (i.e., res_ninit()	/ res_init() has  been
		called).

       RES_DEBUG
		Print debugging	messages.

       RES_AAONLY
		Accept	authoritative  answers only.  Should continue until it
		finds an authoritative answer or finds	an  error.   Currently
		this is	not implemented.

       RES_USEVC
		Use TCP	connections for	queries	instead	of UDP datagrams.

       RES_STAYOPEN
		Used  with  RES_USEVC  to keep the TCP connection open between
		queries.  This is useful only in programs  that	 regularly  do
		many queries.  UDP should be the normal	mode used.

       RES_IGNTC
		Ignore truncation errors, i.e.,	don't retry with TCP.

       RES_RECURSE
		Set  the  recursion-desired  bit  in queries.  This is the de-
		fault.	 (res_nsend()  /  res_send()  does  not	 do  iterative
		queries	and expects the	name server to handle recursion.)

       RES_DEFNAMES
		If  set,  res_nsearch()	/ res_search() will append the default
		domain name to single-component	names (those that do not  con-
		tain a dot).  This option is enabled by	default.

       RES_DNSRCH
		If  this  option  is  set,  res_nsearch()  / res_search() will
		search for host	names in the current domain and	in parent  do-
		mains;	see  hostname(7).   This  is used by the standard host
		lookup routine gethostbyname(3).  This option  is  enabled  by
		default.

       RES_NOALIASES
		This  option  turns  off  the user level aliasing feature con-
		trolled	by the HOSTALIASES environment variable.  Network dae-
		mons should set	this option.

       RES_USE_INET6
		This option causes gethostbyname(3) to look for	 AAAA  records
		before looking for A records if	none are found.

       RES_ROTATE
		This options causes the	res_nsend() / res_send() to rotate the
		list of	nameservers in statp->nsaddr_list / _res.nsaddr_list.

       RES_KEEPTSIG
		This  option causes res_nsendsigned() to leave the message un-
		changed	after TSIG verification;  otherwise  the  TSIG	record
		would be removed and the header	updated.

       RES_NOTLDQUERY
		This  option  causes res_nsearch() to not attempt to resolve a
		unqualified name as if it were a top level domain (TLD).  This
		option can cause problems if the site has "localhost" as a TLD
		rather than having localhost on	one or more  elements  of  the
		search	 list.	  This	 option	  has  no  effect  if  neither
		RES_DEFNAMES or	RES_DNSRCH is set.

       The res_ninit() / res_init() routine reads the configuration  file  (if
       any;  see  resolver(5)) to get the default domain name, search list and
       the Internet address of the local name server(s).  If no	server is con-
       figured,	the host running the resolver is tried.	  The  current	domain
       name  is	 defined by the	hostname if not	specified in the configuration
       file; it	can be overridden by  the  environment	variable  LOCALDOMAIN.
       This environment	variable may contain several blank-separated tokens if
       you wish	to override the	"search	list" on a per-process basis.  This is
       similar to the search command in	the configuration file.	 Another envi-
       ronment	variable ("RES_OPTIONS") can be	set to override	certain	inter-
       nal resolver options which are otherwise	set by changing	fields in  the
       statp  /	 _res structure	or are inherited from the configuration	file's
       options command.	 The syntax of the "RES_OPTIONS" environment  variable
       is  explained  in  resolver(5).	 Initialization	normally occurs	on the
       first call to one of the	other resolver routines.

       The memory referred to by statp must be set to all zeros	prior  to  the
       first  call to res_ninit().  res_ndestroy() should be call to free mem-
       ory allocated by	res_ninit() after last use.

       The res_nquery()	/ res_query() functions	 provides  interfaces  to  the
       server query mechanism.	They constructs	a query, sends it to the local
       server,	awaits	a response, and	makes preliminary checks on the	reply.
       The query requests information of the specified type and	class for  the
       specified fully-qualified domain	name dname.  The reply message is left
       in  the	answer	buffer	with  length  anslen  supplied	by the caller.
       res_nquery() / res_query() return -1 on error or	the length of the  an-
       swer.

       The res_nsearch() / res_search()	routines make a	query and awaits a re-
       sponse  like res_nquery() / res_query(),	but in addition, it implements
       the default  and	 search	 rules	controlled  by	the  RES_DEFNAMES  and
       RES_DNSRCH  options.  It	returns	the length of the first	successful re-
       ply which is stored in answer or	-1 on error.

       The remaining routines are lower-level routines used by res_nquery()  /
       res_query().  The res_nmkquery()	/ res_mkquery()	functions constructs a
       standard	 query	message	 and places it in buf.	It returns the size of
       the query, or -1	if the query is	larger than buflen.  The query type op
       is usually QUERY, but  can  be  any  of	the  query  types  defined  in
       <arpa/nameser.h>.   The	domain	name  for the query is given by	dname.
       Newrr is	currently unused but is	intended for making update messages.

       The res_nsend() / res_send() / res_nsendsigned()	routines sends a  pre-
       formatted  query	 and  returns  an  answer.  It will call res_ninit() /
       res_init() if RES_INIT is not set, send the query  to  the  local  name
       server,	  and	 handle	   timeouts    and   retries.	 Additionally,
       res_nsendsigned() will use TSIG signatures to add authentication	to the
       query and verify	the response.  In this case, only one nameserver  will
       be  contacted.	The  length of the reply message is returned, or -1 if
       there were errors.

       res_nquery()  /	 res_query(),	res_nsearch()	/   res_search()   and
       res_nsend()  /  res_send()  return  a  length  that  may	be bigger than
       anslen.	In that	case the query should be retried with a	bigger buffer.
       NOTE the	answer to the second query may be larger still so supplying  a
       buffer  that  bigger  that the answer returned by the previous query is
       recommended.

       answer MUST be big enough to receive a maximum UDP  response  from  the
       server  or parts	of the answer will be silently discarded.  The default
       maximum UDP response size is 512	bytes.

       The function res_ourserver_p() returns true when	 inp  is  one  of  the
       servers in statp->nsaddr_list / _res.nsaddr_list.

       The  functions  fp_nquery() / p_query() print out the query and any an-
       swer in msg on fp.  p_query() is	equivalent to fp_nquery() with	msglen
       set to 512.

       The   function	fp_resstat()  prints  out  the	active	flag  bits  in
       statp->options preceeded	by the text ";;	res options:" on file.

       The functions res_hostalias() / hostalias() lookup up name in the  file
       referred	 to by the HOSTALIASES files return a fully qualified hostname
       if found	or NULL	if not found or	an  error  occurred.   res_hostalias()
       uses buf	to store the result in,	hostalias() uses a static buffer.

       The functions res_getservers() and res_setservers() are used to get and
       set the list of server to be queried.

       The  functions  res_nupdate()  /	 res_update() take a list of ns_updrec
       rrecp_in.  Identifies the containing zone for each  record  and	groups
       the records according to	containing zone	maintaining in zone order then
       sends and update	request	to the servers for these zones.	 The number of
       zones updated is	returned or -1 on error.  Note that res_nupdate() will
       perform	TSIG authenticated dynamic update operations if	the key	is not
       NULL.

       The function res_findzonecut() discovers	the closest enclosing zone cut
       for a specified domain name, and	finds the IP addresses of  the	zone's
       master servers.

       The  functions  res_nmkupdate()	/ res_mkupdate() take a	linked list of
       ns_updrec  rrecp_in  and	  construct   a	  UPDATE   message   in	  buf.
       res_nmkupdate()	/  res_mkupdate() return the length of the constructed
       message on no error or one of the following error values.

       -1 An error occurred parsing rrecp_in.

       -2 The buffer buf was too small.

       -3 The first record was not a zone section or there was a section order
       problem.	 The section order is S_ZONE, S_PREREQ and S_UPDATE.

       -4 A number overflow occurred.

       -5 Unknown operation or no records.

       The functions res_nclose() / res_close()	close any  open	 files	refer-
       enced through statp / _res.

       The  function  res_ndestroy()  calls res_nclose() then frees any	memory
       allocated by res_ninit().

       The dn_comp() function compresses the domain name exp_dn	and stores  it
       in comp_dn.  The	size of	the compressed name is returned	or -1 if there
       were  errors.   The size	of the array pointed to	by comp_dn is given by
       length.	The compression	uses an	array of  pointers  dnptrs  to	previ-
       ously-compressed	 names	in  the	 current  message.   The first pointer
       points to to the	beginning of the message and the list ends with	 NULL.
       The  limit  to  the  array is specified by lastdnptr.  A	side effect of
       dn_comp() is to update the list of pointers for	labels	inserted  into
       the message as the name is compressed.  If dnptr	is NULL, names are not
       compressed.  If lastdnptr is NULL, the list of labels is	not updated.

       The  dn_expand()	 entry expands the compressed domain name comp_dn to a
       full domain name.  The compressed name is contained in a	query or reply
       message;	msg is a pointer to the	beginning of the message.  eomorig  is
       a  pointer  to  the first location after	the message.  The uncompressed
       name is placed in the buffer indicated  by  exp_dn  which  is  of  size
       length.	 The size of compressed	name is	returned or -1 if there	was an
       error.

       The variables statp->res_h_errno	/ _res.res_h_errno and external	 vari-
       able h_errno is set whenever an error occurs during resolver operation.
       The following definitions are given in <netdb.h>:

       #define NETDB_INTERNAL -1  /* see errno */
       #define NETDB_SUCCESS  0	  /* no	problem	*/
       #define HOST_NOT_FOUND 1	  /* Authoritative Answer Host not found */
       #define TRY_AGAIN      2	  /* Non-Authoritative not found, or SERVFAIL */
       #define NO_RECOVERY    3	  /* Non-Recoverable: FORMERR, REFUSED,	NOTIMP */
       #define NO_DATA	      4	  /* Valid name, no data for requested type */

       The  herror()  function	writes a message to the	diagnostic output con-
       sisting of the string parameter s, the constant string ": ", and	a mes-
       sage corresponding to the value of h_errno.

       The hstrerror() function	returns	a string which	is  the	 message  text
       corresponding to	the value of the err parameter.

FILES
       /etc/resolv.conf	     See resolver(5).

SEE ALSO
       gethostbyname(3),  hostname(7), resolver(5); RFC1032, RFC1033, RFC1034,
       RFC1035,	RFC974;	SMM:11,	"Name Server Operations	Guide for BIND"

4th Berkeley Distribution	 July 4, 2000			   RESOLVER(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=resolver&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help