1.\" Copyright (c) 1985, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)resolver.3 8.1 (Berkeley) 6/4/93 33.\" $FreeBSD$ 34.\" 35.Dd June 4, 1993 36.Dt RESOLVER 3 37.Os BSD 4.3 38.Sh NAME 39.Nm res_query , 40.Nm res_search , 41.Nm res_mkquery , 42.Nm res_send , 43.Nm res_init , 44.Nm dn_comp , 45.Nm dn_expand 46.Nd resolver routines 47.Sh LIBRARY 48.Lb libc 49.Sh SYNOPSIS 50.Fd #include <sys/types.h> 51.Fd #include <netinet/in.h> 52.Fd #include <arpa/nameser.h> 53.Fd #include <resolv.h> 54.Ft int 55.Fo res_query 56.Fa "const char *dname" 57.Fa "int class" 58.Fa "int type" 59.Fa "u_char *answer" 60.Fa "int anslen" 61.Fc 62.Ft int 63.Fo res_search 64.Fa "const char *dname" 65.Fa "int class" 66.Fa "int type" 67.Fa "u_char *answer" 68.Fa "int anslen" 69.Fc 70.Ft int 71.Fo res_mkquery 72.Fa "int op" 73.Fa "const char *dname" 74.Fa "int class" 75.Fa "int type" 76.Fa "const u_char *data" 77.Fa "int datalen" 78.Fa "const u_char *newrr_in" 79.Fa "u_char *buf" 80.Fa "int buflen" 81.Fc 82.Ft int 83.Fo res_send 84.Fa "const u_char *msg" 85.Fa "int msglen" 86.Fa "u_char *answer" 87.Fa "int anslen" 88.Fc 89.Ft int 90.Fn res_init 91.Fo dn_comp 92.Fa "const char *exp_dn" 93.Fa "u_char *comp_dn" 94.Fa "int length" 95.Fa "u_char **dnptrs" 96.Fa "u_char **lastdnptr" 97.Fc 98.Ft int 99.Fo dn_expand 100.Fa "const u_char *msg" 101.Fa "const u_char *eomorig" 102.Fa "const u_char *comp_dn" 103.Fa "char *exp_dn" 104.Fa "int length" 105.Fc 106.Sh DESCRIPTION 107These routines are used for making, sending and interpreting 108query and reply messages with Internet domain name servers. 109.Pp 110Global configuration and state information that is used by the 111resolver routines is kept in the structure 112.Em _res . 113Most of the values have reasonable defaults and can be ignored. 114Options 115stored in 116.Em _res.options 117are defined in 118.Pa resolv.h 119and are as follows. 120Options are stored as a simple bit mask containing the bitwise ``or'' 121of the options enabled. 122.Bl -tag -width RES_USE_INET6 123.It Dv RES_INIT 124True if the initial name server address and default domain name are 125initialized (i.e., 126.Fn res_init 127has been called). 128.It Dv RES_DEBUG 129Print debugging messages. 130.It Dv RES_AAONLY 131Accept authoritative answers only. 132With this option, 133.Fn res_send 134should continue until it finds an authoritative answer or finds an error. 135Currently this is not implemented. 136.It Dv RES_USEVC 137Use 138.Tn TCP 139connections for queries instead of 140.Tn UDP 141datagrams. 142.It Dv RES_STAYOPEN 143Used with 144.Dv RES_USEVC 145to keep the 146.Tn TCP 147connection open between 148queries. 149This is useful only in programs that regularly do many queries. 150.Tn UDP 151should be the normal mode used. 152.It Dv RES_IGNTC 153Unused currently (ignore truncation errors, i.e., don't retry with 154.Tn TCP ) . 155.It Dv RES_RECURSE 156Set the recursion-desired bit in queries. 157This is the default. 158.Pf ( Fn res_send 159does not do iterative queries and expects the name server 160to handle recursion.) 161.It Dv RES_DEFNAMES 162If set, 163.Fn res_search 164will append the default domain name to single-component names 165(those that do not contain a dot). 166This option is enabled by default. 167.It Dv RES_DNSRCH 168If this option is set, 169.Fn res_search 170will search for host names in the current domain and in parent domains; see 171.Xr hostname 7 . 172This is used by the standard host lookup routine 173.Xr gethostbyname 3 . 174This option is enabled by default. 175.It Dv RES_NOALIASES 176This option turns off the user level aliasing feature controlled by the 177.Dq Ev HOSTALIASES 178environment variable. Network daemons should set this option. 179.It Dv RES_USE_INET6 180Enables support for IPv6-only applications. 181This causes IPv4 addresses to be returned as an IPv4 mapped address. 182For example, 10.1.1.1 will be returned as ::ffff:10.1.1.1. 183The option is meaningful with certain kernel configuration only. 184.It Dv RES_USE_EDNS0 185Enables support for OPT pseudo-RR for EDNS0 extension. 186With the option, resolver code will attach OPT pseudo-RR into DNS queries, 187to inform of our receive buffer size. 188The option will allow DNS servers to take advantage of non-default receive 189buffer size, and to send larger replies. 190DNS query packets with EDNS0 extension is not compatible with 191non-EDNS0 DNS servers. 192.El 193.Pp 194The 195.Fn res_init 196routine 197reads the configuration file (if any; see 198.Xr resolver 5 ) 199to get the default domain name, 200search list and 201the Internet address of the local name server(s). 202If no server is configured, the host running 203the resolver is tried. 204The current domain name is defined by the hostname 205if not specified in the configuration file; 206it can be overridden by the environment variable 207.Ev LOCALDOMAIN . 208This environment variable may contain several blank-separated 209tokens if you wish to override the 210.Em "search list" 211on a per-process basis. This is similar to the 212.Em search 213command in the configuration file. 214Another environment variable ( 215.Dq Ev RES_OPTIONS 216can be set to 217override certain internal resolver options which are otherwise 218set by changing fields in the 219.Em _res 220structure or are inherited from the configuration file's 221.Em options 222command. The syntax of the 223.Dq Ev RES_OPTIONS 224environment variable is explained in 225.Xr resolver 5 . 226Initialization normally occurs on the first call 227to one of the following routines. 228.Pp 229The 230.Fn res_query 231function provides an interface to the server query mechanism. 232It constructs a query, sends it to the local server, 233awaits a response, and makes preliminary checks on the reply. 234The query requests information of the specified 235.Fa type 236and 237.Fa class 238for the specified fully-qualified domain name 239.Fa dname . 240The reply message is left in the 241.Fa answer 242buffer with length 243.Fa anslen 244supplied by the caller. 245.Pp 246The 247.Fn res_search 248routine makes a query and awaits a response like 249.Fn res_query , 250but in addition, it implements the default and search rules 251controlled by the 252.Dv RES_DEFNAMES 253and 254.Dv RES_DNSRCH 255options. 256It returns the first successful reply. 257.Pp 258The remaining routines are lower-level routines used by 259.Fn res_query . 260The 261.Fn res_mkquery 262function 263constructs a standard query message and places it in 264.Fa buf . 265It returns the size of the query, or \-1 if the query is 266larger than 267.Fa buflen . 268The query type 269.Fa op 270is usually 271.Dv QUERY , 272but can be any of the query types defined in 273.Aq Pa arpa/nameser.h . 274The domain name for the query is given by 275.Fa dname . 276.Fa Newrr 277is currently unused but is intended for making update messages. 278.Pp 279The 280.Fn res_send 281routine 282sends a pre-formatted query and returns an answer. 283It will call 284.Fn res_init 285if 286.Dv RES_INIT 287is not set, send the query to the local name server, and 288handle timeouts and retries. 289The length of the reply message is returned, or 290\-1 if there were errors. 291.Pp 292The 293.Fn dn_comp 294function 295compresses the domain name 296.Fa exp_dn 297and stores it in 298.Fa comp_dn . 299The size of the compressed name is returned or \-1 if there were errors. 300The size of the array pointed to by 301.Fa comp_dn 302is given by 303.Fa length . 304The compression uses 305an array of pointers 306.Fa dnptrs 307to previously-compressed names in the current message. 308The first pointer points to 309the beginning of the message and the list ends with 310.Dv NULL . 311The limit to the array is specified by 312.Fa lastdnptr . 313A side effect of 314.Fn dn_comp 315is to update the list of pointers for 316labels inserted into the message 317as the name is compressed. 318If 319.Em dnptr 320is 321.Dv NULL , 322names are not compressed. 323If 324.Fa lastdnptr 325is 326.Dv NULL , 327the list of labels is not updated. 328.Pp 329The 330.Fn dn_expand 331entry 332expands the compressed domain name 333.Fa comp_dn 334to a full domain name 335The compressed name is contained in a query or reply message; 336.Fa msg 337is a pointer to the beginning of the message. 338The uncompressed name is placed in the buffer indicated by 339.Fa exp_dn 340which is of size 341.Fa length . 342The size of compressed name is returned or \-1 if there was an error. 343.Sh FILES 344.Bl -tag -width /etc/resolv.conf 345.It Pa /etc/resolv.conf 346The configuration file, 347see 348.Xr resolver 5 . 349.El 350.Sh SEE ALSO 351.Xr gethostbyname 3 , 352.Xr resolver 5 , 353.Xr hostname 7 , 354.Xr named 8 355.Pp 356.%T RFC1032 , 357.%T RFC1033 , 358.%T RFC1034 , 359.%T RFC1035 , 360.%T RFC974 361.Rs 362.%T "Name Server Operations Guide for BIND" 363.Re 364.Sh HISTORY 365The 366.Nm 367function appeared in 368.Bx 4.3 . 369