xref: /freebsd/contrib/sendmail/src/sm_resolve.h (revision d39bd2c1)
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