Class: SPF::Mod::Exp

Inherits:
GlobalMod show all
Defined in:
lib/spf/model.rb

Constant Summary collapse

NAME =
'exp'

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 collapse

Attributes inherited from Term

#errors, #ip_address, #ip_netblocks, #ip_network, #ipv4_prefix_length, #ipv6_prefix_length, #raw_params

Instance Method Summary collapse

Methods inherited from SPF::Mod

#initialize, #parse, #parse_end, #parse_name, #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::Mod

Instance Attribute Details

#domain_specObject (readonly)

Returns the value of attribute domain_spec.



728
729
730
# File 'lib/spf/model.rb', line 728

def domain_spec
  @domain_spec
end

Instance Method Details

#paramsObject



739
740
741
# File 'lib/spf/model.rb', line 739

def params
  return @domain_spec
end

#parse_params(required = true) ⇒ Object



734
735
736
737
# File 'lib/spf/model.rb', line 734

def parse_params(required = true)
  @raw_params = @parse_text.dup
  self.parse_domain_spec(required)
end

#precedenceObject



732
# File 'lib/spf/model.rb', line 732

def precedence; 0.2; end

#process(server, request, result) ⇒ Object



743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
# File 'lib/spf/model.rb', line 743

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