Class: SPF::Mod::Redirect

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

Constant Summary collapse

NAME =
'redirect'

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, #record_domain

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.



775
776
777
# File 'lib/spf/model.rb', line 775

def domain_spec
  @domain_spec
end

Instance Method Details

#init(options = {}) ⇒ Object



781
782
783
784
# File 'lib/spf/model.rb', line 781

def init(options = {})
  super(options)
  @nested_record = nil
end

#nested_record(server = nil, request = nil) ⇒ Object



820
821
822
823
824
825
826
827
# File 'lib/spf/model.rb', line 820

def nested_record(server=nil, request=nil)
  return @nested_record if @nested_record
  return nil unless server and request
  server.count_dns_interactive_term(request)
  authority_domain = self.domain(server, request)
  sub_request = request.new_sub_request({:authority_domain => authority_domain})
  return @nested_record = server.select_record(sub_request)
end

#paramsObject



791
792
793
# File 'lib/spf/model.rb', line 791

def params
  return @domain_spec
end

#parse_params(required = true) ⇒ Object



786
787
788
789
# File 'lib/spf/model.rb', line 786

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

#precedenceObject



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

def precedence; 0.8; end

#process(server, request, result) ⇒ Object



795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
# File 'lib/spf/model.rb', line 795

def process(server, request, result)

  server.count_dns_interactive_term(request)

  # Only perform redirection if no mechanism matched (RFC 4408, 6.1/1):
  return unless SPF::Result::NeutralByDefault === result

  # Create sub-request with mutated authorithy domain:
  sub_request = request.new_sub_request({:authority_domain => @domain_spec})

  # Process sub-request:
  result = server.process(sub_request)

  @nested_record = sub_request.record

  # Translate result of sub-request (RFC 4408, 6.1/4):
  if SPF::Result::None === result
    server.throw_result(:permerror, request,
      "Redirect domain '#{authority_domain}' has no applicable sender policy")
  end

  # Propagate any other results as-is:
  raise result
end