# # Mail::SPF::Mech::Exists # SPF record "exists" mechanism class. # # (C) 2005-2012 Julian Mehnle # 2005 Shevek # $Id: Exists.pm 57 2012-01-30 08:15:31Z julian $ # ############################################################################## package Mail::SPF::Mech::Exists; =head1 NAME Mail::SPF::Mech::Exists - SPF record C mechanism class =cut 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; =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 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 See L. =item B: returns I Returns B<'exists'>. =item B: returns I Returns a regular expression that matches a mechanism name of B<'exists'>. =back =head2 Instance methods The following instance methods are provided: =over =cut sub parse_params { my ($self) = @_; $self->parse_domain_spec(TRUE); return; } =item B =item B =item B =cut sub params { my ($self) = @_; return defined($self->{domain_spec}) ? ':' . $self->{domain_spec} : undef; } =item B See L. =item B: returns I Returns the C parameter of the mechanism. =cut # Make read-only accessor: __PACKAGE__->make_accessor('domain_spec', TRUE); =item B: returns I Checks whether a DNS C record exists for the mechanism's target domain name, and returns B if one does, or B otherwise. See RFC 4408, 5.7, for details. =cut 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; } =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;