Mail::SPF::Mech::Exists - SPF record C<exists> mechanism class


Mail-SPF documentation Contained in the Mail-SPF distribution.

Index


Code Index:

NAME

Top

Mail::SPF::Mech::Exists - SPF record exists mechanism class

DESCRIPTION

Top

An object of class Mail::SPF::Mech::Exists represents an SPF record mechanism of type exists.

Constructors

The following constructors are provided:

new(%options): returns Mail::SPF::Mech::Exists

Creates a new SPF record exists mechanism object.

%options is a list of key/value pairs representing any of the following options:

qualifier
domain_spec

See new in Mail::SPF::Mech.

new_from_string($text, %options): returns Mail::SPF::Mech::Exists; throws Mail::SPF::ENothingToParse, Mail::SPF::EInvalidMech

Creates a new SPF record exists mechanism object by parsing the string and any options given.

Class methods

The following class methods are provided:

default_qualifier
qualifier_pattern

See Class methods in Mail::SPF::Mech.

name: returns string

Returns 'exists'.

name_pattern: returns Regexp

Returns a regular expression that matches a mechanism name of 'exists'.

Instance methods

The following instance methods are provided:

text
qualifier
params
stringify

See Instance methods in Mail::SPF::Mech.

domain_spec: returns Mail::SPF::MacroString

Returns the domain-spec parameter of the mechanism.

match($server, $request): returns boolean

Checks whether a DNS A record exists for the mechanism's target domain name, and returns true if one does, or false otherwise. See RFC 4408, 5.7, for details.

SEE ALSO

Top

Mail::SPF, Mail::SPF::Record, Mail::SPF::Term, Mail::SPF::Mech

http://www.ietf.org/rfc/rfc4408.txt

For availability, support, and license information, see the README file included with Mail::SPF.

AUTHORS

Top

Julian Mehnle <julian@mehnle.net>, Shevek <cpan@anarres.org>


Mail-SPF documentation Contained in the Mail-SPF distribution.
#
# Mail::SPF::Mech::Exists
# SPF record "exists" mechanism class.
#
# (C) 2005-2008 Julian Mehnle <julian@mehnle.net>
#     2005      Shevek <cpan@anarres.org>
# $Id: Exists.pm 50 2008-08-17 21:28:15Z Julian Mehnle $
#
##############################################################################

package Mail::SPF::Mech::Exists;

use warnings;
use strict;

use base 'Mail::SPF::Mech';

use constant TRUE   => (0 == 0);
use constant FALSE  => not TRUE;

use constant name           => 'exists';
use constant name_pattern   => qr/${\name}/i;

sub parse_params {
    my ($self) = @_;
    $self->parse_domain_spec(TRUE);
    return;
}

sub params {
    my ($self) = @_;
    return defined($self->{domain_spec}) ? ':' . $self->{domain_spec} : undef;
}

# Make read-only accessor:
__PACKAGE__->make_accessor('domain_spec', TRUE);

sub match {
    my ($self, $server, $request) = @_;
    
    $server->count_dns_interactive_term($request);
    
    my $domain = $self->domain($server, $request);
    my $packet = $server->dns_lookup($domain, 'A');
    my @rrs    = $packet->answer
        or $server->count_void_dns_lookup($request);
    
    foreach my $rr (@rrs) {
        return TRUE
            if $rr->type eq 'A';
    }
    return FALSE;
}

TRUE;