# # Mail::SPF::Mech::A # SPF record "a" mechanism class. # # (C) 2005-2012 Julian Mehnle # 2005 Shevek # $Id: A.pm 57 2012-01-30 08:15:31Z julian $ # ############################################################################## package Mail::SPF::Mech::A; =head1 NAME Mail::SPF::Mech::A - SPF record C mechanism class =cut use warnings; use strict; use base 'Mail::SPF::SenderIPAddrMech'; use constant TRUE => (0 == 0); use constant FALSE => not TRUE; use constant name => 'a'; use constant name_pattern => qr/${\name}/i; =head1 DESCRIPTION An object of class B represents an SPF record mechanism of type C. =head2 Constructors The following constructors are provided: =over =item B: returns I Creates a new SPF record C mechanism object. %options is a list of key/value pairs representing any of the following options: =over =item B =item B =item B =item B See L. =back =item B: returns I; throws I, I Creates a new SPF record C mechanism object by parsing the string and any options given. =back =head2 Class methods The following class methods are provided: =over =item B =item B =item B =item B See L. =item B: returns I Returns B<'a'>. =item B: returns I Returns a regular expression that matches a mechanism name of B<'a'>. =back =head2 Instance methods The following instance methods are provided: =over =cut sub parse_params { my ($self) = @_; $self->parse_domain_spec(); $self->parse_ipv4_ipv6_prefix_lengths(); return; } =item B =item B =item B =cut sub params { my ($self) = @_; my $params; $params .= ':' . $self->{domain_spec} if defined($self->{domain_spec}); $params .= '/' . $self->{ipv4_prefix_length} if defined($self->{ipv4_prefix_length}) and $self->{ipv4_prefix_length} != $self->default_ipv4_prefix_length; $params .= '//' . $self->{ipv6_prefix_length} if defined($self->{ipv6_prefix_length}) and $self->{ipv6_prefix_length} != $self->default_ipv6_prefix_length; return $params; } =item B =item B =item B See L. =item B: returns I Returns the C parameter of the mechanism. =item B: returns I Returns the IPv4 network prefix length of the mechanism. =item B: returns I Returns the IPv6 network prefix length of the mechanism. =cut # Make read-only accessors: __PACKAGE__->make_accessor($_, TRUE) foreach qw(domain_spec ipv4_prefix_length ipv6_prefix_length); =item B: returns I Checks whether the mechanism's target domain name (that is, any of its DNS C or C host addresses) matches the given request's IP address (see L), and returns B if it does, or B otherwise. The mechanism's IP network prefix lengths are respected when matching address records against the request's IP address. See RFC 4408, 5, for the exact algorithm used. =cut sub match { my ($self, $server, $request) = @_; $server->count_dns_interactive_term($request); return $self->match_in_domain($server, $request); } =back =head1 SEE ALSO L, L, L, L L For availability, support, and license information, see the README file included with Mail::SPF. =head1 AUTHORS Julian Mehnle , Shevek =cut TRUE;