spf 0.0.53 → 0.0.54
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +1 -1
- data/lib/spf/eval.rb +31 -44
- data/lib/spf/model.rb +1 -1
- data/lib/spf/version.rb +1 -1
- data/spf.gemspec +3 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8e8afc8e375d137af56775cbd41cfd3d3105cf45
|
4
|
+
data.tar.gz: 75a7ca24ee85ebf0a4e1986a0b5af7c4ee263bde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d67198fa465bafabb7e1de1d929c75d92ae12f422c815762456758cbea43f99f40c903c4b07c25109a21c7f0247f6a9a8dce4e9b2e75829b92dfdc58bb42fdd
|
7
|
+
data.tar.gz: 8e1d403dd518403d70bed335c2c19fb03bb026d226db073b095b54dc0fe90aa26c2705426a646ad14d7603ef5877ff940068dfd845b4100ab71e6ea7ac53cd82
|
data/Gemfile.lock
CHANGED
data/lib/spf/eval.rb
CHANGED
@@ -188,75 +188,62 @@ class SPF::Server
|
|
188
188
|
query_count = 0
|
189
189
|
dns_errors = []
|
190
190
|
|
191
|
-
# Query for
|
192
|
-
if
|
193
|
-
@query_rr_types & QUERY_RR_TYPE_SPF)
|
191
|
+
# Query for TXT-type RRs first:
|
192
|
+
if @query_rr_types != QUERY_RR_TYPE_SPF
|
194
193
|
begin
|
195
194
|
query_count += 1
|
196
|
-
packet = self.dns_lookup(domain, '
|
195
|
+
packet = self.dns_lookup(domain, 'TXT')
|
197
196
|
matches = self.get_acceptable_records_from_packet(
|
198
|
-
packet, '
|
197
|
+
packet, 'TXT', versions, scope, domain, loose_match)
|
199
198
|
records << matches[0]
|
200
199
|
loose_records << matches[1]
|
201
200
|
rescue SPF::DNSError => e
|
202
201
|
dns_errors << e
|
203
|
-
#rescue SPF::DNSTimeout => e
|
204
|
-
# # FIXME: Ignore DNS timeouts on SPF type lookups?
|
205
|
-
# # Apparently some brain-dead DNS servers time out on SPF-type queries.
|
206
202
|
end
|
207
203
|
end
|
208
204
|
|
209
|
-
if
|
210
|
-
@query_rr_types == QUERY_RR_TYPE_ALL or
|
211
|
-
@query_rr_types & QUERY_RR_TYPE_TXT)
|
212
|
-
# NOTE:
|
213
|
-
# This deliberately violates RFC 4406 (Sender ID), 4.4/3 (4.4.1):
|
214
|
-
# TXT-type RRs are still tried if there _are_ SPF-type RRs but all
|
215
|
-
# of them are inapplicable (e.g. "Hi!", or even "spf2/pra" for an
|
216
|
-
# 'mfrom' scope request). This conforms to the spirit of the more
|
217
|
-
# sensible algorithm in RFC 4408 (SPF), 4.5.
|
218
|
-
# Implication: Sender ID processing may make use of existing TXT-
|
219
|
-
# type records where a result of "None" would normally be returned
|
220
|
-
# under a strict interpretation of RFC 4406.
|
221
|
-
|
205
|
+
if records.flatten.empty? && @query_rr_types != QUERY_RR_TYPE_TXT
|
222
206
|
begin
|
223
207
|
query_count += 1
|
224
|
-
packet = self.dns_lookup(domain, '
|
208
|
+
packet = self.dns_lookup(domain, 'SPF')
|
225
209
|
matches = self.get_acceptable_records_from_packet(
|
226
|
-
packet, '
|
210
|
+
packet, 'SPF', versions, scope, domain, loose_match)
|
227
211
|
records << matches[0]
|
228
212
|
loose_records << matches[1]
|
229
213
|
rescue SPF::DNSError => e
|
230
214
|
dns_errors << e
|
215
|
+
#rescue SPF::DNSTimeout => e
|
216
|
+
# # FIXME: Ignore DNS timeouts on SPF type lookups?
|
217
|
+
# # Apparently some brain-dead DNS servers time out on SPF-type queries.
|
231
218
|
end
|
219
|
+
end
|
232
220
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
records.flatten!
|
237
|
-
loose_records.flatten!
|
221
|
+
# Unless at least one query succeeded, re-raise the first DNS error that occured.
|
222
|
+
raise dns_errors[0] unless dns_errors.length < query_count
|
238
223
|
|
239
|
-
|
240
|
-
|
241
|
-
raise SPF::NoAcceptableRecordError.new('No applicable sender policy available',
|
242
|
-
loose_records)
|
243
|
-
end
|
224
|
+
records.flatten!
|
225
|
+
loose_records.flatten!
|
244
226
|
|
245
|
-
|
246
|
-
|
227
|
+
if records.empty?
|
228
|
+
# RFC 4408, 4.5/7
|
229
|
+
raise SPF::NoAcceptableRecordError.new('No applicable sender policy available',
|
230
|
+
loose_records)
|
231
|
+
end
|
247
232
|
|
248
|
-
|
233
|
+
# Discard all records but the highest acceptable version:
|
234
|
+
preferred_record_class = records[0].class
|
249
235
|
|
250
|
-
|
251
|
-
# RFC 4408, 4.5/6
|
252
|
-
raise SPF::RedundantAcceptableRecordsError.new(
|
253
|
-
"Redundant applicable '#{preferred_record_class.version_tag}' sender policies found",
|
254
|
-
records
|
255
|
-
)
|
256
|
-
end
|
236
|
+
records = records.select { |record| preferred_record_class === record }
|
257
237
|
|
258
|
-
|
238
|
+
if records.length != 1
|
239
|
+
# RFC 4408, 4.5/6
|
240
|
+
raise SPF::RedundantAcceptableRecordsError.new(
|
241
|
+
"Redundant applicable '#{preferred_record_class.version_tag}' sender policies found",
|
242
|
+
records
|
243
|
+
)
|
259
244
|
end
|
245
|
+
|
246
|
+
return records[0]
|
260
247
|
end
|
261
248
|
|
262
249
|
def get_acceptable_records_from_packet(packet, rr_type, versions, scope, domain, loose_match)
|
data/lib/spf/model.rb
CHANGED
@@ -995,7 +995,7 @@ class SPF::Record
|
|
995
995
|
if mech.match(server, request, request.ip_address != nil)
|
996
996
|
result_name = RESULTS_BY_QUALIFIER[mech.qualifier]
|
997
997
|
result_class = server.result_class(result_name)
|
998
|
-
result = result_class.new([server, request, "Mechanism '#{term}' matched"])
|
998
|
+
result = result_class.new([server, request, "Mechanism '#{term.text}' matched"])
|
999
999
|
mech.explain(server, request, result)
|
1000
1000
|
raise result if want_result
|
1001
1001
|
end
|
data/lib/spf/version.rb
CHANGED
data/spf.gemspec
CHANGED
@@ -3,10 +3,12 @@
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
# stub: spf 0.0.48 ruby lib
|
6
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
7
|
+
require 'spf/version'
|
6
8
|
|
7
9
|
Gem::Specification.new do |s|
|
8
10
|
s.name = "spf"
|
9
|
-
s.version =
|
11
|
+
s.version = SPF::VERSION
|
10
12
|
|
11
13
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
14
|
s.require_paths = ["lib"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.54
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Flury
|
8
8
|
- Julian Mehnle
|
9
9
|
- Jacob Rideout
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
date: 2015-04-29 00:00:00.000000000 Z
|
@@ -118,7 +118,7 @@ homepage: https://github.com/agaridata/spf-ruby
|
|
118
118
|
licenses:
|
119
119
|
- none (all rights reserved)
|
120
120
|
metadata: {}
|
121
|
-
post_install_message:
|
121
|
+
post_install_message:
|
122
122
|
rdoc_options: []
|
123
123
|
require_paths:
|
124
124
|
- lib
|
@@ -133,8 +133,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
- !ruby/object:Gem::Version
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
|
-
|
137
|
-
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.5.1
|
138
|
+
signing_key:
|
138
139
|
specification_version: 4
|
139
140
|
summary: Implementation of the Sender Policy Framework
|
140
141
|
test_files: []
|