Module Name: src
Committed By: christos
Date: Mon Jun 8 16:55:31 UTC 2009
Modified Files:
src/lib/libc/net: resolver.3
Log Message:
merge our changes
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/lib/libc/net/resolver.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/net/resolver.3
diff -u src/lib/libc/net/resolver.3:1.21 src/lib/libc/net/resolver.3:1.22
--- src/lib/libc/net/resolver.3:1.21 Mon Jan 24 20:39:57 2005
+++ src/lib/libc/net/resolver.3 Mon Jun 8 12:55:30 2009
@@ -1,45 +1,76 @@
-.\" $NetBSD: resolver.3,v 1.21 2005/01/25 01:39:57 wiz Exp $
+.\" $NetBSD: resolver.3,v 1.22 2009/06/08 16:55:30 christos Exp $
+.\" Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
.\"
-.\" Copyright (c) 1985, 1991, 1993
-.\" The Regents of the University of California. All rights reserved.
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+.\" OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
+.\" Copyright (c) 1985, 1995 The Regents of the University of California.
+.\" All rights reserved.
.\"
-.\" @(#)resolver.3 8.1 (Berkeley) 6/4/93
+.\" Redistribution and use in source and binary forms are permitted provided
+.\" that: (1) source distributions retain this entire copyright notice and
+.\" comment, and (2) distributions including binaries display the following
+.\" acknowledgement: ``This product includes software developed by the
+.\" University of California, Berkeley and its contributors'' in the
+.\" documentation or other materials provided with the distribution and in
+.\" all advertising materials mentioning features or use of this software.
+.\" Neither the name of the University nor the names of its contributors may
+.\" be used to endorse or promote products derived from this software without
+.\" specific prior written permission.
+.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.\"
-.Dd June 4, 1993
-.Dt RESOLVER 3
+.\" @(#)resolver.3 6.5 (Berkeley) 6/23/90
+.\" Id: resolver.man3,v 1.2 2009/01/21 00:12:34 each Exp
+.\"
+.Dd July 4, 2000
+.Dt RESOLVER 3
.Os
.Sh NAME
+.Nm res_ninit ,
+.Nm res_ourserver_p ,
+.Nm fp_resstat ,
+.Nm res_hostalias ,
+.Nm res_pquery ,
+.Nm res_nquery ,
+.Nm res_nsearch ,
+.Nm res_nquerydomain ,
+.Nm res_nmkquery ,
+.Nm res_nsend ,
+.Nm res_nupdate ,
+.Nm res_nmkupdate ,
+.Nm res_nclose ,
+.Nm res_nsendsigned ,
+.Nm res_findzonecut ,
+.Nm res_getservers ,
+.Nm res_setservers ,
+.Nm res_ndestroy ,
+.Nm dn_comp ,
+.Nm dn_expand ,
+.\" .Nm hstrerror ,
+.Nm res_init ,
+.Nm res_isourserver ,
+.Nm fp_nquery ,
+.Nm p_query ,
+.Nm hostalias ,
.Nm res_query ,
.Nm res_search ,
+.Nm res_querydomain ,
.Nm res_mkquery ,
.Nm res_send ,
-.Nm res_init ,
-.Nm dn_comp ,
-.Nm dn_expand
+.Nm res_update ,
+.Nm res_close ,
+.\" .Nm herror
.Nd resolver routines
.Sh LIBRARY
.Lb libc
@@ -48,20 +79,85 @@
.In netinet/in.h
.In arpa/nameser.h
.In resolv.h
-.Fo res_query
-.Fa "const char *dname"
-.Fa "int class"
-.Fa "int type"
-.Fa "u_char *answer"
-.Fa "int anslen"
-.Fc
-.Fo res_search
+.In res_update.h
+.Vt typedef struct __res_state *res_state ;
+.Pp
+.Ft int
+.Fn res_ninit "res_state statp"
+.Ft int
+.Fn res_ourserver_p "const res_state statp" "const struct sockaddr_in *addr"
+.Ft void
+.Fn fp_resstat "const res_state statp" "FILE *fp"
+.Ft "const char *"
+.Fn res_hostalias "const res_state statp" "const char *name" "char *buf" "size_t buflen"
+.Ft int
+.Fn res_pquery "const res_state statp" "const u_char *msg" "int msglen" "FILE *fp"
+.Ft int
+.Fn res_nquery "res_state statp" "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_nsearch "res_state statp" "const char *dname" "int class" "int type" "u_char * answer" "int anslen"
+.Ft int
+.Fn res_nquerydomain "res_state statp" "const char *name" "const char *domain" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
+.Fo res_nmkquery
+.Fa "res_state statp"
+.Fa "int op"
.Fa "const char *dname"
.Fa "int class"
.Fa "int type"
-.Fa "u_char *answer"
-.Fa "int anslen"
+.Fa "const u_char *data"
+.Fa "int datalen"
+.Fa "const u_char *newrr"
+.Fa "u_char *buf"
+.Fa "int buflen"
.Fc
+.Ft int
+.Fn res_nsend "res_state statp" "const u_char *msg" "int msglen" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_nupdate "res_state statp" "ns_updrec *rrecp_in"
+.Ft int
+.Fn res_nmkupdate "res_state statp" "ns_updrec *rrecp_in" "u_char *buf" "int buflen"
+.Ft void
+.Fn res_nclose "res_state statp"
+.Ft int
+.Fn res_nsendsigned "res_state statp" "const u_char *msg" "int msglen" "ns_tsig_key *key" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_findzonecut "res_state statp" "const char *dname" "ns_class class" "int options" "char *zname" "size_t zsize" "struct in_addr *addrs" "int naddrs"
+.Ft int
+.Fn res_getservers "res_state statp" "union res_sockaddr_union *set" "int cnt"
+.Ft void
+.Fn res_setservers "res_state statp" "const union res_sockaddr_union *set" "int cnt"
+.Ft void
+.Fn res_ndestroy "res_state statp"
+.Ft int
+.Fn dn_comp "const char *exp_dn" "u_char *comp_dn" "int length" "u_char **dnptrs" "u_char **lastdnptr"
+.Ft int
+.Fn dn_expand "const u_char *msg" "const u_char *eomorig" "const u_char *comp_dn" "char *exp_dn" "int length"
+.\" .Ft "const char *"
+.\" .Fn hstrerror "int err"
+.Ss DEPRECATED
+.In sys/types.h
+.In netinet/in.h
+.In arpa/nameser.h
+.In resolv.h
+.In res_update.h
+.Ft int
+.Fn res_init "void"
+.Ft int
+.Fn res_isourserver "const struct sockaddr_in *addr"
+.Ft int
+.Fn fp_nquery "const u_char *msg" "int msglen" "FILE *fp"
+.Ft void
+.Fn p_query "const u_char *msg" "FILE *fp"
+.Ft "const char *"
+.Fn hostalias "const char *name"
+.Ft int
+.Fn res_query "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_search "const char *dname" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_querydomain "const char *name" "const char *domain" "int class" "int type" "u_char *answer" "int anslen"
+.Ft int
.Fo res_mkquery
.Fa "int op"
.Fa "const char *dname"
@@ -70,93 +166,115 @@
.Fa "const char *data"
.Fa "int datalen"
.Fa "struct rrec *newrr"
-.Fa "char *buf"
+.Fa "u_char *buf"
.Fa "int buflen"
.Fc
-.Fo res_send
-.Fa "const u_char *msg"
-.Fa "int msglen"
-.Fa "u_char *answer"
-.Fa "int anslen"
-.Fc
-.Fn res_init
-.Fo dn_comp
-.Fa "const char *exp_dn"
-.Fa "u_char *comp_dn"
-.Fa "int length"
-.Fa "u_char **dnptrs"
-.Fa "u_char **lastdnptr"
-.Fc
-.Fo dn_expand
-.Fa "const u_char *msg"
-.Fa "const u_char *eomorig"
-.Fa "const u_char *comp_dn"
-.Fa "u_char *exp_dn"
-.Fa "int length"
-.Fc
+.Ft int
+.Fn res_send "const u_char *msg" "int msglen" "u_char *answer" "int anslen"
+.Ft int
+.Fn res_update "ns_updrec *rrecp_in"
+.Ft void
+.Fn res_close "void"
+.\" .Ft void
+.\" .Fn herror "const char *s"
.Sh DESCRIPTION
These routines are used for making, sending and interpreting
query and reply messages with Internet domain name servers.
.Pp
-Global configuration and state information that is used by the
-resolver routines is kept in the structure
-.Em _res .
-Most of the values have reasonable defaults and can be ignored.
+State information is kept in
+.Fa statp
+and is used to control the behavior of these functions.
+.Fa statp
+should be set to all zeros prior to the first call to any of these functions.
+.Pp
+The functions
+.Fn res_init ,
+.Fn res_isourserver ,
+.Fn fp_nquery ,
+.Fn p_query ,
+.Fn hostalias ,
+.Fn res_query ,
+.Fn res_search ,
+.Fn res_querydomain ,
+.Fn res_mkquery ,
+.Fn res_send ,
+.Fn res_update ,
+.Fn res_close
+.\" and
+.\" .Fn 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
+.Ft _res
+rather than that referenced through
+.Ft statp .
+.Pp
+Most of the values in
+.Ft statp
+and
+.Ft _res
+are initialized on the first call to
+.Fn res_ninit
+/
+.Fn res_init
+to reasonable defaults and can be ignored.
Options
stored in
-.Em _res.options
+.Ft statp->options
+/
+.Ft _res.options
are defined in
.Pa resolv.h
and are as follows.
-Options are stored as a simple bit mask containing the bitwise ``or''
+Options are stored as a simple bit mask containing the bitwise
+.Dq OR
of the options enabled.
-.Bl -tag -width RES_USE_INET6
+.Bl -tag -width "RES_USE_INET6"
.It Dv RES_INIT
True if the initial name server address and default domain name are
initialized (i.e.,
+.Fn res_ninit
+/
.Fn res_init
has been called).
.It Dv RES_DEBUG
Print debugging messages.
.It Dv RES_AAONLY
Accept authoritative answers only.
-With this option,
-.Fn res_send
-should continue until it finds an authoritative answer or finds an error.
+Should continue until it finds an authoritative answer or finds an error.
Currently this is not implemented.
.It Dv RES_USEVC
-Use
-.Tn TCP
-connections for queries instead of
-.Tn UDP
-datagrams.
+Use TCP connections for queries instead of UDP datagrams.
.It Dv RES_STAYOPEN
-Used with
-.Dv RES_USEVC
-to keep the
-.Tn TCP
-connection open between
-queries.
+Used with
+.Dv RES_USEVC
+to keep the TCP connection open between queries.
This is useful only in programs that regularly do many queries.
-.Tn UDP
-should be the normal mode used.
+UDP should be the normal mode used.
.It Dv RES_IGNTC
-Unused currently (ignore truncation errors, i.e., don't retry with
-.Tn TCP ) .
+Ignore truncation errors, i.e., don't retry with TCP.
.It Dv RES_RECURSE
Set the recursion-desired bit in queries.
This is the default.
-.Pf ( Fn res_send
+(\c
+.Fn res_nsend
+/
+.Fn res_send
does not do iterative queries and expects the name server
to handle recursion.)
.It Dv RES_DEFNAMES
If set,
+.Fn res_nsearch
+/
.Fn res_search
will append the default domain name to single-component names
(those that do not contain a dot).
This option is enabled by default.
.It Dv RES_DNSRCH
If this option is set,
+.Fn res_nsearch
+/
.Fn res_search
will search for host names in the current domain and in parent domains; see
.Xr hostname 7 .
@@ -176,48 +294,92 @@
buffer size, and to send larger replies.
DNS query packets with EDNS0 extension is not compatible with
non-EDNS0 DNS servers.
+.It Dv RES_NOALIASES
+This option turns off the user level aliasing feature controlled by
+the
+.Ev HOSTALIASES
+environment variable.
+Network daemons should set this option.
+.It Dv RES_ROTATE
+This options causes the
+.Fn res_nsend
+/
+.Fn res_send
+to rotate the list of nameservers in
+.Fa statp->nsaddr_list
+/
+.Fa _res.nsaddr_list .
+.It Dv RES_KEEPTSIG
+This option causes
+.Fn res_nsendsigned
+to leave the message unchanged after TSIG verification; otherwise the TSIG
+record would be removed and the header updated.
+.It Dv RES_NOTLDQUERY
+This option causes
+.Fn 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
+.Dv RES_DEFNAMES
+or
+.Dv RES_DNSRCH
+is set.
.El
.Pp
The
+.Fn res_ninit
+/
.Fn res_init
routine
reads the configuration file (if any; see
.Xr resolv.conf 5 )
-to get the default domain name,
-search list and
+to get the default domain name, search list and
the Internet address of the local name server(s).
-If no server is configured, the host running
-the resolver is tried.
+If no server is configured, 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
+it can be overridden by the environment variable
.Ev LOCALDOMAIN .
This environment variable may contain several blank-separated
tokens if you wish to override the
.Fa search list
-on a per-process basis.
-This is similar to the
+on a per-process basis. This is similar to the
.Fa search
command in the configuration file.
-Another environment variable
-.Ev RES_OPTIONS
-can be set to override certain internal resolver options which
-are otherwise set by changing fields in the
-.Fa _res
+Another environment variable
+.Ev RES_OPTIONS
+can be set to override certain internal resolver options which are otherwise
+set by changing fields in the
+.Ft statp
+/
+.Ft _res
structure or are inherited from the configuration file's
.Fa options
command.
-The syntax of the
-.Ev RES_OPTIONS
+The syntax of the
+.Ev RES_OPTIONS
environment variable is explained in
.Xr resolv.conf 5 .
Initialization normally occurs on the first call
-to one of the following routines.
+to one of the other resolver routines.
+.Pp
+The memory referred to by
+.Ft statp
+must be set to all zeros prior to the first call to
+.Fn res_ninit .
+.Fn res_ndestroy
+should be call to free memory allocated by
+.Fn res_ninit
+after last use.
.Pp
The
+.Fn res_nquery
+/
.Fn res_query
-function provides an interface to the server query mechanism.
-It constructs a query, sends it to the local server,
+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
.Fa type
@@ -230,24 +392,38 @@
buffer with length
.Fa anslen
supplied by the caller.
+.Fn res_nquery
+/
+.Fn res_query
+return -1 on error or the length of the answer.
.Pp
The
+.Fn res_nsearch
+/
.Fn res_search
-routine makes a query and awaits a response like
+routines make a query and awaits a response like
+.Fn res_nquery
+/
.Fn res_query ,
but in addition, it implements the default and search rules
-controlled by the
-.Dv RES_DEFNAMES
-and
-.Dv RES_DNSRCH
+controlled by the
+.Dv RES_DEFNAMES
+and
+.Dv RES_DNSRCH
options.
-It returns the first successful reply.
+It returns the length of the first successful reply which is stored in
+.Ft answer
+or -1 on error.
.Pp
The remaining routines are lower-level routines used by
+.Fn res_nquery
+/
.Fn res_query .
The
+.Fn res_nmkquery
+/
.Fn res_mkquery
-function
+functions
constructs a standard query message and places it in
.Fa buf .
It returns the size of the query, or \-1 if the query is
@@ -255,27 +431,174 @@
.Fa buflen .
The query type
.Fa op
-is usually
-.Dv QUERY ,
+is usually
+.Dv QUERY ,
but can be any of the query types defined in
-.Aq Pa arpa/nameser.h .
+.Pa <arpa/nameser.h> .
The domain name for the query is given by
.Fa dname .
.Fa newrr
is currently unused but is intended for making update messages.
.Pp
The
+.Fn res_nsend
+/
.Fn res_send
-routine
+/
+.Fn res_nsendsigned
+routines
sends a pre-formatted query and returns an answer.
It will call
+.Fn res_ninit
+/
.Fn res_init
-if
-.Dv RES_INIT
+if
+.Dv RES_INIT
is not set, send the query to the local name server, and
-handle timeouts and retries.
-The length of the reply message is returned, or
-\-1 if there were errors.
+handle timeouts and retries. Additionally,
+.Fn 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.
+.Pp
+.Fn res_nquery
+/
+.Fn res_query ,
+.Fn res_nsearch
+/
+.Fn res_search
+and
+.Fn res_nsend
+/
+.Fn res_send
+return a length that may be bigger than
+.Fa 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.
+.Pp
+.Fa 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.
+.Pp
+The function
+.Fn res_ourserver_p
+returns true when
+.Fa inp
+is one of the servers in
+.Fa statp->nsaddr_list
+/
+.Fa _res.nsaddr_list .
+.Pp
+The functions
+.Fn fp_nquery
+/
+.Fn p_query
+print out the query and any answer in
+.Fa msg
+on
+.Fa fp .
+.Fn p_query
+is equivalent to
+.Fn fp_nquery
+with
+.Fa msglen
+set to 512.
+.Pp
+The function
+.Fn fp_resstat
+prints out the active flag bits in
+.Fa statp->options
+preceeded by the text ";; res options:" on
+.Fa file .
+.Pp
+The functions
+.Fn res_hostalias
+/
+.Fn hostalias
+lookup up name in the file referred to by the
+.Ev HOSTALIASES
+files return a fully qualified hostname if found or NULL if
+not found or an error occurred.
+.Fn res_hostalias
+uses
+.Fa buf
+to store the result in,
+.Fn hostalias
+uses a static buffer.
+.Pp
+The functions
+.Fn res_getservers
+and
+.Fn res_setservers
+are used to get and set the list of server to be queried.
+.Pp
+The functions
+.Fn res_nupdate
+/
+.Fn res_update
+take a list of ns_updrec
+.Fa 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
+.Fn res_nupdate
+will perform TSIG authenticated dynamic update operations if the key is not
+NULL.
+.Pp
+The function
+.Fn res_findzonecut
+discovers the closest enclosing zone cut for a specified domain name,
+and finds the IP addresses of the zone's master servers.
+.Pp
+The functions
+.Fn res_nmkupdate
+/
+.Fn res_mkupdate
+take a linked list of ns_updrec
+.Fa rrecp_in
+and construct a UPDATE message in
+.Fa buf .
+.Fn res_nmkupdate
+/
+.Fn res_mkupdate
+return the length of the constructed message on no error or one of the
+following error values.
+.Bl -inset -width "-5"
+.It -1
+An error occurred parsing
+.Fa rrecp_in .
+.It -2
+The buffer
+.Fa buf
+was too small.
+.It -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.
+.It -4
+A number overflow occurred.
+.It -5
+Unknown operation or no records.
+.El
+.Pp
+The functions
+.Fn res_nclose
+/
+.Fn res_close
+close any open files referenced through
+.Fa statp
+/
+.Fa _res .
+.Pp
+The function
+.Fn res_ndestroy
+calls
+.Fn res_nclose
+then frees any memory allocated by
+.Fn res_ninit .
.Pp
The
.Fn dn_comp
@@ -294,24 +617,21 @@
.Fa dnptrs
to previously-compressed names in the current message.
The first pointer points to
-the beginning of the message and the list ends with
+the beginning of the message and the list ends with
.Dv NULL .
The limit to the array is specified by
.Fa lastdnptr .
A side effect of
.Fn dn_comp
-is to update the list of pointers for
-labels inserted into the message
-as the name is compressed.
-If
-.Em dnptr
-is
-.Dv NULL ,
-names are not compressed.
-If
+is to update the list of pointers for labels inserted into the message
+as the name is compressed. If
+.Fa dnptr
+is
+.Dv NULL ,
+names are not compressed. If
.Fa lastdnptr
-is
-.Dv NULL ,
+is
+.Dv NULL ,
the list of labels is not updated.
.Pp
The
@@ -322,21 +642,63 @@
The compressed name is contained in a query or reply message;
.Fa msg
is a pointer to the beginning of the message.
+.Fa eomorig
+is a pointer to the first location after the message.
The uncompressed name is placed in the buffer indicated by
.Fa exp_dn
which is of size
.Fa length .
The size of compressed name is returned or \-1 if there was an error.
+.Pp
+The variables
+.Ft statp->res_h_errno
+/
+.Ft _res.res_h_errno
+and external variable
+.Ft h_errno
+is set whenever an error occurs during resolver operation. The following
+definitions are given in
+.Pa <netdb.h> :
+.Bd -literal
+#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 */
+.Ed
+.\" .Pp
+.\" The
+.\" .Fn herror
+.\" function writes a message to the diagnostic output consisting of the string
+.\" parameter
+.\" .Fa s ,
+.\" the constant string ": ", and a message corresponding to the value of
+.\" .Ft h_errno .
+.\" .Pp
+.\" The
+.\" .Fn hstrerror
+.\" function returns a string which is the message text corresponding to the
+.\" value of the
+.\" .Fa err
+.\" parameter.
.Sh FILES
-.Bl -tag -width XetcXresolv.confXX
-.It Pa /etc/resolv.conf
+.Bl -tag -width "/etc/resolv.conf "
+.It Pa
+/etc/resolv.conf
The configuration file, see
.Xr resolv.conf 5 .
.El
.Sh SEE ALSO
-.Xr gethostbyname 3 ,
-.Xr resolv.conf 5 ,
+.Xr gethostbyname 3 ,
.Xr hostname 7 ,
+.Xr resolv.conf 5 ,
.Xr named 8
.Pp
.%T RFC 974 ,