Add otpion to show encrypted messages as an attachment.
authorWerner Koch <wk@gnupg.org>
Wed, 28 May 2008 14:08:03 +0000 (14:08 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 28 May 2008 14:08:03 +0000 (14:08 +0000)
15 files changed:
ChangeLog
NEWS
configure.ac
po/de.po
po/sv.po
src/ChangeLog
src/common.h
src/dialogs.h
src/dialogs.rc
src/engine.c
src/main.c
src/mapihelp.cpp
src/mapihelp.h
src/mimeparser.c
src/olflange-dlgs.cpp

index 363f342..fee4499 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-05-28  Werner Koch  <wk@g10code.com>
+
+       * Release 0.10.14.
+
 2008-05-06  Werner Koch  <wk@g10code.com>
 
        * Release 0.10.13.
diff --git a/NEWS b/NEWS
index 698b5f2..54d73e6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Noteworthy changes for version 0.10.15
+===================================================
+
+ * New option to present the body of a message as an attachment.  This
+   is useful to make sure that the body will never show up in
+   plaintext in the message store.
+
+
 Noteworthy changes for version 0.10.14 (2008-05-28)
 ===================================================
 
index 808fc4b..8ec8ad6 100644 (file)
@@ -16,8 +16,8 @@ min_automake_version="1.9.4"
 # Remember to change the version number immediately *after* a release.
 # Set my_issvn to "yes" for non-released code.  Remember to run an
 # "svn up" and "autogen.sh" right before creating a distribution.
-m4_define([my_version], [0.10.14])
-m4_define([my_issvn], [no])
+m4_define([my_version], [0.10.15])
+m4_define([my_issvn], [yes])
 
 m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
             || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
index 09cde40..13b9541 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GpgOL 0.10.0\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-05-06 10:41+0200\n"
-"PO-Revision-Date: 2008-04-16 19:44+0200\n"
+"POT-Creation-Date: 2008-05-28 15:37+0200\n"
+"PO-Revision-Date: 2008-05-28 15:38+0200\n"
 "Last-Translator: Werner Koch <wk@gnupg.org>\n"
 "Language-Team: de\n"
 "MIME-Version: 1.0\n"
@@ -68,7 +68,7 @@ msgstr ""
 "   (unter \"GnuPG für Windows\") oder auf einem anderen Weg starten.\n"
 "   Sobald \"Kleopatra\" läuft, erneut Outlook starten."
 
-#: src/engine.c:409 src/ext-commands.cpp:753 src/main.c:672 src/main.c:678
+#: src/engine.c:409 src/ext-commands.cpp:753 src/main.c:676 src/main.c:682
 #: src/message.cpp:301
 msgid "GpgOL"
 msgstr "GpgOL"
@@ -326,12 +326,12 @@ msgstr "Nachricht mit GnuPG unterschreiben"
 msgid "Open the GpgOL certificate manager"
 msgstr "Zertifikatsverwaltung von GpgOL öffnen"
 
-#: src/main.c:671
+#: src/main.c:675
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr "Notiz: Diese Kompatibilitätsflags werden verwendet: %s"
 
-#: src/main.c:677
+#: src/main.c:681
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -354,7 +354,7 @@ msgstr ""
 "Outlook Sitzung entschlüsselt wurde.  Verwenden Sie den Menüpunkt "
 "\"entschlüsseln/verifizieren\" um den Inhalt wieder sichtbar zu machen.]"
 
-#: src/mapihelp.cpp:2369
+#: src/mapihelp.cpp:2403
 msgid ""
 "[The content of this message is not visible due to an processing error in "
 "GpgOL.]"
@@ -447,11 +447,11 @@ msgstr "Verschlüsselungsfehler (%s)"
 msgid "Signing failed (%s)"
 msgstr "Unterschrifterstellungsfehler (%s)"
 
-#: src/mimeparser.c:1124
+#: src/mimeparser.c:1126
 msgid "Error writing to stream"
 msgstr "Dateischreibfehler"
 
-#: src/mimeparser.c:1125
+#: src/mimeparser.c:1127
 msgid "I/O-Error"
 msgstr "Ein-/Ausgabefehler"
 
@@ -495,7 +495,11 @@ msgstr "Auch im Vorschaufenster entschlüsseln"
 msgid "Show HTML view if possible"
 msgstr "HTML Darstellung anzeigen wenn möglich"
 
-#: src/olflange-dlgs.cpp:209
+#: src/olflange-dlgs.cpp:56
+msgid "Present encrypted message as attachment"
+msgstr "Verschlüsselte Nachricht as Anlage anzeigen"
+
+#: src/olflange-dlgs.cpp:212
 msgid ""
 "You have enabled GpgOL's support for the S/MIME protocol.\n"
 "\n"
@@ -514,7 +518,7 @@ msgstr ""
 "kann."
 
 #. TRANSLATORS: See the source for the full english text.
-#: src/olflange-dlgs.cpp:262
+#: src/olflange-dlgs.cpp:267
 msgid "-#GpgOLFullHelpText#-"
 msgstr ""
 "GpgOL ist ein Plugin für Microsoft Outlook, welches es ermöglicht\n"
@@ -539,7 +543,7 @@ msgstr ""
 "Public License erhalten haben.  Falls nicht, finden Sie diese\n"
 "unter der Webadresse <http://www.gnu.org/licenses/>."
 
-#: src/olflange-dlgs.cpp:268
+#: src/olflange-dlgs.cpp:273
 #, c-format
 msgid "This is GpgOL version %s"
 msgstr "Dies ist GpgOL Version %s"
index 59ed6dc..b2475f9 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPGol\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-05-06 10:41+0200\n"
+"POT-Creation-Date: 2008-05-28 15:37+0200\n"
 "PO-Revision-Date: 2006-12-12 23:52+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -57,7 +57,7 @@ msgid ""
 "are not readable."
 msgstr ""
 
-#: src/engine.c:409 src/ext-commands.cpp:753 src/main.c:672 src/main.c:678
+#: src/engine.c:409 src/ext-commands.cpp:753 src/main.c:676 src/main.c:682
 #: src/message.cpp:301
 msgid "GpgOL"
 msgstr ""
@@ -320,12 +320,12 @@ msgstr "Signera meddelandet med GPG"
 msgid "Open the GpgOL certificate manager"
 msgstr ""
 
-#: src/main.c:671
+#: src/main.c:675
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr ""
 
-#: src/main.c:677
+#: src/main.c:681
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -340,7 +340,7 @@ msgid ""
 "visible]"
 msgstr ""
 
-#: src/mapihelp.cpp:2369
+#: src/mapihelp.cpp:2403
 msgid ""
 "[The content of this message is not visible due to an processing error in "
 "GpgOL.]"
@@ -418,12 +418,12 @@ msgstr "Kryptering misslyckades"
 msgid "Signing failed (%s)"
 msgstr "Signering misslyckades"
 
-#: src/mimeparser.c:1124
+#: src/mimeparser.c:1126
 #, fuzzy
 msgid "Error writing to stream"
 msgstr "Fel vid skrivning av fil"
 
-#: src/mimeparser.c:1125
+#: src/mimeparser.c:1127
 msgid "I/O-Error"
 msgstr "In-/Ut-fel"
 
@@ -468,7 +468,11 @@ msgstr ""
 msgid "Show HTML view if possible"
 msgstr ""
 
-#: src/olflange-dlgs.cpp:209
+#: src/olflange-dlgs.cpp:56
+msgid "Present encrypted message as attachment"
+msgstr ""
+
+#: src/olflange-dlgs.cpp:212
 msgid ""
 "You have enabled GpgOL's support for the S/MIME protocol.\n"
 "\n"
@@ -479,11 +483,11 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: See the source for the full english text.
-#: src/olflange-dlgs.cpp:262
+#: src/olflange-dlgs.cpp:267
 msgid "-#GpgOLFullHelpText#-"
 msgstr ""
 
-#: src/olflange-dlgs.cpp:268
+#: src/olflange-dlgs.cpp:273
 #, c-format
 msgid "This is GpgOL version %s"
 msgstr ""
index f41cb46..165bf2d 100644 (file)
@@ -1,3 +1,16 @@
+2008-05-28  Werner Koch  <wk@g10code.com>
+
+       * dialogs.h (IDC_BODY_AS_ATTACHMENT): New.
+       * dialogs.rc: Add body-as-attachemnt checkbox to the otpion
+       dialog.
+       * olflange-dlgs.cpp (set_labels, GPGOptionsDlgProc): Add it.
+       * main.c (write_options, read_options): Handle bodyAsAttachment
+       registry key.
+       * mimeparser.c (start_attachment): Do not set the hidden flag if
+       the new option is used.
+       * mapihelp.cpp (mapi_test_attach_hidden): New.
+       (mapi_get_gpgol_body_attachment): Make use of that flag.
+
 2008-05-23  Werner Koch  <wk@g10code.com>
 
        * mimemaker.c (struct sink_s): Add field ENC_COUNTER.
index 41cb84d..5e92eef 100644 (file)
@@ -118,6 +118,7 @@ struct
   int enable_default_key;    /* Enable the use of DEFAULT_KEY. */
   int preview_decrypt;       /* Decrypt in preview window. */
   int prefer_html;           /* Prefer html in html/text alternatives. */
+  int body_as_attachment;    /* Present encrypted message as attachment.  */
 
   /* The compatibility flags. */
   struct 
index 481b851..5c24364 100644 (file)
@@ -39,6 +39,7 @@
 #define IDC_G_GENERAL                   4023
 #define IDC_G_SEND                      4024
 #define IDC_G_RECV                      4025
+#define IDC_BODY_AS_ATTACHMENT          4026
 
 
 /* Ids for the extended options dialog.  */
index 097a120..b9a5964 100644 (file)
@@ -72,7 +72,7 @@ BEGIN
 
     /* Receive options box.  */
     GROUPBOX        "recv-options", IDC_G_RECV,
-                    9, 104, 250, 36
+                    9, 104, 250, 47
 
     CONTROL         "preview-decrypt", IDC_PREVIEW_DECRYPT,
                     "Button", BS_AUTOCHECKBOX | WS_TABSTOP,
@@ -82,6 +82,10 @@ BEGIN
                     "Button", BS_AUTOCHECKBOX | WS_TABSTOP,
                     24, 125, 215, 10
  
+    CONTROL         "body-as-attachment", IDC_BODY_AS_ATTACHMENT,
+                    "Button", BS_AUTOCHECKBOX | WS_TABSTOP,
+                    24, 136, 215, 10
     /* Stuff below the group boxes.  */
     LTEXT           "GpgOL by g10 Code GmbH", IDC_STATIC, 
                       8, 197, 100, 8
index 55ebc20..f09fc98 100644 (file)
@@ -486,7 +486,8 @@ engine_filter (engine_filter_t filter, const void *indata, size_t indatalen)
           any = 1;
         }
       if (!PulseEvent (filter->out.condvar))
-        log_error_w32 (-1, "%s:%s: PulseEvent(out) failed", SRCNAME, __func__);
+        log_error_w32 (-1, "%s:%s: PulseEvent(%p)[out] failed", 
+                       SRCNAME, __func__, filter->out.condvar);
       release_out_lock (filter, __func__);
 
       if (any)
@@ -533,7 +534,8 @@ engine_filter (engine_filter_t filter, const void *indata, size_t indatalen)
           break;  /* the loop.  */
         }
       if (!PulseEvent (filter->in.condvar))
-        log_error_w32 (-1, "%s:%s: PulseEvent(in) failed", SRCNAME, __func__);
+        log_error_w32 (-1, "%s:%s: PulseEvent(%p)[in] failed", 
+                       SRCNAME, __func__, filter->in.condvar);
       release_in_lock (filter, __func__);
       if (any)
         clear_switch_threads (filter);
index 5ae3ed9..eef98e3 100644 (file)
@@ -633,6 +633,10 @@ read_options (void)
   opt.svn_revision = val? atol (val) : 0;
   xfree (val); val = NULL;
 
+  load_extension_value ("bodyAsAttachment", &val);
+  opt.body_as_attachment = val == NULL || *val != '1'? 0 : 1;
+  xfree (val); val = NULL;
+
   /* Note, that on purpose these flags are only Registry changeable.
      The format of the entry is a string of of "0" and "1" digits; see
      the switch below for a description. */
@@ -706,6 +710,7 @@ write_options (void)
     {"enableDefaultKey",         0, opt.enable_default_key},
     {"preferHtml",               0, opt.prefer_html},
     {"svnRevision",              1, opt.svn_revision},
+    {"bodyAsAttachment",         0, opt.body_as_attachment},
     {NULL, 0}
   };
   char buf[32];
index 70aa078..36cc583 100644 (file)
@@ -1685,7 +1685,7 @@ mapi_get_attach (LPMESSAGE message, int unprotect,
 
 
 /* Mark this attachment as the orginal MOSS message.  We set a custom
-   property as well as the hidden hidden flag.  */
+   property as well as the hidden flag.  */
 int 
 mapi_mark_moss_attach (LPMESSAGE message, mapi_attach_item_t *item)
 {
@@ -1791,6 +1791,27 @@ mapi_set_attach_hidden (LPATTACH attach)
 }
 
 
+/* Returns true if ATTACH has the hidden flag set to true.  */
+int
+mapi_test_attach_hidden (LPATTACH attach)
+{
+  HRESULT hr;
+  LPSPropValue propval = NULL;
+  int result = 0;
+  
+  hr = HrGetOneProp ((LPMAPIPROP)attach, PR_ATTACHMENT_HIDDEN, &propval);
+  if (FAILED (hr))
+    return result; /* No.  */  
+  
+  if (PROP_TYPE (propval->ulPropTag) == PT_BOOLEAN && propval->Value.b)
+    result = 1; /* Yes.  */
+
+  MAPIFreeBuffer (propval);
+  return result;
+}
+
+
+
 
 /* Returns True if MESSAGE has the GpgOL Sig Status property.  */
 int
@@ -2333,7 +2354,20 @@ mapi_get_gpgol_body_attachment (LPMESSAGE message,
            && get_gpgolattachtype (att, moss_tag) == ATTACHTYPE_FROMMOSS)
         {
           found = 1;
-          if (r_body)
+          if (!r_body)
+            ; /* Body content has not been requested. */
+          else if (opt.body_as_attachment && !mapi_test_attach_hidden (att))
+            {
+              /* The body is to be shown as an attachment. */
+              body = native_to_utf8 
+                (bodytype == 2
+                 ? ("[Open the attachment \"gpgol000.htm\""
+                    " to view the message.]")
+                 : ("[Open the attachment \"gpgol000.txt\""
+                    " to view the message.]"));
+              found = 1;
+            }
+          else
             {
               char *charset;
               
index 31c0b94..bbcd5e4 100644 (file)
@@ -140,6 +140,7 @@ char *mapi_get_gpgol_charset (LPMESSAGE obj);
 int mapi_set_gpgol_charset (LPMESSAGE obj, const char *charset);
 
 int  mapi_set_attach_hidden (LPATTACH attach);
+int  mapi_test_attach_hidden (LPATTACH attach);
 
 char *mapi_get_mime_info (LPMESSAGE msg);
 
index 5bd2372..2058987 100644 (file)
@@ -312,12 +312,14 @@ start_attachment (mime_context_t ctx, int is_body)
       goto leave;
     }
 
-  /* The body attachment is special and should not be shown in the list
-     of attachments.  */
+  /* The body attachment is special and should not be shown in the
+     list of attachments.  If the option body-as-attachment is used
+     and the message is protected we do set the hidden flag to
+     false.  */
   if (is_body)
     {
       prop.ulPropTag = PR_ATTACHMENT_HIDDEN;
-      prop.Value.b = TRUE;
+      prop.Value.b = (ctx->protect_mode && opt.body_as_attachment)? FALSE:TRUE;
       hr = HrSetOneProp ((LPMAPIPROP)newatt, &prop);
       if (hr)
         {
index 1d727b8..43a28e9 100644 (file)
@@ -53,6 +53,7 @@ set_labels (HWND dlg)
     { IDC_G_RECV,           N_("Message receiving")},
     { IDC_PREVIEW_DECRYPT,  N_("Also decrypt in preview window")},
     { IDC_PREFER_HTML,      N_("Show HTML view if possible")},
+    { IDC_BODY_AS_ATTACHMENT, N_("Present encrypted message as attachment")},
 
     { IDC_GPG_OPTIONS,      "Debug..."},
     { IDC_VERSION_INFO,  "Version "VERSION "  ("__DATE__")"},
@@ -191,6 +192,8 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
                               !!opt.preview_decrypt, 0L);
           SendDlgItemMessage (hDlg, IDC_PREFER_HTML, BM_SETCHECK,
                                !!opt.prefer_html, 0L);
+          SendDlgItemMessage (hDlg, IDC_BODY_AS_ATTACHMENT, BM_SETCHECK,
+                               !!opt.body_as_attachment, 0L);
           bMsgResult = FALSE;  /* Accepts activation. */
           break; 
                
@@ -226,6 +229,8 @@ GPGOptionsDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
             (hDlg, IDC_PREVIEW_DECRYPT, BM_GETCHECK, 0, 0L);
           opt.prefer_html = !!SendDlgItemMessage
             (hDlg, IDC_PREFER_HTML, BM_GETCHECK, 0, 0L);
+          opt.body_as_attachment = !!SendDlgItemMessage
+            (hDlg, IDC_BODY_AS_ATTACHMENT, BM_GETCHECK, 0, 0L);
           
           /* Now that the user has confirmed the options dialog, we
              mark the Registry with revision of this build.  */