spf 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: