From eb4bbc6054a5d8c63b83d0dc632f880c2b650eb4 Mon Sep 17 00:00:00 2001
From: Gaudenz Steinlin <gaudenz@soziologie.ch>
Date: Tue, 12 Oct 2010 23:25:28 +0200
Subject: [PATCH 2/2] Monkey patch RMails MIME-Version header handling

RMail automagically adds MIME-Version headers to messages on
serialization. Sup uses RMail::Message object to represent parts of
multipart messages. Adding headers to these parts breaks gpg signatures.
The MIME-Version header is only needed in the outermost message. There
it's added manually.
---
 lib/sup.rb                         |    1 +
 lib/sup/crypto.rb                  |    2 +-
 lib/sup/maildir.rb                 |    1 -
 lib/sup/mbox.rb                    |    1 -
 lib/sup/modes/edit-message-mode.rb |    2 +-
 lib/sup/util.rb                    |   13 +++++++++++++
 6 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/lib/sup.rb b/lib/sup.rb
index 0e051be..a1d745c 100644
--- a/lib/sup.rb
+++ b/lib/sup.rb
@@ -5,6 +5,7 @@ require 'thread'
 require 'fileutils'
 require 'gettext'
 require 'curses'
+require 'rmail'
 begin
   require 'fastthread'
 rescue LoadError
diff --git a/lib/sup/crypto.rb b/lib/sup/crypto.rb
index 19983d2..386dbb8 100644
--- a/lib/sup/crypto.rb
+++ b/lib/sup/crypto.rb
@@ -207,7 +207,7 @@ private
   ## here's where we munge rmail output into the format that signed/encrypted
   ## PGP/GPG messages should be
   def format_payload payload
-    payload.to_s.gsub(/(^|[^\r])\n/, "\\1\r\n").gsub(/^MIME-Version: .*\r\n/, "")
+    payload.to_s.gsub(/(^|[^\r])\n/, "\\1\r\n")
   end
 
   # logic is:
diff --git a/lib/sup/maildir.rb b/lib/sup/maildir.rb
index b4e5208..92aaedc 100644
--- a/lib/sup/maildir.rb
+++ b/lib/sup/maildir.rb
@@ -1,4 +1,3 @@
-require 'rmail'
 require 'uri'
 
 module Redwood
diff --git a/lib/sup/mbox.rb b/lib/sup/mbox.rb
index 07b1b67..6b6eff3 100644
--- a/lib/sup/mbox.rb
+++ b/lib/sup/mbox.rb
@@ -1,4 +1,3 @@
-require 'rmail'
 require 'uri'
 require 'set'
 
diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb
index 1bf9378..86aef4b 100644
--- a/lib/sup/modes/edit-message-mode.rb
+++ b/lib/sup/modes/edit-message-mode.rb
@@ -1,7 +1,6 @@
 require 'tempfile'
 require 'socket' # just for gethostname!
 require 'pathname'
-require 'rmail'
 
 module Redwood
 
@@ -428,6 +427,7 @@ protected
     m.header["Message-Id"] = @message_id
     m.header["User-Agent"] = "Sup/#{Redwood::VERSION}"
     m.header["Content-Transfer-Encoding"] ||= '8bit'
+    m.header["MIME-Version"] = "1.0" if m.multipart?
     m
   end
 
diff --git a/lib/sup/util.rb b/lib/sup/util.rb
index d19caca..2b84c9c 100644
--- a/lib/sup/util.rb
+++ b/lib/sup/util.rb
@@ -98,6 +98,19 @@ module RMail
       a
     end
   end
+
+  class Serialize
+    ## Don't add MIME-Version headers on serialization. Sup sometimes want's to serialize
+    ## message parts where these headers are not needed and messing with the message on
+    ## serialization breaks gpg signatures. The commented section shows the original RMail
+    ## code.
+    def calculate_boundaries(message)
+      calculate_boundaries_low(message, [])
+      # unless message.header['MIME-Version']
+      #   message.header['MIME-Version'] = "1.0"
+      # end
+    end
+  end
 end
 
 class Range
-- 
1.7.1

