281 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\" Copyright (c) 1985 The Regents of the University of California.
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" 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.
 | 
						|
.\"
 | 
						|
.\"	@(#)resolver.3	6.5 (Berkeley) 6/23/90
 | 
						|
.\"
 | 
						|
.TH RESOLVER 3 "June 23, 1990"
 | 
						|
.UC 4
 | 
						|
.SH NAME
 | 
						|
resolver, res_query, res_search, res_mkquery, res_send, res_init, dn_comp, dn_expand \- resolver routines
 | 
						|
.SH SYNOPSIS
 | 
						|
.B #include <sys/types.h>
 | 
						|
.br
 | 
						|
.B #include <net/gen/in.h>
 | 
						|
.br
 | 
						|
.B #include <net/gen/nameser.h>
 | 
						|
.br
 | 
						|
.B #include <net/gen/resolv.h>
 | 
						|
.PP
 | 
						|
.B "res_query(dname, class, type, answer, anslen)"
 | 
						|
.br
 | 
						|
.B char *dname;
 | 
						|
.br
 | 
						|
.B int class, type;
 | 
						|
.br
 | 
						|
.B u_char *answer;
 | 
						|
.br
 | 
						|
.B int anslen;
 | 
						|
.PP
 | 
						|
.B "res_search(dname, class, type, answer, anslen)"
 | 
						|
.br
 | 
						|
.B char *dname;
 | 
						|
.br
 | 
						|
.B int class, type;
 | 
						|
.br
 | 
						|
.B u_char *answer;
 | 
						|
.br
 | 
						|
.B int anslen;
 | 
						|
.PP
 | 
						|
.B "res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)"
 | 
						|
.br
 | 
						|
.B int op;
 | 
						|
.br
 | 
						|
.B char *dname;
 | 
						|
.br
 | 
						|
.B int class, type;
 | 
						|
.br
 | 
						|
.B char *data;
 | 
						|
.br
 | 
						|
.B int datalen;
 | 
						|
.br
 | 
						|
.B struct rrec *newrr;
 | 
						|
.br
 | 
						|
.B char *buf;
 | 
						|
.br
 | 
						|
.B int buflen;
 | 
						|
.PP
 | 
						|
.B res_send(msg, msglen, answer, anslen)
 | 
						|
.br
 | 
						|
.B char *msg;
 | 
						|
.br
 | 
						|
.B int msglen;
 | 
						|
.br
 | 
						|
.B char *answer;
 | 
						|
.br
 | 
						|
.B int anslen;
 | 
						|
.PP
 | 
						|
.B res_init()
 | 
						|
.PP
 | 
						|
.B dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
 | 
						|
.br
 | 
						|
.B char *exp_dn, *comp_dn;
 | 
						|
.br
 | 
						|
.B int length;
 | 
						|
.br
 | 
						|
.B char **dnptrs, **lastdnptr;
 | 
						|
.PP
 | 
						|
.B dn_expand(msg, eomorig, comp_dn, exp_dn, length)
 | 
						|
.br
 | 
						|
.B char *msg, *eomorig, *comp_dn, exp_dn;
 | 
						|
.br
 | 
						|
.B int  length;
 | 
						|
.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
 | 
						|
.IR _res .
 | 
						|
Most of the values have reasonable defaults and can be ignored.
 | 
						|
Options
 | 
						|
stored in
 | 
						|
.I _res.options
 | 
						|
are defined in
 | 
						|
.I resolv.h
 | 
						|
and are as follows.
 | 
						|
Options are stored as a simple bit mask containing the bitwise ``or''
 | 
						|
of the options enabled.
 | 
						|
.IP RES_INIT
 | 
						|
True if the initial name server address and default domain name are
 | 
						|
initialized (i.e.,
 | 
						|
.I res_init
 | 
						|
has been called).
 | 
						|
.IP RES_DEBUG
 | 
						|
Print debugging messages.
 | 
						|
.IP RES_AAONLY
 | 
						|
Accept authoritative answers only.
 | 
						|
With this option,
 | 
						|
.I res_send
 | 
						|
should continue until it finds an authoritative answer or finds an error.
 | 
						|
Currently this is not implemented.
 | 
						|
.IP RES_USEVC
 | 
						|
Use TCP connections for queries instead of UDP datagrams.
 | 
						|
.IP 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.
 | 
						|
.IP RES_IGNTC
 | 
						|
Unused currently (ignore truncation errors, i.e., don't retry with TCP).
 | 
						|
.IP RES_RECURSE
 | 
						|
Set the recursion-desired bit in queries.
 | 
						|
This is the default.
 | 
						|
(\c
 | 
						|
.I res_send
 | 
						|
does not do iterative queries and expects the name server
 | 
						|
to handle recursion.)
 | 
						|
.IP RES_DEFNAMES
 | 
						|
If set,
 | 
						|
.I 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.
 | 
						|
.IP RES_DNSRCH
 | 
						|
If this option is set,
 | 
						|
.I res_search
 | 
						|
will search for host names in the current domain and in parent domains; see
 | 
						|
.IR hostname (7).
 | 
						|
This is used by the standard host lookup routine
 | 
						|
.IR gethostbyname (3).
 | 
						|
This option is enabled by default.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I res_init
 | 
						|
routine
 | 
						|
reads the configuration file (if any; see
 | 
						|
.IR resolver (5))
 | 
						|
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.
 | 
						|
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.
 | 
						|
Initialization normally occurs on the first call
 | 
						|
to one of the following routines.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I res_query
 | 
						|
function provides an interface to the server query mechanism.
 | 
						|
It 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
 | 
						|
.I type
 | 
						|
and
 | 
						|
.I class
 | 
						|
for the specified fully-qualified domain name
 | 
						|
.I dname .
 | 
						|
The reply message is left in the
 | 
						|
.I answer
 | 
						|
buffer with length
 | 
						|
.I anslen
 | 
						|
supplied by the caller.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I res_search
 | 
						|
routine makes a query and awaits a response like
 | 
						|
.IR res_query ,
 | 
						|
but in addition, it implements the default and search rules
 | 
						|
controlled by the RES_DEFNAMES and RES_DNSRCH options.
 | 
						|
It returns the first successful reply.
 | 
						|
.PP
 | 
						|
The remaining routines are lower-level routines used by
 | 
						|
.IR res_query .
 | 
						|
The
 | 
						|
.I res_mkquery
 | 
						|
function
 | 
						|
constructs a standard query message and places it in
 | 
						|
.IR buf .
 | 
						|
It returns the size of the query, or \-1 if the query is
 | 
						|
larger than
 | 
						|
.IR buflen .
 | 
						|
The query type
 | 
						|
.I op
 | 
						|
is usually QUERY, but can be any of the query types defined in
 | 
						|
.IR <arpa/nameser.h> .
 | 
						|
The domain name for the query is given by
 | 
						|
.IR dname .
 | 
						|
.I Newrr
 | 
						|
is currently unused but is intended for making update messages.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I res_send
 | 
						|
routine
 | 
						|
sends a pre-formatted query and returns an answer.
 | 
						|
It will call
 | 
						|
.I res_init
 | 
						|
if 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.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I dn_comp
 | 
						|
function
 | 
						|
compresses the domain name
 | 
						|
.I exp_dn
 | 
						|
and stores it in
 | 
						|
.IR comp_dn .
 | 
						|
The size of the compressed name is returned or \-1 if there were errors.
 | 
						|
The size of the array pointed to by
 | 
						|
.I comp_dn
 | 
						|
is given by
 | 
						|
.IR length .
 | 
						|
The compression uses
 | 
						|
an array of pointers
 | 
						|
.I dnptrs
 | 
						|
to previously-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
 | 
						|
.IR lastdnptr .
 | 
						|
A side effect of
 | 
						|
.I dn_comp
 | 
						|
is to update the list of pointers for
 | 
						|
labels inserted into the message
 | 
						|
as the name is compressed.
 | 
						|
If
 | 
						|
.I dnptr
 | 
						|
is NULL, names are not compressed.
 | 
						|
If
 | 
						|
.I lastdnptr
 | 
						|
is NULL, the list of labels is not updated.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I dn_expand
 | 
						|
entry
 | 
						|
expands the compressed domain name
 | 
						|
.I comp_dn
 | 
						|
to a full domain name
 | 
						|
The compressed name is contained in a query or reply message;
 | 
						|
.I msg
 | 
						|
is a pointer to the beginning of the message.
 | 
						|
The uncompressed name is placed in the buffer indicated by
 | 
						|
.I exp_dn
 | 
						|
which is of size
 | 
						|
.IR length .
 | 
						|
The size of compressed name is returned or \-1 if there was an error.
 | 
						|
.SH FILES
 | 
						|
/etc/resolv.conf	see resolver(5)
 | 
						|
.SH "SEE ALSO"
 | 
						|
gethostbyname(3), named(8), resolver(5), hostname(7),
 | 
						|
.br
 | 
						|
RFC1032, RFC1033, RFC1034, RFC1035, RFC974, 
 | 
						|
.br
 | 
						|
SMM:11 Name Server Operations Guide for BIND
 |