class SPF::Mod::SPF::Mod::Exp

Constants

NAME

Attributes

domain_spec[R]

Public Instance Methods

params() click to toggle source
# File lib/spf/model.rb, line 742
def params
  return @domain_spec
end
parse_params(required = true) click to toggle source
# File lib/spf/model.rb, line 737
def parse_params(required = true)
  @raw_params = @parse_text.dup
  self.parse_domain_spec(required)
end
precedence() click to toggle source
# File lib/spf/model.rb, line 735
def precedence; 0.2; end
process(server, request, result) click to toggle source
# File lib/spf/model.rb, line 746
def process(server, request, result)
  begin
    exp_domain = @domain_spec.new({:server => server, :request => request})
    txt_packet = server.dns_lookup(exp_domain, 'TXT')
    txt_rrs    = txt_packet.answer.select {|x| x.type == 'TXT'}.map {|x| x.answer}
    unless text_rrs.length > 0
      server.throw_result(:permerror, request,
        "No authority explanation string available at domain '#{exp_domain}'") # RFC 4408, 6.2/4
    end
    unless text_rrs.length == 1
      server.throw_result(:permerror, request,
        "Redundant authority explanation strings found at domain '#{exp_domain}'") # RFC 4408, 6.2/4
    end
    explanation = SPF::MacroString.new(
      :text           => txt_rrs[0].char_str_list.join(''),
      :server         => server,
      :request        => request,
      :is_explanation => true
    )
    request.state(:authority_explanation, explanation)
  rescue SPF::DNSError, SPF::Result::Error
    # Ignore DNS and other errors.
  end
  return request
end