|
|
1.1 root 1: .\" Copyright (c) 1985 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted provided
5: .\" that: (1) source distributions retain this entire copyright notice and
6: .\" comment, and (2) distributions including binaries display the following
7: .\" acknowledgement: ``This product includes software developed by the
8: .\" University of California, Berkeley and its contributors'' in the
9: .\" documentation or other materials provided with the distribution and in
10: .\" all advertising materials mentioning features or use of this software.
11: .\" Neither the name of the University nor the names of its contributors may
12: .\" be used to endorse or promote products derived from this software without
13: .\" specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)resolver.3 6.5 (Berkeley) 6/23/90
19: .\"
20: .TH RESOLVER 3 "June 23, 1990"
21: .UC 4
22: .SH NAME
23: res_query, res_search, res_mkquery, res_send, res_init, dn_comp, dn_expand \- resolver routines
24: .SH SYNOPSIS
25: .B #include <sys/types.h>
26: .br
27: .B #include <netinet/in.h>
28: .br
29: .B #include <arpa/nameser.h>
30: .br
31: .B #include <resolv.h>
32: .PP
33: .B "res_query(dname, class, type, answer, anslen)"
34: .br
35: .B char *dname;
36: .br
37: .B int class, type;
38: .br
39: .B u_char *answer;
40: .br
41: .B int anslen;
42: .PP
43: .B "res_search(dname, class, type, answer, anslen)"
44: .br
45: .B char *dname;
46: .br
47: .B int class, type;
48: .br
49: .B u_char *answer;
50: .br
51: .B int anslen;
52: .PP
53: .B "res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)"
54: .br
55: .B int op;
56: .br
57: .B char *dname;
58: .br
59: .B int class, type;
60: .br
61: .B char *data;
62: .br
63: .B int datalen;
64: .br
65: .B struct rrec *newrr;
66: .br
67: .B char *buf;
68: .br
69: .B int buflen;
70: .PP
71: .B res_send(msg, msglen, answer, anslen)
72: .br
73: .B char *msg;
74: .br
75: .B int msglen;
76: .br
77: .B char *answer;
78: .br
79: .B int anslen;
80: .PP
81: .B res_init()
82: .PP
83: .B dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
84: .br
85: .B char *exp_dn, *comp_dn;
86: .br
87: .B int length;
88: .br
89: .B char **dnptrs, **lastdnptr;
90: .PP
91: .B dn_expand(msg, eomorig, comp_dn, exp_dn, length)
92: .br
93: .B char *msg, *eomorig, *comp_dn, exp_dn;
94: .br
95: .B int length;
96: .SH DESCRIPTION
97: These routines are used for making, sending and interpreting
98: query and reply messages with Internet domain name servers.
99: .PP
100: Global configuration and state information that is used by the
101: resolver routines is kept in the structure
102: .IR _res .
103: Most of the values have reasonable defaults and can be ignored.
104: Options
105: stored in
106: .I _res.options
107: are defined in
108: .I resolv.h
109: and are as follows.
110: Options are stored as a simple bit mask containing the bitwise ``or''
111: of the options enabled.
112: .IP RES_INIT
113: True if the initial name server address and default domain name are
114: initialized (i.e.,
115: .I res_init
116: has been called).
117: .IP RES_DEBUG
118: Print debugging messages.
119: .IP RES_AAONLY
120: Accept authoritative answers only.
121: With this option,
122: .I res_send
123: should continue until it finds an authoritative answer or finds an error.
124: Currently this is not implemented.
125: .IP RES_USEVC
126: Use TCP connections for queries instead of UDP datagrams.
127: .IP RES_STAYOPEN
128: Used with RES_USEVC to keep the TCP connection open between
129: queries.
130: This is useful only in programs that regularly do many queries.
131: UDP should be the normal mode used.
132: .IP RES_IGNTC
133: Unused currently (ignore truncation errors, i.e., don't retry with TCP).
134: .IP RES_RECURSE
135: Set the recursion-desired bit in queries.
136: This is the default.
137: (\c
138: .I res_send
139: does not do iterative queries and expects the name server
140: to handle recursion.)
141: .IP RES_DEFNAMES
142: If set,
143: .I res_search
144: will append the default domain name to single-component names
145: (those that do not contain a dot).
146: This option is enabled by default.
147: .IP RES_DNSRCH
148: If this option is set,
149: .I res_search
150: will search for host names in the current domain and in parent domains; see
151: .IR hostname (7).
152: This is used by the standard host lookup routine
153: .IR gethostbyname (3).
154: This option is enabled by default.
155: .PP
156: The
157: .I res_init
158: routine
159: reads the configuration file (if any; see
160: .IR resolver (5))
161: to get the default domain name,
162: search list and
163: the Internet address of the local name server(s).
164: If no server is configured, the host running
165: the resolver is tried.
166: The current domain name is defined by the hostname
167: if not specified in the configuration file;
168: it can be overridden by the environment variable LOCALDOMAIN.
169: Initialization normally occurs on the first call
170: to one of the following routines.
171: .PP
172: The
173: .I res_query
174: function provides an interface to the server query mechanism.
175: It constructs a query, sends it to the local server,
176: awaits a response, and makes preliminary checks on the reply.
177: The query requests information of the specified
178: .I type
179: and
180: .I class
181: for the specified fully-qualified domain name
182: .I dname .
183: The reply message is left in the
184: .I answer
185: buffer with length
186: .I anslen
187: supplied by the caller.
188: .PP
189: The
190: .I res_search
191: routine makes a query and awaits a response like
192: .IR res_query ,
193: but in addition, it implements the default and search rules
194: controlled by the RES_DEFNAMES and RES_DNSRCH options.
195: It returns the first successful reply.
196: .PP
197: The remaining routines are lower-level routines used by
198: .IR res_query .
199: The
200: .I res_mkquery
201: function
202: constructs a standard query message and places it in
203: .IR buf .
204: It returns the size of the query, or \-1 if the query is
205: larger than
206: .IR buflen .
207: The query type
208: .I op
209: is usually QUERY, but can be any of the query types defined in
210: .IR <arpa/nameser.h> .
211: The domain name for the query is given by
212: .IR dname .
213: .I Newrr
214: is currently unused but is intended for making update messages.
215: .PP
216: The
217: .I res_send
218: routine
219: sends a pre-formatted query and returns an answer.
220: It will call
221: .I res_init
222: if RES_INIT is not set, send the query to the local name server, and
223: handle timeouts and retries.
224: The length of the reply message is returned, or
225: \-1 if there were errors.
226: .PP
227: The
228: .I dn_comp
229: function
230: compresses the domain name
231: .I exp_dn
232: and stores it in
233: .IR comp_dn .
234: The size of the compressed name is returned or \-1 if there were errors.
235: The size of the array pointed to by
236: .I comp_dn
237: is given by
238: .IR length .
239: The compression uses
240: an array of pointers
241: .I dnptrs
242: to previously-compressed names in the current message.
243: The first pointer points to
244: to the beginning of the message and the list ends with NULL.
245: The limit to the array is specified by
246: .IR lastdnptr .
247: A side effect of
248: .I dn_comp
249: is to update the list of pointers for
250: labels inserted into the message
251: as the name is compressed.
252: If
253: .I dnptr
254: is NULL, names are not compressed.
255: If
256: .I lastdnptr
257: is NULL, the list of labels is not updated.
258: .PP
259: The
260: .I dn_expand
261: entry
262: expands the compressed domain name
263: .I comp_dn
264: to a full domain name
265: The compressed name is contained in a query or reply message;
266: .I msg
267: is a pointer to the beginning of the message.
268: The uncompressed name is placed in the buffer indicated by
269: .I exp_dn
270: which is of size
271: .IR length .
272: The size of compressed name is returned or \-1 if there was an error.
273: .SH FILES
274: /etc/resolv.conf see resolver(5)
275: .SH "SEE ALSO"
276: gethostbyname(3), named(8), resolver(5), hostname(7),
277: .br
278: RFC1032, RFC1033, RFC1034, RFC1035, RFC974,
279: .br
280: SMM:11 Name Server Operations Guide for BIND
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.