140266059SGregory Neil Shapiro /* 25dd76dd0SGregory Neil Shapiro * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 340266059SGregory Neil Shapiro * All rights reserved. 440266059SGregory Neil Shapiro * 540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set 640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of 740266059SGregory Neil Shapiro * the sendmail distribution. 840266059SGregory Neil Shapiro * 940266059SGregory Neil Shapiro */ 1040266059SGregory Neil Shapiro 1140266059SGregory Neil Shapiro /* 1240266059SGregory Neil Shapiro * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska H�gskolan 1340266059SGregory Neil Shapiro * (Royal Institute of Technology, Stockholm, Sweden). 1440266059SGregory Neil Shapiro * All rights reserved. 1540266059SGregory Neil Shapiro * 1640266059SGregory Neil Shapiro * Redistribution and use in source and binary forms, with or without 1740266059SGregory Neil Shapiro * modification, are permitted provided that the following conditions 1840266059SGregory Neil Shapiro * are met: 1940266059SGregory Neil Shapiro * 2040266059SGregory Neil Shapiro * 1. Redistributions of source code must retain the above copyright 2140266059SGregory Neil Shapiro * notice, this list of conditions and the following disclaimer. 2240266059SGregory Neil Shapiro * 2340266059SGregory Neil Shapiro * 2. Redistributions in binary form must reproduce the above copyright 2440266059SGregory Neil Shapiro * notice, this list of conditions and the following disclaimer in the 2540266059SGregory Neil Shapiro * documentation and/or other materials provided with the distribution. 2640266059SGregory Neil Shapiro * 2740266059SGregory Neil Shapiro * 3. Neither the name of the Institute nor the names of its contributors 2840266059SGregory Neil Shapiro * may be used to endorse or promote products derived from this software 2940266059SGregory Neil Shapiro * without specific prior written permission. 3040266059SGregory Neil Shapiro * 3140266059SGregory Neil Shapiro * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 3240266059SGregory Neil Shapiro * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 3340266059SGregory Neil Shapiro * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 3440266059SGregory Neil Shapiro * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 3540266059SGregory Neil Shapiro * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3640266059SGregory Neil Shapiro * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3740266059SGregory Neil Shapiro * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3840266059SGregory Neil Shapiro * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3940266059SGregory Neil Shapiro * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 4040266059SGregory Neil Shapiro * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 4140266059SGregory Neil Shapiro * SUCH DAMAGE. 4240266059SGregory Neil Shapiro */ 4340266059SGregory Neil Shapiro 444313cc83SGregory Neil Shapiro /* $Id: sm_resolve.h,v 8.9 2013-11-22 20:51:56 ca Exp $ */ 4540266059SGregory Neil Shapiro 46d39bd2c1SGregory Neil Shapiro #ifndef SM_RESOLVE_H 47d39bd2c1SGregory Neil Shapiro #define SM_RESOLVE_H 4840266059SGregory Neil Shapiro 49d39bd2c1SGregory Neil Shapiro #if DNSMAP || DANE 5040266059SGregory Neil Shapiro /* We use these, but they are not always present in <arpa/nameser.h> */ 5140266059SGregory Neil Shapiro 5240266059SGregory Neil Shapiro # ifndef T_TXT 5340266059SGregory Neil Shapiro # define T_TXT 16 545b0945b5SGregory Neil Shapiro # endif 5540266059SGregory Neil Shapiro # ifndef T_AFSDB 5640266059SGregory Neil Shapiro # define T_AFSDB 18 575b0945b5SGregory Neil Shapiro # endif 5840266059SGregory Neil Shapiro # ifndef T_SRV 5940266059SGregory Neil Shapiro # define T_SRV 33 605b0945b5SGregory Neil Shapiro # endif 6140266059SGregory Neil Shapiro # ifndef T_NAPTR 6240266059SGregory Neil Shapiro # define T_NAPTR 35 635b0945b5SGregory Neil Shapiro # endif 645b0945b5SGregory Neil Shapiro # ifndef T_RRSIG 655b0945b5SGregory Neil Shapiro # define T_RRSIG 46 665b0945b5SGregory Neil Shapiro # endif 675b0945b5SGregory Neil Shapiro # ifndef T_TLSA 685b0945b5SGregory Neil Shapiro # define T_TLSA 52 695b0945b5SGregory Neil Shapiro # endif 7040266059SGregory Neil Shapiro 7140266059SGregory Neil Shapiro typedef struct 7240266059SGregory Neil Shapiro { 7340266059SGregory Neil Shapiro char *dns_q_domain; 7440266059SGregory Neil Shapiro unsigned int dns_q_type; 7540266059SGregory Neil Shapiro unsigned int dns_q_class; 7640266059SGregory Neil Shapiro } DNS_QUERY_T; 7740266059SGregory Neil Shapiro 7840266059SGregory Neil Shapiro typedef struct 7940266059SGregory Neil Shapiro { 8040266059SGregory Neil Shapiro unsigned int mx_r_preference; 8140266059SGregory Neil Shapiro char mx_r_domain[1]; 8240266059SGregory Neil Shapiro } MX_RECORD_T; 8340266059SGregory Neil Shapiro 8440266059SGregory Neil Shapiro typedef struct 8540266059SGregory Neil Shapiro { 8640266059SGregory Neil Shapiro unsigned int srv_r_priority; 8740266059SGregory Neil Shapiro unsigned int srv_r_weight; 8840266059SGregory Neil Shapiro unsigned int srv_r_port; 8940266059SGregory Neil Shapiro char srv_r_target[1]; 9040266059SGregory Neil Shapiro } SRV_RECORDT_T; 9140266059SGregory Neil Shapiro 9240266059SGregory Neil Shapiro 9340266059SGregory Neil Shapiro typedef struct resource_record RESOURCE_RECORD_T; 9440266059SGregory Neil Shapiro 9540266059SGregory Neil Shapiro struct resource_record 9640266059SGregory Neil Shapiro { 9740266059SGregory Neil Shapiro char *rr_domain; 9840266059SGregory Neil Shapiro unsigned int rr_type; 9940266059SGregory Neil Shapiro unsigned int rr_class; 10040266059SGregory Neil Shapiro unsigned int rr_ttl; 10140266059SGregory Neil Shapiro unsigned int rr_size; 10240266059SGregory Neil Shapiro union 10340266059SGregory Neil Shapiro { 10440266059SGregory Neil Shapiro void *rr_data; 10540266059SGregory Neil Shapiro MX_RECORD_T *rr_mx; 10640266059SGregory Neil Shapiro MX_RECORD_T *rr_afsdb; /* mx and afsdb are identical */ 10740266059SGregory Neil Shapiro SRV_RECORDT_T *rr_srv; 10840266059SGregory Neil Shapiro # if NETINET 10940266059SGregory Neil Shapiro struct in_addr *rr_a; 1105b0945b5SGregory Neil Shapiro # endif 11140266059SGregory Neil Shapiro # if NETINET6 11240266059SGregory Neil Shapiro struct in6_addr *rr_aaaa; 1135b0945b5SGregory Neil Shapiro # endif 11440266059SGregory Neil Shapiro char *rr_txt; 11540266059SGregory Neil Shapiro } rr_u; 11640266059SGregory Neil Shapiro RESOURCE_RECORD_T *rr_next; 11740266059SGregory Neil Shapiro }; 11840266059SGregory Neil Shapiro 11940266059SGregory Neil Shapiro # if !defined(T_A) && !defined(T_AAAA) 12040266059SGregory Neil Shapiro /* XXX if <arpa/nameser.h> isn't included */ 12140266059SGregory Neil Shapiro typedef int HEADER; /* will never be used */ 1225b0945b5SGregory Neil Shapiro # endif 12340266059SGregory Neil Shapiro 12440266059SGregory Neil Shapiro typedef struct 12540266059SGregory Neil Shapiro { 12640266059SGregory Neil Shapiro HEADER dns_r_h; 12740266059SGregory Neil Shapiro DNS_QUERY_T dns_r_q; 12840266059SGregory Neil Shapiro RESOURCE_RECORD_T *dns_r_head; 12940266059SGregory Neil Shapiro } DNS_REPLY_T; 13040266059SGregory Neil Shapiro 1315b0945b5SGregory Neil Shapiro #define SM_DNS_FL_EDNS0 0x01 1325b0945b5SGregory Neil Shapiro #define SM_DNS_FL_DNSSEC 0x02 1335b0945b5SGregory Neil Shapiro 1345b0945b5SGregory Neil Shapiro /* flags for parse_dns_reply() et.al. */ 1355b0945b5SGregory Neil Shapiro #define RR_AS_TEXT 0x01 /* convert some RRs to text, e.g., TLSA */ 1365b0945b5SGregory Neil Shapiro #define RR_RAW 0x02 /* return some RRs as "raw" data */ 1375b0945b5SGregory Neil Shapiro /* currently not used (set, but not read) */ 1385b0945b5SGregory Neil Shapiro #define RR_NO_CNAME 0x04 /* do not try CNAME lookup */ 1395b0945b5SGregory Neil Shapiro #define RR_ONLY_CNAME 0x08 /* if !RR_NO_CNAME" return only CNAME */ 14040266059SGregory Neil Shapiro 14140266059SGregory Neil Shapiro extern void dns_free_data __P((DNS_REPLY_T *)); 14240266059SGregory Neil Shapiro extern int dns_string_to_type __P((const char *)); 14340266059SGregory Neil Shapiro extern const char *dns_type_to_string __P((int)); 1445b0945b5SGregory Neil Shapiro extern DNS_REPLY_T *dns_lookup_map __P((const char *, int, int, time_t, 1455b0945b5SGregory Neil Shapiro int, unsigned int)); 1465b0945b5SGregory Neil Shapiro extern DNS_REPLY_T *dns_lookup_int __P((const char *, int, int, time_t, 1475b0945b5SGregory Neil Shapiro int, unsigned int, unsigned int, int *, int *)); 14840266059SGregory Neil Shapiro # if 0 14940266059SGregory Neil Shapiro extern DNS_REPLY_T *dns_lookup __P((const char *domain, 15040266059SGregory Neil Shapiro const char *type_name, 15140266059SGregory Neil Shapiro time_t retrans, 15240266059SGregory Neil Shapiro int retry)); 15340266059SGregory Neil Shapiro # endif /* 0 */ 15440266059SGregory Neil Shapiro 1555b0945b5SGregory Neil Shapiro # if DANE 1565b0945b5SGregory Neil Shapiro struct hostent *dns2he __P((DNS_REPLY_T *, int)); 1575b0945b5SGregory Neil Shapiro # endif 1585b0945b5SGregory Neil Shapiro 1595b0945b5SGregory Neil Shapiro /* what to do if family is not supported? add SM_ASSERT()? */ 1605b0945b5SGregory Neil Shapiro #define FAM2T_(family) (((family) == AF_INET) ? T_A : T_AAAA) 1615b0945b5SGregory Neil Shapiro 1625b0945b5SGregory Neil Shapiro # if DNSSEC_TEST 1635b0945b5SGregory Neil Shapiro const char *herrno2txt __P((int)); 1645b0945b5SGregory Neil Shapiro int setherrnofromstring __P((const char *, int *)); 1655b0945b5SGregory Neil Shapiro int getttlfromstring __P((const char *)); 1665b0945b5SGregory Neil Shapiro int tstdns_search __P((const char *, int, int, u_char *, int)); 1675b0945b5SGregory Neil Shapiro int tstdns_querydomain __P((const char *, const char *, int, int, unsigned char *, int)); 1685b0945b5SGregory Neil Shapiro 169d39bd2c1SGregory Neil Shapiro # endif /* DNSSEC_TEST*/ 170d39bd2c1SGregory Neil Shapiro 171d39bd2c1SGregory Neil Shapiro #ifndef RES_TRUSTAD 172d39bd2c1SGregory Neil Shapiro # define RES_TRUSTAD 0 173d39bd2c1SGregory Neil Shapiro #endif 174d39bd2c1SGregory Neil Shapiro #define SM_RES_DNSSEC (RES_USE_EDNS0|RES_USE_DNSSEC|RES_TRUSTAD) 175d39bd2c1SGregory Neil Shapiro 176d39bd2c1SGregory Neil Shapiro #endif /* DNSMAP || DANE */ 177d39bd2c1SGregory Neil Shapiro 178d39bd2c1SGregory Neil Shapiro #if DNSSEC_TEST || _FFR_NAMESERVER 1795b0945b5SGregory Neil Shapiro # ifdef _DEFINE_SMR_GLOBALS 1805b0945b5SGregory Neil Shapiro # define SMR_EXTERN 1815b0945b5SGregory Neil Shapiro # else 1825b0945b5SGregory Neil Shapiro # define SMR_EXTERN extern 1835b0945b5SGregory Neil Shapiro # endif 1845b0945b5SGregory Neil Shapiro SMR_EXTERN char *NameSearchList; 1855b0945b5SGregory Neil Shapiro # undef SMR_EXTERN 1865b0945b5SGregory Neil Shapiro extern int nsportip __P((char *)); 187d39bd2c1SGregory Neil Shapiro #endif /* DNSSEC_TEST || _FFR_NAMESERVER */ 1885b0945b5SGregory Neil Shapiro 189d39bd2c1SGregory Neil Shapiro #endif /* ! SM_RESOLVE_H */ 190