[Mimedefang] Re: Detecting backup MX

Kenneth Porter shiva at sewingwitch.com
Fri Mar 4 12:29:37 EST 2005


--On Friday, March 04, 2005 9:52 AM -0500 Troy Carpenter 
<troy at carpenter.cx> wrote:

>> How are you testing for this?  I've been wanting to do this for
>> a while, since my backup MX queue is always full of junk trying to
>> be sent back...

I didn't see the original message on the list. Here's my implementation:

use Net::DNS;

sub GetHostAddresses ($$) {
        my ($resolver,$hostname) = @_;
        my @addresses;
        my $received = $resolver->search($hostname);
        foreach my $rr ($received->answer) {
                next unless $rr->type eq "A";
                push(@addresses, $rr->address);
        }
        return @addresses;
}

# GetDomainMXAddresses(resolver,domain)
# returns array of IP addresses for domain's MX list
# if no MX records, returns array of IP addresses for this hostname

sub GetDomainMXAddresses ($$) {
        my ($resolver,$domain) = @_;
        my  @mxlist = mx($resolver, $domain);
        my @mxaddresses;
        if (@mxlist) {
                push(@mxaddresses, map { GetHostAddresses($resolver, 
$_->exchange); } @mxlist);
        } else { # check for an A record for the domain...
                push(@mxaddresses, GetHostAddresses($resolver, $domain));
        }
        return @mxaddresses;
}

# MTA_is_domain_MX(domain,address)
# returns TRUE if address is a MX for domain

sub MTA_is_domain_MX ($$) {
        my ($domain,$address) = @_;
        return grep { /^$address$/ } 
GetDomainMXAddresses(Net::DNS::Resolver->new, $domain);
}

#Usage:
        if (MTA_is_domain_MX($MyDomain,$RelayAddr)) {
                # don't pester mx backup
                return action_discard();
        } else {
                return action_bounce($message);
        }






More information about the MIMEDefang mailing list