1*931108e9Sjca /* $OpenBSD: resolv.h,v 1.23 2021/11/22 20:18:27 jca Exp $ */ 2f2f113e9Sitojun 3f2f113e9Sitojun /* 4f2f113e9Sitojun * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 5f2f113e9Sitojun * All rights reserved. 6f2f113e9Sitojun * 7f2f113e9Sitojun * Redistribution and use in source and binary forms, with or without 8f2f113e9Sitojun * modification, are permitted provided that the following conditions 9f2f113e9Sitojun * are met: 10f2f113e9Sitojun * 1. Redistributions of source code must retain the above copyright 11f2f113e9Sitojun * notice, this list of conditions and the following disclaimer. 12f2f113e9Sitojun * 2. Redistributions in binary form must reproduce the above copyright 13f2f113e9Sitojun * notice, this list of conditions and the following disclaimer in the 14f2f113e9Sitojun * documentation and/or other materials provided with the distribution. 15f2f113e9Sitojun * 3. Neither the name of the project nor the names of its contributors 16f2f113e9Sitojun * may be used to endorse or promote products derived from this software 17f2f113e9Sitojun * without specific prior written permission. 18f2f113e9Sitojun * 19f2f113e9Sitojun * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 20f2f113e9Sitojun * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21f2f113e9Sitojun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22f2f113e9Sitojun * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 23f2f113e9Sitojun * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24f2f113e9Sitojun * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25f2f113e9Sitojun * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26f2f113e9Sitojun * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27f2f113e9Sitojun * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28f2f113e9Sitojun * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29f2f113e9Sitojun * SUCH DAMAGE. 30f2f113e9Sitojun */ 311231c441Sdownsj 32df930be7Sderaadt /* 331ddd5cc1Sdm * ++Copyright++ 1983, 1987, 1989, 1993 341ddd5cc1Sdm * - 351ddd5cc1Sdm * Copyright (c) 1983, 1987, 1989, 1993 361ddd5cc1Sdm * The Regents of the University of California. All rights reserved. 37df930be7Sderaadt * 38df930be7Sderaadt * Redistribution and use in source and binary forms, with or without 39df930be7Sderaadt * modification, are permitted provided that the following conditions 40df930be7Sderaadt * are met: 41df930be7Sderaadt * 1. Redistributions of source code must retain the above copyright 42df930be7Sderaadt * notice, this list of conditions and the following disclaimer. 43df930be7Sderaadt * 2. Redistributions in binary form must reproduce the above copyright 44df930be7Sderaadt * notice, this list of conditions and the following disclaimer in the 45df930be7Sderaadt * documentation and/or other materials provided with the distribution. 46e33d3bd3Smillert * 3. Neither the name of the University nor the names of its contributors 47df930be7Sderaadt * may be used to endorse or promote products derived from this software 48df930be7Sderaadt * without specific prior written permission. 49df930be7Sderaadt * 50df930be7Sderaadt * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 51df930be7Sderaadt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52df930be7Sderaadt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 53df930be7Sderaadt * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 54df930be7Sderaadt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 55df930be7Sderaadt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56df930be7Sderaadt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57df930be7Sderaadt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58df930be7Sderaadt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59df930be7Sderaadt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60df930be7Sderaadt * SUCH DAMAGE. 611ddd5cc1Sdm * - 621ddd5cc1Sdm * Portions Copyright (c) 1993 by Digital Equipment Corporation. 63df930be7Sderaadt * 641ddd5cc1Sdm * Permission to use, copy, modify, and distribute this software for any 651ddd5cc1Sdm * purpose with or without fee is hereby granted, provided that the above 661ddd5cc1Sdm * copyright notice and this permission notice appear in all copies, and that 671ddd5cc1Sdm * the name of Digital Equipment Corporation not be used in advertising or 681ddd5cc1Sdm * publicity pertaining to distribution of the document or software without 691ddd5cc1Sdm * specific, written prior permission. 701ddd5cc1Sdm * 711ddd5cc1Sdm * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL 721ddd5cc1Sdm * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES 731ddd5cc1Sdm * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT 741ddd5cc1Sdm * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 751ddd5cc1Sdm * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 761ddd5cc1Sdm * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 771ddd5cc1Sdm * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 781ddd5cc1Sdm * SOFTWARE. 791ddd5cc1Sdm * - 801ddd5cc1Sdm * --Copyright-- 811ddd5cc1Sdm */ 821ddd5cc1Sdm 831ddd5cc1Sdm /* 841ddd5cc1Sdm * @(#)resolv.h 8.1 (Berkeley) 6/2/93 851231c441Sdownsj * $From: resolv.h,v 8.17 1996/11/26 10:11:20 vixie Exp $ 86df930be7Sderaadt */ 87df930be7Sderaadt 88df930be7Sderaadt #ifndef _RESOLV_H_ 89df930be7Sderaadt #define _RESOLV_H_ 90df930be7Sderaadt 91f4d024faSguenther #include <sys/types.h> 92f2f113e9Sitojun #include <sys/socket.h> 931ddd5cc1Sdm #include <stdio.h> 941ddd5cc1Sdm 95df930be7Sderaadt /* 961231c441Sdownsj * Revision information. This is the release date in YYYYMMDD format. 971231c441Sdownsj * It can change every day so the right thing to do with it is use it 981231c441Sdownsj * in preprocessor commands such as "#if (__RES > 19931104)". Do not 99df930be7Sderaadt * compare for equality; rather, use it to determine whether your resolver 100df930be7Sderaadt * is new enough to contain a certain feature. 101df930be7Sderaadt */ 102df930be7Sderaadt 1031231c441Sdownsj #define __RES 19960801 104df930be7Sderaadt 105df930be7Sderaadt /* 106df930be7Sderaadt * Resolver configuration file. 107df930be7Sderaadt * Normally not present, but may contain the address of the 108941451a5Stodd * initial name server(s) to query and the domain search list. 109df930be7Sderaadt */ 110df930be7Sderaadt 111df930be7Sderaadt #ifndef _PATH_RESCONF 112df930be7Sderaadt #define _PATH_RESCONF "/etc/resolv.conf" 113df930be7Sderaadt #endif 114df930be7Sderaadt 115df930be7Sderaadt /* 116df930be7Sderaadt * Global defines and variables for resolver stub. 117df930be7Sderaadt */ 118df930be7Sderaadt #define MAXNS 3 /* max # name servers we'll track */ 119df930be7Sderaadt #define MAXDFLSRCH 3 /* # default domain levels to try */ 120df930be7Sderaadt #define MAXDNSRCH 6 /* max # domains in search path */ 121df930be7Sderaadt #define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */ 122df930be7Sderaadt #define MAXDNSLUS 4 /* max # of host lookup types */ 123df930be7Sderaadt 124df930be7Sderaadt #define RES_TIMEOUT 5 /* min. seconds between retries */ 125df930be7Sderaadt #define MAXRESOLVSORT 10 /* number of net to sort on */ 126df930be7Sderaadt #define RES_MAXNDOTS 15 /* should reflect bit field size */ 127df930be7Sderaadt 128df930be7Sderaadt struct __res_state { 12982fb7937Sderaadt int retrans; /* retransmission time interval */ 130df930be7Sderaadt int retry; /* number of times to retransmit */ 131ec39ddb4Stedu unsigned int options; /* option flags - see below. */ 132df930be7Sderaadt int nscount; /* number of name servers */ 13360842fdaSpyr int family[2]; /* specifies which address 13460842fdaSpyr * families will be queried and 13560842fdaSpyr * in which order */ 1361ddd5cc1Sdm struct sockaddr_in 1371ddd5cc1Sdm nsaddr_list[MAXNS]; /* address of name server */ 138df930be7Sderaadt #define nsaddr nsaddr_list[0] /* for backward compatibility */ 139d1f942abSespie unsigned short id; /* current message id */ 140df930be7Sderaadt char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ 1411231c441Sdownsj char defdname[256]; /* default domain (deprecated) */ 142ec39ddb4Stedu unsigned int pfcode; /* RES_PRF_ flags - see below. */ 1431ddd5cc1Sdm unsigned ndots:4; /* threshold for initial abs. query */ 1441ddd5cc1Sdm unsigned nsort:4; /* number of elements in sort_list[] */ 145df930be7Sderaadt char unused[3]; 146df930be7Sderaadt struct { 147df930be7Sderaadt struct in_addr addr; 148df930be7Sderaadt u_int32_t mask; 149df930be7Sderaadt } sort_list[MAXRESOLVSORT]; 150df930be7Sderaadt char lookups[MAXDNSLUS]; 151407745eaSguenther struct { time_t __res_sec; long __res_nsec; } restimespec; 152ec39ddb4Stedu time_t reschktime; 153df930be7Sderaadt }; 154df930be7Sderaadt 155f2f113e9Sitojun #if 1 /* INET6 */ 156f2f113e9Sitojun /* 157f2f113e9Sitojun * replacement of __res_state, separated to keep binary compatibility. 158f2f113e9Sitojun */ 159f2f113e9Sitojun struct __res_state_ext { 160f2f113e9Sitojun struct sockaddr_storage nsaddr_list[MAXNS]; 161f2f113e9Sitojun struct { 162f2f113e9Sitojun int af; /* address family for addr, mask */ 163f2f113e9Sitojun union { 164f2f113e9Sitojun struct in_addr ina; 165f2f113e9Sitojun struct in6_addr in6a; 166f2f113e9Sitojun } addr, mask; 167f2f113e9Sitojun } sort_list[MAXRESOLVSORT]; 168f2f113e9Sitojun }; 169f2f113e9Sitojun #endif 170f2f113e9Sitojun 171f2f113e9Sitojun 172df930be7Sderaadt /* 1731ddd5cc1Sdm * Resolver options (keep these in synch with res_debug.c, please) 174df930be7Sderaadt */ 1751ddd5cc1Sdm #define RES_INIT 0x00000001 /* address initialized */ 1761ddd5cc1Sdm #define RES_DEBUG 0x00000002 /* print debug messages */ 1771ddd5cc1Sdm #define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/ 1781ddd5cc1Sdm #define RES_USEVC 0x00000008 /* use virtual circuit */ 1791ddd5cc1Sdm #define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */ 1801ddd5cc1Sdm #define RES_IGNTC 0x00000020 /* ignore trucation errors */ 1811ddd5cc1Sdm #define RES_RECURSE 0x00000040 /* recursion desired */ 1821ddd5cc1Sdm #define RES_DEFNAMES 0x00000080 /* use default domain name */ 1831ddd5cc1Sdm #define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */ 1841ddd5cc1Sdm #define RES_DNSRCH 0x00000200 /* search up local domain tree */ 1851ddd5cc1Sdm #define RES_INSECURE1 0x00000400 /* type 1 security disabled */ 1861ddd5cc1Sdm #define RES_INSECURE2 0x00000800 /* type 2 security disabled */ 1871ddd5cc1Sdm #define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */ 1881231c441Sdownsj #define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */ 18979b6bf38Sitojun /* KAME extensions: use higher bit to avoid conflict with ISC use */ 19079b6bf38Sitojun #define RES_USE_EDNS0 0x40000000 /* use EDNS0 */ 191a572a86eSjakob /* DNSSEC extensions: use higher bit to avoid conflict with ISC use */ 192a572a86eSjakob #define RES_USE_DNSSEC 0x20000000 /* use DNSSEC using OK bit in OPT */ 1933d657e16Sotto #define RES_USE_CD 0x10000000 /* set Checking Disabled flag */ 194*931108e9Sjca #define RES_TRUSTAD 0x80000000 /* Request AD, keep it in responses. */ 195df930be7Sderaadt 196df930be7Sderaadt #define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH) 197df930be7Sderaadt 198df930be7Sderaadt /* 199df930be7Sderaadt * Resolver "pfcode" values. Used by dig. 200df930be7Sderaadt */ 2011ddd5cc1Sdm #define RES_PRF_STATS 0x00000001 2021ddd5cc1Sdm /* 0x00000002 */ 2031ddd5cc1Sdm #define RES_PRF_CLASS 0x00000004 2041ddd5cc1Sdm #define RES_PRF_CMD 0x00000008 2051ddd5cc1Sdm #define RES_PRF_QUES 0x00000010 2061ddd5cc1Sdm #define RES_PRF_ANS 0x00000020 2071ddd5cc1Sdm #define RES_PRF_AUTH 0x00000040 2081ddd5cc1Sdm #define RES_PRF_ADD 0x00000080 2091ddd5cc1Sdm #define RES_PRF_HEAD1 0x00000100 2101ddd5cc1Sdm #define RES_PRF_HEAD2 0x00000200 2111ddd5cc1Sdm #define RES_PRF_TTLID 0x00000400 2121ddd5cc1Sdm #define RES_PRF_HEADX 0x00000800 2131ddd5cc1Sdm #define RES_PRF_QUERY 0x00001000 2141ddd5cc1Sdm #define RES_PRF_REPLY 0x00002000 2151ddd5cc1Sdm #define RES_PRF_INIT 0x00004000 2161ddd5cc1Sdm /* 0x00008000 */ 2171ddd5cc1Sdm 2181ddd5cc1Sdm /* hooks are still experimental as of 4.9.2 */ 2191ddd5cc1Sdm typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } 2201ddd5cc1Sdm res_sendhookact; 2211ddd5cc1Sdm 222f3c3a9c6Smillert typedef res_sendhookact (*res_send_qhook)(struct sockaddr_in * const *ns, 223d1f942abSespie const unsigned char **query, 2241ddd5cc1Sdm int *querylen, 225d1f942abSespie unsigned char *ans, 2261ddd5cc1Sdm int anssiz, 227f3c3a9c6Smillert int *resplen); 2281ddd5cc1Sdm 229f3c3a9c6Smillert typedef res_sendhookact (*res_send_rhook)(const struct sockaddr_in *ns, 230d1f942abSespie const unsigned char *query, 2311ddd5cc1Sdm int querylen, 232d1f942abSespie unsigned char *ans, 2331ddd5cc1Sdm int anssiz, 234f3c3a9c6Smillert int *resplen); 235df930be7Sderaadt 2361231c441Sdownsj struct res_sym { 2371231c441Sdownsj int number; /* Identifying number, like T_MX */ 2381231c441Sdownsj char * name; /* Its symbolic name, like "MX" */ 2391231c441Sdownsj char * humanname; /* Its fun name, like "mail exchanger" */ 2401231c441Sdownsj }; 2411231c441Sdownsj 242df930be7Sderaadt extern struct __res_state _res; 243f2f113e9Sitojun #if 1 /* INET6 */ 244f2f113e9Sitojun extern struct __res_state_ext _res_ext; 245f2f113e9Sitojun #endif 2461231c441Sdownsj extern const struct res_sym __p_class_syms[]; 2471231c441Sdownsj extern const struct res_sym __p_type_syms[]; 248df930be7Sderaadt 249df930be7Sderaadt /* Private routines shared between libc/net, named, nslookup and others. */ 2501231c441Sdownsj #define res_hnok __res_hnok 2511231c441Sdownsj #define res_ownok __res_ownok 2521231c441Sdownsj #define res_mailok __res_mailok 2531231c441Sdownsj #define res_dnok __res_dnok 2541231c441Sdownsj #define sym_ntos __sym_ntos 2551231c441Sdownsj #define b64_ntop __b64_ntop 2561231c441Sdownsj #define b64_pton __b64_pton 257df930be7Sderaadt #define dn_skipname __dn_skipname 258df930be7Sderaadt #define putlong __putlong 259df930be7Sderaadt #define putshort __putshort 260df930be7Sderaadt #define p_class __p_class 261df930be7Sderaadt #define p_type __p_type 2621231c441Sdownsj #define dn_count_labels __dn_count_labels 2631231c441Sdownsj #define dn_comp __dn_comp 2641ddd5cc1Sdm #define res_randomid __res_randomid 2651231c441Sdownsj #define res_send __res_send 26679b6bf38Sitojun #define res_opt __res_opt 2671231c441Sdownsj 2681231c441Sdownsj #ifdef BIND_RES_POSIX3 2691231c441Sdownsj #define dn_expand __dn_expand 2701231c441Sdownsj #define res_init __res_init 2711231c441Sdownsj #define res_query __res_query 2721231c441Sdownsj #define res_search __res_search 2731231c441Sdownsj #define res_querydomain __res_querydomain 2741231c441Sdownsj #define res_mkquery __res_mkquery 2751231c441Sdownsj #endif 2761231c441Sdownsj 277df930be7Sderaadt __BEGIN_DECLS 278c72b5b24Smillert int res_hnok(const char *); 279c72b5b24Smillert int res_ownok(const char *); 280c72b5b24Smillert int res_mailok(const char *); 281c72b5b24Smillert int res_dnok(const char *); 282c72b5b24Smillert const char * sym_ntos(const struct res_sym *, int, int *); 283d1f942abSespie int b64_ntop(unsigned char const *, size_t, char *, size_t); 284d1f942abSespie int b64_pton(char const *, unsigned char *, size_t); 285d1f942abSespie int dn_skipname(const unsigned char *, 286d1f942abSespie const unsigned char *); 287d1f942abSespie void putlong(u_int32_t, unsigned char *); 288d1f942abSespie void putshort(u_int16_t, unsigned char *); 289c72b5b24Smillert const char * p_class(int); 290c72b5b24Smillert const char * p_type(int); 291d1f942abSespie int dn_comp(const char *, unsigned char *, int, 292d1f942abSespie unsigned char **, unsigned char **); 293d1f942abSespie int dn_expand(const unsigned char *, const unsigned char *, 294d1f942abSespie const unsigned char *, char *, int); 295c72b5b24Smillert int res_init(void); 296d1f942abSespie unsigned int res_randomid(void); 297d1f942abSespie int res_query(const char *, int, int, unsigned char *, int) 29889b95c1cSavsm __attribute__((__bounded__(__string__,4,5))); 299d1f942abSespie int res_search(const char *, int, int, unsigned char *, int) 30089b95c1cSavsm __attribute__((__bounded__(__string__,4,5))); 301f3c3a9c6Smillert int res_querydomain(const char *, const char *, int, int, 302d1f942abSespie unsigned char *, int) 30389b95c1cSavsm __attribute__((__bounded__(__string__,5,6))); 304d1f942abSespie int res_mkquery(int, const char *, int, int, 305d1f942abSespie const unsigned char *, int, const unsigned char *, 306d1f942abSespie unsigned char *, int) 30789b95c1cSavsm __attribute__((__bounded__(__string__,5,6))) 30889b95c1cSavsm __attribute__((__bounded__(__string__,8,9))); 309d1f942abSespie int res_send(const unsigned char *, int, unsigned char *, 310d1f942abSespie int) 31189b95c1cSavsm __attribute__((__bounded__(__string__,3,4))); 312df930be7Sderaadt __END_DECLS 313df930be7Sderaadt 314df930be7Sderaadt #endif /* !_RESOLV_H_ */ 315