spf 0.0.53 → 0.0.54
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.
- 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: []
|