class SPF::Mech::SPF::Mech::MX

Constants

NAME

Public Instance Methods

match(server, request, want_result = true) click to toggle source
# 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() click to toggle source
# 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) click to toggle source
# 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