@@ -239,6 +239,10 @@ if (cb->rc == DNS_SUCCEED)
239239 {
240240 int address [4 ];
241241 int mask = 0 ;
242+ uschar * orig_dnslist_domain = dnslist_domain ;
243+
244+ /* Make dnslist_domain available to dnslist_valid_addresses expansion. */
245+ dnslist_domain = domain_txt ;
242246
243247 /* At present, all known DNS blocking lists use A records, with
244248 IPv4 addresses on the RHS encoding the information they return. I
@@ -248,14 +252,21 @@ if (cb->rc == DNS_SUCCEED)
248252 We change this only for IPv4 addresses in the list. */
249253
250254 if (host_aton (da -> address , address ) == 1 )
251- if ((address [0 ] & 0xff000000 ) != 0x7f000000 ) /* 127.0.0.0/8 */
252- log_write (0 , LOG_MAIN ,
253- "DNS list lookup for %s at %s returned %s;"
254- " not in 127.0/8 and discarded" ,
255- keydomain , domain , da -> address );
255+ {
256+ if (verify_check_this_host (& dnslist_valid_addresses , NULL , US "" , da -> address , NULL ) == OK )
257+ {
258+ mask = address [0 ];
259+ }
260+ else
261+ {
262+ log_write (0 , LOG_MAIN ,
263+ "DNS list lookup for %s at %s returned %s;"
264+ " invalid address discarded" ,
265+ keydomain , domain , da -> address );
266+ }
267+ }
256268
257- else
258- mask = address [0 ];
269+ dnslist_domain = orig_dnslist_domain ;
259270
260271 /* Scan the returned addresses, skipping any that are IPv6 */
261272
@@ -315,20 +326,33 @@ if (cb->rc == DNS_SUCCEED)
315326 else
316327 {
317328 BOOL ok = FALSE;
329+ uschar * orig_dnslist_domain = dnslist_domain ;
330+
331+ /* Make dnslist_domain available to dnslist_valid_addresses expansion. */
332+ dnslist_domain = domain_txt ;
333+
318334 for (da = cb -> rhs ; da ; da = da -> next )
319335 {
320336 int address [4 ];
321337
322- if ( host_aton (da -> address , address ) == 1 /* ipv4 */
323- && (address [0 ] & 0xff000000 ) == 0x7f000000 /* 127.0.0.0/8 */
324- )
325- ok = TRUE;
326- else
327- log_write (0 , LOG_MAIN ,
328- "DNS list lookup for %s at %s returned %s;"
329- " not in 127.0/8 and discarded" ,
330- keydomain , domain , da -> address );
338+ if (host_aton (da -> address , address ) == 1 )
339+ {
340+ if (verify_check_this_host (& dnslist_valid_addresses , NULL , US "" , da -> address , NULL ) == OK )
341+ {
342+ ok = TRUE;
343+ }
344+ else
345+ {
346+ log_write (0 , LOG_MAIN ,
347+ "DNS list lookup for %s at %s returned %s;"
348+ " invalid address discarded" ,
349+ keydomain , domain , da -> address );
350+ }
351+ }
331352 }
353+
354+ dnslist_domain = orig_dnslist_domain ;
355+
332356 if (!ok ) return FAIL ;
333357 }
334358
0 commit comments