1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-12-01 05:43:04 +00:00

fix(dkim): ensure DKIM-Signature headers are appropriately wrapped

closes #339
هذا الالتزام موجود في:
Adam Cooke
2021-08-01 21:00:37 +00:00
الأصل 4880eee1d9
التزام 476129cc1b
2 ملفات معدلة مع 15 إضافات و12 حذوفات

عرض الملف

@@ -17,7 +17,7 @@ module Postal
end end
def dkim_header def dkim_header
"DKIM-Signature: v=1;" + dkim_properties + signature "DKIM-Signature: v=1; " + dkim_properties.join("\r\n\t") + signature.scan(/.{1,72}/).join("\r\n\t")
end end
private private
@@ -96,16 +96,18 @@ module Postal
end end
def dkim_properties def dkim_properties
String.new.tap do |header| Array.new.tap do |header|
header << " a=rsa-sha256; c=relaxed/relaxed;" header << "a=rsa-sha256; c=relaxed/relaxed;"
header << " d=#{@domain_name}; s=#{@dkim_identifier}; t=#{Time.now.utc.to_i};" header << "d=#{@domain_name};"
header << " bh=#{body_hash}; h=#{header_names.join(':')};" header << "s=#{@dkim_identifier}; t=#{Time.now.utc.to_i};"
header << " b=" header << "bh=#{body_hash};"
header << "h=#{header_names.join(':')};"
header << "b="
end end
end end
def dkim_header_for_signing def dkim_header_for_signing
"dkim-signature:v=1;" + dkim_properties "dkim-signature:v=1; #{dkim_properties.join(' ')}"
end end
def signable_header_string def signable_header_string

عرض الملف

@@ -20,11 +20,12 @@ describe Postal::DKIMHeader do
allow(domain).to receive(:dkim_key).and_return(OpenSSL::PKey::RSA.new(frontmatter['private_key'])) allow(domain).to receive(:dkim_key).and_return(OpenSSL::PKey::RSA.new(frontmatter['private_key']))
allow(domain).to receive(:dkim_identifier).and_return(frontmatter['dkim_identifier']) allow(domain).to receive(:dkim_identifier).and_return(frontmatter['dkim_identifier'])
expectation = "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; " \ expectation = "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;\r\n" \
"d=#{frontmatter['domain']}; s=#{frontmatter['dkim_identifier']}; t=#{mocked_time.to_i}; " \ "\td=#{frontmatter['domain']};\r\n" \
"bh=#{frontmatter['bh']}; "\ "\ts=#{frontmatter['dkim_identifier']}; t=#{mocked_time.to_i};\r\n" \
"h=#{frontmatter['headers']}; " \ "\tbh=#{frontmatter['bh']};\r\n"\
"b=#{frontmatter['b']}" "\th=#{frontmatter['headers']};\r\n" \
"\tb=#{frontmatter['b'].scan(/.{1,72}/).join("\r\n\t")}"
header = described_class.new(domain, email) header = described_class.new(domain, email)