diff options
| author | Sam Varshavchik | 2020-05-09 09:21:12 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2020-05-09 09:21:12 -0400 | 
| commit | 8dafc1a01658760fcaf56b14ccc794d8b386f0e2 (patch) | |
| tree | ad742217332f011873fbba13ce976d931ce009a2 /tcpd | |
| parent | 1310320b6a0f31307896119968b13341b073bce2 (diff) | |
| download | courier-libs-8dafc1a01658760fcaf56b14ccc794d8b386f0e2.tar.bz2 | |
Query for both A and TXT records.
Diffstat (limited to 'tcpd')
| -rw-r--r-- | tcpd/tcpd.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/tcpd/tcpd.c b/tcpd/tcpd.c index 094940a..e263ea1 100644 --- a/tcpd/tcpd.c +++ b/tcpd/tcpd.c @@ -1,5 +1,5 @@  /* -** Copyright 1998 - 2013 Double Precision, Inc. +** Copyright 1998 - 2020 Double Precision, Inc.  ** See COPYING for distribution information.  */ @@ -1603,6 +1603,8 @@ static void docheckblocklist(struct blocklist_s *p, const char *nameptr)  	struct rfc1035_res res;  	unsigned int i;  	int found; +	unsigned char query_A[] = {RFC1035_TYPE_A, 0}, +		query_A_and_TXT[] = {RFC1035_TYPE_A, RFC1035_TYPE_TXT, 0};  	hostname[0]=0;  	strncat(hostname, nameptr, RFC1035_MAXNAMESIZE); @@ -1626,9 +1628,9 @@ static void docheckblocklist(struct blocklist_s *p, const char *nameptr)  	else  		wanttxt = p->msg && strcmp(p->msg, "*") == 0; -	(void)rfc1035_resolve_cname(&res, +	(void)rfc1035_resolve_cname_multiple(&res,  			hostname, -			wanttxt ? RFC1035_TYPE_TXT:RFC1035_TYPE_A, +			wanttxt ? query_A_and_TXT:query_A,  			RFC1035_CLASS_IN, &replyp, 0);  	if (!replyp) @@ -1670,7 +1672,8 @@ static void docheckblocklist(struct blocklist_s *p, const char *nameptr)  		if (p->allow)  			set_allow_variable(varname, p->msg); -		if (!search_txt_records(&res, p->allow, varname, replyp, +		if (replyp->next && +			!search_txt_records(&res, p->allow, varname, replyp->next,  					hostname) && !p->allow)  		{  			size_t l=strlen(p->zone)+40; @@ -1702,9 +1705,9 @@ static void docheckblocklist(struct blocklist_s *p, const char *nameptr)  	** for a specific IP address, then take what we've got.  	*/ -	if (p->ia.s_addr == INADDR_ANY && !found) +	if (p->ia.s_addr == INADDR_ANY && !found && replyp->next)  	{ -		if (search_txt_records(&res, p->allow, varname, replyp, +		if (search_txt_records(&res, p->allow, varname, replyp->next,  				       hostname))  		{  			/* | 
