Class: SPF::Mech::MX
Constant Summary collapse
- NAME =
'mx'
Constants inherited from SPF::Mech
DEFAULT_QUALIFIER, EXPLANATION_TEMPLATES_BY_RESULT_CODE, NAME_PATTERN, QUALIFIER_PATTERN
Constants inherited from Term
Term::DOMAIN_END_PATTERN, Term::DOMAIN_SPEC_PATTERN, Term::HEXWORD_PATTERN, Term::IPV4_ADDRESS_PATTERN, Term::IPV6_ADDRESS_PATTERN, Term::MACRO_DELIMITER, Term::MACRO_EXPAND_PATTERN, Term::MACRO_LITERAL_PATTERN, Term::MACRO_STRING_PATTERN, Term::MACRO_TRANSFORMERS_PATTERN, Term::NAME_PATTERN, Term::QNUM_PATTERN, Term::TOPLABEL_PATTERN, Term::TWO_HEXWORDS_OR_IPV4_ADDRESS_PATTERN
Instance Attribute Summary
Attributes inherited from Term
#domain_spec, #errors, #ip_address, #ip_netblocks, #ip_network, #ipv4_prefix_length, #ipv6_prefix_length, #raw_params, #record_domain
Instance Method Summary collapse
- #match(server, request, want_result = true) ⇒ Object
- #params ⇒ Object
- #parse_params(required = true) ⇒ Object
Methods inherited from SPF::Mech
#default_ipv4_prefix_length, #default_ipv6_prefix_length, #explain, #explanation_template, #initialize, #match_in_domain, #parse, #parse_end, #parse_name, #parse_qualifier, #qualifier, #to_s
Methods inherited from Term
#domain, #error, #initialize, new_from_string, #parse_domain_spec, #parse_ipv4_address, #parse_ipv4_ipv6_prefix_lengths, #parse_ipv4_network, #parse_ipv4_prefix_length, #parse_ipv6_address, #parse_ipv6_network, #parse_ipv6_prefix_length, #text
Constructor Details
This class inherits a constructor from SPF::Mech
Instance Method Details
#match(server, request, want_result = true) ⇒ Object
610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 |
# File 'lib/spf/model.rb', line 610 def match(server, request, want_result = true) server.count_dns_interactive_term(request) target_domain = self.domain(server, request) mx_packet = server.dns_lookup(target_domain, 'MX') mx_rrs = (mx_packet or server.count_void_dns_lookup(request)) # Respect the MX mechanism lookups limit (RFC 4408, 5.4/3/4): if server.max_name_lookups_per_mx_mech mx_rrs = mx_rrs[0, server.max_name_lookups_per_mx_mech] end # TODO: Use A records from packet's "additional" section? Probably not. # Check MX records: mx_rrs.each do |rr| if Resolv::DNS::Resource::IN::MX === rr return true if self.match_in_domain(server, request, rr.exchange) else # Unexpected RR type. # TODO: Generate debug info or ignore silently. end end return false end |
#params ⇒ Object
596 597 598 599 600 601 602 603 604 605 606 607 608 |
# File 'lib/spf/model.rb', line 596 def params params = '' if @domain_spec params += @domain_spec.to_s end if @ipv4_prefix_length and @ipv4_prefix_length != self.default_ipv4_prefix_length params += '/' + @ipv4_prefix_length.to_s end if @ipv6_prefix_length and @ipv6_prefix_length != self.default_ipv6_prefix_length params += '//' + @ipv6_prefix_length.to_s end return params end |
#parse_params(required = true) ⇒ Object
590 591 592 593 594 |
# File 'lib/spf/model.rb', line 590 def parse_params(required = true) @raw_params = @parse_text.dup self.parse_domain_spec self.parse_ipv4_ipv6_prefix_lengths end |