spf 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/spf/eval.rb CHANGED
@@ -286,3 +286,5 @@ class SPF::Server
286
286
  end
287
287
  end
288
288
  end
289
+
290
+ # vim:sw=2 sts=2
data/lib/spf/model.rb CHANGED
@@ -400,6 +400,8 @@ class SPF::Mech < SPF::Term
400
400
 
401
401
  def parse_params
402
402
  self.parse_domain_spec(true)
403
+ # Other method of denoting "potentially ~infinite" netblocks?
404
+ @ip_netblocks << nil
403
405
  end
404
406
 
405
407
  def params
@@ -409,8 +411,6 @@ class SPF::Mech < SPF::Term
409
411
  def match(server, request, want_result = true)
410
412
  server.count_dns_interactive_term(request)
411
413
 
412
- # Other method of denoting "potentially ~infinite" netblocks?
413
- @ip_netblocks << nil
414
414
  domain = self.domain(server, request)
415
415
  packet = server.dns_lookup(domain, 'A')
416
416
  rrs = (packet.answer or server.count_void_dns_lookup(request))
@@ -429,6 +429,7 @@ class SPF::Mech < SPF::Term
429
429
 
430
430
  def parse_params
431
431
  self.parse_ipv4_network(true)
432
+ @ip_netblocks << @ip_network
432
433
  end
433
434
 
434
435
  def params
@@ -443,7 +444,6 @@ class SPF::Mech < SPF::Term
443
444
  ip_network_v6 = IP::V4 === @ip_network ?
444
445
  SPF::Util.ipv4_address_to_ipv6(@ip_network) :
445
446
  @ip_network
446
- @ip_netblocks << @ip_network
447
447
  return ip_network_v6.contains?(request.ip_address_v6)
448
448
  end
449
449
 
@@ -455,6 +455,7 @@ class SPF::Mech < SPF::Term
455
455
 
456
456
  def parse_params
457
457
  self.parse_ipv6_network(true)
458
+ @ip_netblocks << @ip_network
458
459
  end
459
460
 
460
461
  def params
@@ -465,7 +466,6 @@ class SPF::Mech < SPF::Term
465
466
  end
466
467
 
467
468
  def match(server, request, want_result = true)
468
- @ip_netblocks << @ip_network
469
469
  return @ip_network.contains?(request.ip_address_v6)
470
470
  end
471
471
 
@@ -475,8 +475,6 @@ class SPF::Mech < SPF::Term
475
475
 
476
476
  NAME = 'include'
477
477
 
478
- attr_accessor :nested_record
479
-
480
478
  def intitialize(options = {})
481
479
  super(options)
482
480
  @nested_record = nil
@@ -501,8 +499,6 @@ class SPF::Mech < SPF::Term
501
499
  # Process sub-request:
502
500
  result = server.process(sub_request)
503
501
 
504
- @nested_record = sub_request.record
505
-
506
502
  # Translate result of sub-request (RFC 4408, 5.9):
507
503
 
508
504
  return false unless want_result
@@ -521,6 +517,14 @@ class SPF::Mech < SPF::Term
521
517
  # Propagate any other results (including {Perm,Temp}Error) as-is:
522
518
  raise result
523
519
  end
520
+
521
+ def nested_record(server, request)
522
+ return @nested_record if @nested_record
523
+ authority_domain = self.domain(server, request)
524
+ sub_request = request.new_sub_request({:authority_domain => authority_domain})
525
+ return @nested_record = server.select_record(sub_request)
526
+ end
527
+
524
528
  end
525
529
 
526
530
  class SPF::Mech::MX < SPF::Mech
@@ -705,16 +709,16 @@ class SPF::Mod < SPF::Term
705
709
 
706
710
  class SPF::Mod::Redirect < SPF::GlobalMod
707
711
 
708
- attr_reader :domain_spec, :included_record
712
+ attr_reader :domain_spec
709
713
 
710
714
  NAME = 'redirect'
711
715
  PRECEDENCE = 0.8
712
716
 
713
- def initialize(options = {})
717
+ def init(options = {})
714
718
  super(options)
715
719
  @nested_record = nil
716
720
  end
717
-
721
+
718
722
  def parse_params
719
723
  self.parse_domain_spec(true)
720
724
  end
@@ -747,12 +751,20 @@ class SPF::Mod < SPF::Term
747
751
  # Propagate any other results as-is:
748
752
  result.throw
749
753
  end
754
+
755
+ def nested_record(server, request)
756
+ return @nested_record if @nested_record
757
+ server.count_dns_interactive_term(request)
758
+ authority_domain = self.domain(server, request)
759
+ sub_request = request.new_sub_request({:authority_domain => authority_domain})
760
+ return @nested_record = server.select_record(sub_request)
761
+ end
750
762
  end
751
763
  end
752
764
 
753
765
  class SPF::Record
754
766
 
755
- attr_reader :terms, :text, :errors, :ip_netblocks
767
+ attr_reader :terms, :text, :errors
756
768
 
757
769
  RESULTS_BY_QUALIFIER = {
758
770
  '' => :pass,
@@ -779,6 +791,10 @@ class SPF::Record
779
791
  return record
780
792
  end
781
793
 
794
+ def ip_netblocks
795
+ @ip_netblocks.flatten!
796
+ end
797
+
782
798
  def parse
783
799
  unless self.instance_variable_defined?(:@parse_text) and @parse_text
784
800
  raise SPF::NothingToParseError.new('Nothing to parse for record')
@@ -793,9 +809,7 @@ class SPF::Record
793
809
  @errors << e
794
810
  raise if @raise_exceptions
795
811
  end
796
- @ip_netblocks << term.ip_netblocks if term
797
812
  end
798
- @ip_netblocks.flatten!
799
813
  #self.parse_end
800
814
  end
801
815
 
@@ -830,6 +844,7 @@ class SPF::Record
830
844
  raise SPF::InvalidMech.new("Unknown mechanism type '#{mech_name}' in '#{@version_tag}' record")
831
845
  end
832
846
  term = mech = mech_class.new_from_string(mech_text)
847
+ @ip_netblocks << mech.ip_netblocks
833
848
  @terms << mech
834
849
  elsif (
835
850
  @parse_text.sub!(/
@@ -877,7 +892,7 @@ class SPF::Record
877
892
  return [version_tag, @terms, @global_mods].join(' ')
878
893
  end
879
894
 
880
- def eval(server, request)
895
+ def eval(server, request, want_result = true)
881
896
  raise SPF::OptionRequiredError.new('SPF server object required for record evaluation') unless server
882
897
  raise SPF::OptionRequiredError.new('Request object required for record evaluation') unless request
883
898
  begin
@@ -890,7 +905,7 @@ class SPF::Record
890
905
  result_class = server.result_class(result_name)
891
906
  result = result_class.new([server, request, "Mechanism '#{term}' matched"])
892
907
  mech.explain(server, request, result)
893
- raise result
908
+ raise result if want_result
894
909
  end
895
910
  elsif SPF::PositionalMod === term
896
911
  # Term is a positional modifier.
@@ -908,7 +923,7 @@ class SPF::Record
908
923
  @global_mods.each do |global_mod|
909
924
  global_mod.process(server, request, result)
910
925
  end
911
- raise result
926
+ raise result if want_result
912
927
  end
913
928
  end
914
929
 
@@ -1046,3 +1061,4 @@ class SPF::Record
1046
1061
  end
1047
1062
  end
1048
1063
 
1064
+ # vim:sw=2 sts=2
data/lib/spf/request.rb CHANGED
@@ -136,3 +136,4 @@ class SPF::Request
136
136
  end
137
137
  end
138
138
 
139
+ # vim:sw=2 sts=2
data/lib/spf/result.rb CHANGED
@@ -216,3 +216,5 @@ class SPF::Result < Exception
216
216
  end
217
217
 
218
218
  end
219
+
220
+ # vim:sw=2 sts=2
data/lib/spf/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module SPF
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
4
4
 
5
5
  # vim:sw=2 sts=2
data/spf.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "spf"
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Flury", "Julian Mehnle"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: