Fixed PGP clear sign message verification.
authorWerner Koch <wk@gnupg.org>
Thu, 23 Oct 2008 19:19:31 +0000 (19:19 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 23 Oct 2008 19:19:31 +0000 (19:19 +0000)
Delete stale attachemnt when forwarding a message.

NEWS
po/de.po
po/sv.po
src/ChangeLog
src/mapihelp.cpp
src/mapihelp.h
src/message-events.cpp
src/message.cpp
src/mimeparser.c
src/mimeparser.h

diff --git a/NEWS b/NEWS
index ebc5053..f2dc289 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ Noteworthy changes for version 0.10.16
 
  * Fixed a regression in the last release with opaque signatures.
 
+ * Fixed PGP cleartext signature verification.
+
 
 Noteworthy changes for version 0.10.15 (2008-08-06)
 ===================================================
index 818739a..4ce3b22 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GpgOL 0.10.0\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-08-06 08:04+0200\n"
+"POT-Creation-Date: 2008-10-23 10:23+0200\n"
 "PO-Revision-Date: 2008-10-17 10:27+0200\n"
 "Last-Translator: Werner Koch <wk@gnupg.org>\n"
 "Language-Team: de\n"
@@ -48,7 +48,7 @@ msgstr "GpgOL - Sichern der entschlüsselten Anlage"
 msgid "Debug output (for analysing problems)"
 msgstr "Debugausgabe (zur Problemanalyse)"
 
-#: src/engine.c:425
+#: src/engine.c:429
 msgid ""
 "The user interface server is not available or does not work.  Using an "
 "internal user interface.\n"
@@ -68,8 +68,8 @@ msgstr ""
 "   (unter \"GnuPG für Windows\") oder auf einem anderen Weg starten.\n"
 "   Sobald \"Kleopatra\" läuft, erneut Outlook starten."
 
-#: src/engine.c:429 src/ext-commands.cpp:773 src/ext-commands.cpp:794
-#: src/ext-commands.cpp:799 src/main.c:680 src/main.c:686 src/message.cpp:302
+#: src/engine.c:433 src/ext-commands.cpp:774 src/ext-commands.cpp:795
+#: src/ext-commands.cpp:800 src/main.c:682 src/main.c:688 src/message.cpp:302
 msgid "GpgOL"
 msgstr "GpgOL"
 
@@ -90,62 +90,62 @@ msgstr ""
 msgid "Encryption"
 msgstr "Verschlüsselung"
 
-#: src/engine-gpgme.c:778
+#: src/engine-gpgme.c:788
 msgid "Fingerprint: "
 msgstr "Fingerabdruck: "
 
-#: src/engine-gpgme.c:835
+#: src/engine-gpgme.c:845
 msgid "This signature is valid\n"
 msgstr "Diese Unterschrift ist korrekt\n"
 
-#: src/engine-gpgme.c:837
+#: src/engine-gpgme.c:847
 msgid "signature state is \"green\"\n"
 msgstr "Status der Unterschrift ist \"grün\"\n"
 
-#: src/engine-gpgme.c:839
+#: src/engine-gpgme.c:849
 msgid "signature state is \"red\"\n"
 msgstr "Status der Unterschrift ist \"rot\"\n"
 
-#: src/engine-gpgme.c:843
+#: src/engine-gpgme.c:853
 msgid "Warning: One of the certificates has been revoked\n"
 msgstr "Warnung: Eines der Zertifikate wurde widerrufen\n"
 
-#: src/engine-gpgme.c:853
+#: src/engine-gpgme.c:863
 msgid "Warning: The certificate used to create the signature expired at: "
 msgstr ""
 "Warnung: Das Zertifikat mit der diese Unterschrift erzeugt wurde verfiel am: "
 
-#: src/engine-gpgme.c:859
+#: src/engine-gpgme.c:869
 msgid "Warning: At least one certification certificate has expired\n"
 msgstr ""
 "Warnung: Mindestens eines der Zertifizierungs-Zertifikate ist abgelaufen\n"
 
-#: src/engine-gpgme.c:865
+#: src/engine-gpgme.c:875
 msgid "Warning: The signature expired at: "
 msgstr "Die Unterschrift verfiel am: "
 
-#: src/engine-gpgme.c:871
+#: src/engine-gpgme.c:881
 msgid "Can't verify due to a missing certificate\n"
 msgstr ""
 "Aufrund eines fehlenden Zertifikats ist eine Überprüfung nicht möglich\n"
 
-#: src/engine-gpgme.c:875
+#: src/engine-gpgme.c:885
 msgid "The CRL is not available\n"
 msgstr "Die CRL ist nicht verfügbar\n"
 
-#: src/engine-gpgme.c:881
+#: src/engine-gpgme.c:891
 msgid "Available CRL is too old\n"
 msgstr "Die vorhandene CRL ist zu alt\n"
 
-#: src/engine-gpgme.c:886
+#: src/engine-gpgme.c:896
 msgid "A policy requirement was not met\n"
 msgstr "Eine Richtlinie wurde nicht erfüllt\n"
 
-#: src/engine-gpgme.c:892
+#: src/engine-gpgme.c:902
 msgid "A system error occured"
 msgstr "Ein Systemfehler ist aufgetreten"
 
-#: src/engine-gpgme.c:929
+#: src/engine-gpgme.c:939
 msgid ""
 "WARNING: We have NO indication whether this certificate belongs to the "
 "person named as shown above\n"
@@ -153,13 +153,13 @@ msgstr ""
 "WARNUNG: Es gibt keinen Hinweis darauf, ob dieses Zertifikat wirklich der "
 "Person gehört, die oben angezeigt ist\n"
 
-#: src/engine-gpgme.c:936
+#: src/engine-gpgme.c:946
 msgid ""
 "WARNING: The certificate does NOT BELONG to the person named as shown above\n"
 msgstr ""
 "WARNUNG: Das Zertifikat gehört NICHT der Person die oben angezeigt ist\n"
 
-#: src/engine-gpgme.c:940
+#: src/engine-gpgme.c:950
 msgid ""
 "WARNING: It is NOT certain that the certificate belongs to the person named "
 "as shown above\n"
@@ -167,51 +167,51 @@ msgstr ""
 "WARNING: Es ist nicht sicher, daß das Zertifikat der Person gehört, die oben "
 "angezeigt ist\n"
 
-#: src/engine-gpgme.c:973
+#: src/engine-gpgme.c:983
 msgid "Verification started at: "
 msgstr "Überprüfung begann am: "
 
-#: src/engine-gpgme.c:978
+#: src/engine-gpgme.c:988
 msgid "Verification result for: "
 msgstr "Prüfungsresultat für: "
 
-#: src/engine-gpgme.c:979
+#: src/engine-gpgme.c:989
 msgid "[unnamed part]"
 msgstr "[Unbenannter Teil]"
 
-#: src/engine-gpgme.c:997 src/engine-gpgme.c:1027
+#: src/engine-gpgme.c:1007 src/engine-gpgme.c:1037
 msgid "Good signature from: "
 msgstr "Korrekte Unterschrift von: "
 
-#: src/engine-gpgme.c:1004
+#: src/engine-gpgme.c:1014
 msgid "                aka: "
 msgstr "                    alias: "
 
-#: src/engine-gpgme.c:1008 src/engine-gpgme.c:1030
+#: src/engine-gpgme.c:1018 src/engine-gpgme.c:1040
 msgid "            created: "
 msgstr "                  erzeugt: "
 
-#: src/engine-gpgme.c:1017
+#: src/engine-gpgme.c:1027
 msgid "*BAD* signature claimed to be from: "
 msgstr "*FALSCHE* Unterschrift, vorgeblich von: "
 
-#: src/engine-gpgme.c:1040
+#: src/engine-gpgme.c:1050
 msgid "Error checking signature"
 msgstr "Fehler beim Prüfen der Unterschrift"
 
-#: src/engine-gpgme.c:1056
+#: src/engine-gpgme.c:1066
 msgid "*** Begin Notation (signature by: "
 msgstr "*** Anfang Notation (Unterschrift von: "
 
-#: src/engine-gpgme.c:1076
+#: src/engine-gpgme.c:1086
 msgid "*** End Notation ***\n"
 msgstr "*** Ende Notation ***\n"
 
-#: src/ext-commands.cpp:532
+#: src/ext-commands.cpp:533
 msgid "GpgOL Decrypt/Verify"
 msgstr "GpgOL Enschlüsseln/Prüfen"
 
-#: src/ext-commands.cpp:546
+#: src/ext-commands.cpp:547
 msgid ""
 "This is a signed and encrypted message.\n"
 "Click for more information. "
@@ -219,7 +219,7 @@ msgstr ""
 "Dies ist eine unterschriebene und verschlüsselte Nachricht.\n"
 "Klicken Sie hier um weitere Informationen zu erhalten. "
 
-#: src/ext-commands.cpp:549
+#: src/ext-commands.cpp:550
 msgid ""
 "This is an encrypted message.\n"
 "Click for more information. "
@@ -227,7 +227,7 @@ msgstr ""
 "Dies ist eine verschlüsselte Nachricht.\n"
 "Klicken Sie hier um weitere Informationen zu erhalten. "
 
-#: src/ext-commands.cpp:551
+#: src/ext-commands.cpp:552
 msgid ""
 "This is a signed message.\n"
 "Click for more information. "
@@ -235,43 +235,43 @@ msgstr ""
 "Dies ist eine unterschriebene Nachricht.\n"
 "Klicken Sie hier um weitere Informationen zu erhalten. "
 
-#: src/ext-commands.cpp:561
+#: src/ext-commands.cpp:562
 msgid ">GnuPG protocol"
 msgstr ">GnuPG Protokoll"
 
-#: src/ext-commands.cpp:562
+#: src/ext-commands.cpp:563
 msgid "auto"
 msgstr "automatisch"
 
-#: src/ext-commands.cpp:563
+#: src/ext-commands.cpp:564
 msgid "PGP/MIME"
 msgstr "PGP/MIME"
 
-#: src/ext-commands.cpp:564
+#: src/ext-commands.cpp:565
 msgid "S/MIME"
 msgstr "S/MIME"
 
-#: src/ext-commands.cpp:566
+#: src/ext-commands.cpp:567
 msgid "&encrypt message with GnuPG"
 msgstr "Nachricht verschlüsseln"
 
-#: src/ext-commands.cpp:567
+#: src/ext-commands.cpp:568
 msgid "&sign message with GnuPG"
 msgstr "Nachricht unterschreiben"
 
-#: src/ext-commands.cpp:602
+#: src/ext-commands.cpp:603
 msgid "GnuPG Certificate &Manager"
 msgstr "GnuPG Zertifikats&verwaltung"
 
-#: src/ext-commands.cpp:603
+#: src/ext-commands.cpp:604
 msgid "Remove GpgOL flags from this folder"
 msgstr "GpgOL Eigenschaften aus diesem Ordner entfernen"
 
-#: src/ext-commands.cpp:607
+#: src/ext-commands.cpp:608
 msgid "Open the certificate manager"
 msgstr "Die Zertifikatsverwaltung öffnen"
 
-#: src/ext-commands.cpp:743
+#: src/ext-commands.cpp:744
 msgid ""
 "Support for S/MIME has not been enabled.\n"
 "\n"
@@ -286,11 +286,11 @@ msgstr ""
 "aktivieren.  Sie finden die Einstellungen im Hauptmenu unter:  Extras-"
 ">Optionen->GpgOL.\n"
 
-#: src/ext-commands.cpp:772
+#: src/ext-commands.cpp:773
 msgid "Could not start certificate manager"
 msgstr "Die Zertifikatsverwaltung konnte nicht aufgerufen werden"
 
-#: src/ext-commands.cpp:784
+#: src/ext-commands.cpp:785
 msgid ""
 "You are about to start the process of reversing messages created by GpgOL to "
 "prepare deinstalling of GpgOL. Running this command will put GpgOL into a "
@@ -313,64 +313,64 @@ msgstr ""
 "weiterhin installiertem GpgOL - Nachrichten wieder wie gewohnt von GpgOL "
 "angezeigt werden."
 
-#: src/ext-commands.cpp:798
+#: src/ext-commands.cpp:799
 msgid "Do you want to revert this folder?"
 msgstr "Möchten Sie diesen Ordner von GpgOL befreien?"
 
-#: src/ext-commands.cpp:897
+#: src/ext-commands.cpp:901
 msgid "Select this option to automatically select the protocol."
 msgstr "Wählen Sie diese Option zum das Protokoll automatisch auszuwählen."
 
-#: src/ext-commands.cpp:904
+#: src/ext-commands.cpp:908
 msgid "Select this option to select the PGP/MIME protocol."
 msgstr "Wählen Sie diese Option zum das PGP/MIME Protokoll auszuwählen."
 
-#: src/ext-commands.cpp:911
+#: src/ext-commands.cpp:915
 msgid "Select this option to select the S/MIME protocol."
 msgstr "Wählen Sie diese Option zum das S/MIME Protokoll auszuwählen."
 
-#: src/ext-commands.cpp:918
+#: src/ext-commands.cpp:922
 msgid "Select this option to encrypt the message."
 msgstr "Wählen Sie diese Option zum Verschlüsseln der Nachricht."
 
-#: src/ext-commands.cpp:925
+#: src/ext-commands.cpp:929
 msgid "Select this option to sign the message."
 msgstr "Wählen Sie diese Option zum Unterschreiben der Nachricht."
 
-#: src/ext-commands.cpp:932
+#: src/ext-commands.cpp:936
 msgid "Select this option to open the certificate manager"
 msgstr "Wählen Sie diese Option zum die Zertifikatsverwaltung zu öffenen."
 
-#: src/ext-commands.cpp:962
+#: src/ext-commands.cpp:966
 msgid "Automatically select the protocol for sign/encrypt"
 msgstr "Wählen Sie diese Option um das Protokoll automatisch auszuwählen."
 
-#: src/ext-commands.cpp:972
+#: src/ext-commands.cpp:976
 msgid "Use PGP/MIME for sign/encrypt"
 msgstr "PGP/MIME zum signieren/verschlüsseln verwenden."
 
-#: src/ext-commands.cpp:982
+#: src/ext-commands.cpp:986
 msgid "Use S/MIME for sign/encrypt"
 msgstr "S/MIME zum signieren/verschlüsseln verwenden."
 
-#: src/ext-commands.cpp:992
+#: src/ext-commands.cpp:996
 msgid "Encrypt message with GnuPG"
 msgstr "Nachricht mit GnuPG verschlüsseln"
 
-#: src/ext-commands.cpp:1002
+#: src/ext-commands.cpp:1006
 msgid "Sign message with GnuPG"
 msgstr "Nachricht mit GnuPG unterschreiben"
 
-#: src/ext-commands.cpp:1012
+#: src/ext-commands.cpp:1016
 msgid "Open the GpgOL certificate manager"
 msgstr "Zertifikatsverwaltung von GpgOL öffnen"
 
-#: src/main.c:679
+#: src/main.c:681
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr "Notiz: Diese Kompatibilitätsflags werden verwendet: %s"
 
-#: src/main.c:685
+#: src/main.c:687
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -383,11 +383,11 @@ msgstr ""
 "\n"
 "geschrieben."
 
-#: src/mapihelp.cpp:1192 src/mapihelp.cpp:1200 src/mapihelp.cpp:1208
+#: src/mapihelp.cpp:1426 src/mapihelp.cpp:1434 src/mapihelp.cpp:1442
 msgid "[no subject]"
 msgstr "[Kein Betreff]"
 
-#: src/mapihelp.cpp:1816
+#: src/mapihelp.cpp:2050
 msgid ""
 "[The content of this message is not visible because it has been decrypted by "
 "another Outlook session.  Use the \"decrypt/verify\" command to make it "
@@ -397,7 +397,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:2586
+#: src/mapihelp.cpp:2827
 msgid ""
 "[The content of this message is not visible due to an processing error in "
 "GpgOL.]"
@@ -490,11 +490,11 @@ msgstr "Verschlüsselungsfehler (%s)"
 msgid "Signing failed (%s)"
 msgstr "Unterschrifterstellungsfehler (%s)"
 
-#: src/mimeparser.c:1126
+#: src/mimeparser.c:1131
 msgid "Error writing to stream"
 msgstr "Dateischreibfehler"
 
-#: src/mimeparser.c:1127
+#: src/mimeparser.c:1132
 msgid "I/O-Error"
 msgstr "Ein-/Ausgabefehler"
 
index cf473e8..fa6f46f 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-08-06 08:04+0200\n"
+"POT-Creation-Date: 2008-10-23 10:23+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"
@@ -48,7 +48,7 @@ msgstr "GPG - Spara dekrypterad bilaga"
 msgid "Debug output (for analysing problems)"
 msgstr ""
 
-#: src/engine.c:425
+#: src/engine.c:429
 msgid ""
 "The user interface server is not available or does not work.  Using an "
 "internal user interface.\n"
@@ -57,8 +57,8 @@ msgid ""
 "are not readable."
 msgstr ""
 
-#: src/engine.c:429 src/ext-commands.cpp:773 src/ext-commands.cpp:794
-#: src/ext-commands.cpp:799 src/main.c:680 src/main.c:686 src/message.cpp:302
+#: src/engine.c:433 src/ext-commands.cpp:774 src/ext-commands.cpp:795
+#: src/ext-commands.cpp:800 src/main.c:682 src/main.c:688 src/message.cpp:302
 msgid "GpgOL"
 msgstr ""
 
@@ -79,63 +79,63 @@ msgstr ""
 msgid "Encryption"
 msgstr "Kryptering"
 
-#: src/engine-gpgme.c:778
+#: src/engine-gpgme.c:788
 msgid "Fingerprint: "
 msgstr "Fingeravtryck: "
 
-#: src/engine-gpgme.c:835
+#: src/engine-gpgme.c:845
 msgid "This signature is valid\n"
 msgstr "Den här signaturen är giltig\n"
 
-#: src/engine-gpgme.c:837
+#: src/engine-gpgme.c:847
 msgid "signature state is \"green\"\n"
 msgstr "signaturens tillstånd är \"grön\"\n"
 
-#: src/engine-gpgme.c:839
+#: src/engine-gpgme.c:849
 msgid "signature state is \"red\"\n"
 msgstr "signaturens tillstånd är \"röd\"\n"
 
-#: src/engine-gpgme.c:843
+#: src/engine-gpgme.c:853
 #, fuzzy
 msgid "Warning: One of the certificates has been revoked\n"
 msgstr "Varning: En av nycklarna har spärrats\n"
 
-#: src/engine-gpgme.c:853
+#: src/engine-gpgme.c:863
 #, fuzzy
 msgid "Warning: The certificate used to create the signature expired at: "
 msgstr "Varning: Nyckeln som användes för att skapa signaturen gick ut den: "
 
-#: src/engine-gpgme.c:859
+#: src/engine-gpgme.c:869
 #, fuzzy
 msgid "Warning: At least one certification certificate has expired\n"
 msgstr "Varning: Åtminstone en certifieringsnyckel har gått ut\n"
 
-#: src/engine-gpgme.c:865
+#: src/engine-gpgme.c:875
 msgid "Warning: The signature expired at: "
 msgstr "Varning: Signaturen gick ut den: "
 
-#: src/engine-gpgme.c:871
+#: src/engine-gpgme.c:881
 #, fuzzy
 msgid "Can't verify due to a missing certificate\n"
 msgstr "Kan inte validera på grund av en saknad nyckel eller certifikat\n"
 
-#: src/engine-gpgme.c:875
+#: src/engine-gpgme.c:885
 msgid "The CRL is not available\n"
 msgstr "Spärrlistan är inte tillgänglig\n"
 
-#: src/engine-gpgme.c:881
+#: src/engine-gpgme.c:891
 msgid "Available CRL is too old\n"
 msgstr "Tillgänglig spärrlista är för gammal\n"
 
-#: src/engine-gpgme.c:886
+#: src/engine-gpgme.c:896
 msgid "A policy requirement was not met\n"
 msgstr "Ett policykrav matchades inte\n"
 
-#: src/engine-gpgme.c:892
+#: src/engine-gpgme.c:902
 msgid "A system error occured"
 msgstr "Ett systemfel inträffade"
 
-#: src/engine-gpgme.c:929
+#: src/engine-gpgme.c:939
 #, fuzzy
 msgid ""
 "WARNING: We have NO indication whether this certificate belongs to the "
@@ -144,13 +144,13 @@ msgstr ""
 "VARNING: Vi har INGA indikationer på huruvida nyckeln tillhör personen vars "
 "namn visas ovanför\n"
 
-#: src/engine-gpgme.c:936
+#: src/engine-gpgme.c:946
 #, fuzzy
 msgid ""
 "WARNING: The certificate does NOT BELONG to the person named as shown above\n"
 msgstr "VARNING: Nyckeln TILLHÖR INTE personen vars namn visas ovanför\n"
 
-#: src/engine-gpgme.c:940
+#: src/engine-gpgme.c:950
 #, fuzzy
 msgid ""
 "WARNING: It is NOT certain that the certificate belongs to the person named "
@@ -159,109 +159,109 @@ msgstr ""
 "VARNING: Det är INTE säkert att nyckeln tillhör den person vars namn visas "
 "ovanför\n"
 
-#: src/engine-gpgme.c:973
+#: src/engine-gpgme.c:983
 msgid "Verification started at: "
 msgstr "Validering startad: "
 
-#: src/engine-gpgme.c:978
+#: src/engine-gpgme.c:988
 msgid "Verification result for: "
 msgstr "Valideringsresultat för: "
 
-#: src/engine-gpgme.c:979
+#: src/engine-gpgme.c:989
 msgid "[unnamed part]"
 msgstr "[ej namngiven del]"
 
-#: src/engine-gpgme.c:997 src/engine-gpgme.c:1027
+#: src/engine-gpgme.c:1007 src/engine-gpgme.c:1037
 msgid "Good signature from: "
 msgstr "Korrekt signatur från: "
 
-#: src/engine-gpgme.c:1004
+#: src/engine-gpgme.c:1014
 msgid "                aka: "
 msgstr "även känd som:"
 
-#: src/engine-gpgme.c:1008 src/engine-gpgme.c:1030
+#: src/engine-gpgme.c:1018 src/engine-gpgme.c:1040
 msgid "            created: "
 msgstr "             skapad: "
 
-#: src/engine-gpgme.c:1017
+#: src/engine-gpgme.c:1027
 msgid "*BAD* signature claimed to be from: "
 msgstr "*FELAKTIG* signatur hävdades komma från: "
 
-#: src/engine-gpgme.c:1040
+#: src/engine-gpgme.c:1050
 msgid "Error checking signature"
 msgstr "Fel vid kontroll av signatur"
 
-#: src/engine-gpgme.c:1056
+#: src/engine-gpgme.c:1066
 msgid "*** Begin Notation (signature by: "
 msgstr "*** Notation start (signatur av: "
 
-#: src/engine-gpgme.c:1076
+#: src/engine-gpgme.c:1086
 msgid "*** End Notation ***\n"
 msgstr "*** Notation slut ***\n"
 
-#: src/ext-commands.cpp:532
+#: src/ext-commands.cpp:533
 msgid "GpgOL Decrypt/Verify"
 msgstr ""
 
-#: src/ext-commands.cpp:546
+#: src/ext-commands.cpp:547
 msgid ""
 "This is a signed and encrypted message.\n"
 "Click for more information. "
 msgstr ""
 
-#: src/ext-commands.cpp:549
+#: src/ext-commands.cpp:550
 msgid ""
 "This is an encrypted message.\n"
 "Click for more information. "
 msgstr ""
 
-#: src/ext-commands.cpp:551
+#: src/ext-commands.cpp:552
 msgid ""
 "This is a signed message.\n"
 "Click for more information. "
 msgstr ""
 
-#: src/ext-commands.cpp:561
+#: src/ext-commands.cpp:562
 msgid ">GnuPG protocol"
 msgstr ""
 
-#: src/ext-commands.cpp:562
+#: src/ext-commands.cpp:563
 msgid "auto"
 msgstr ""
 
-#: src/ext-commands.cpp:563
+#: src/ext-commands.cpp:564
 #, fuzzy
 msgid "PGP/MIME"
 msgstr "[PGP/MIME-meddelande]"
 
-#: src/ext-commands.cpp:564
+#: src/ext-commands.cpp:565
 msgid "S/MIME"
 msgstr ""
 
-#: src/ext-commands.cpp:566
+#: src/ext-commands.cpp:567
 #, fuzzy
 msgid "&encrypt message with GnuPG"
 msgstr "Signera meddelandet med GPG"
 
-#: src/ext-commands.cpp:567
+#: src/ext-commands.cpp:568
 #, fuzzy
 msgid "&sign message with GnuPG"
 msgstr "Signera meddelandet med GPG"
 
-#: src/ext-commands.cpp:602
+#: src/ext-commands.cpp:603
 #, fuzzy
 msgid "GnuPG Certificate &Manager"
 msgstr "GPG-nyckel&hanterare"
 
-#: src/ext-commands.cpp:603
+#: src/ext-commands.cpp:604
 msgid "Remove GpgOL flags from this folder"
 msgstr ""
 
-#: src/ext-commands.cpp:607
+#: src/ext-commands.cpp:608
 msgid "Open the certificate manager"
 msgstr ""
 
-#: src/ext-commands.cpp:743
+#: src/ext-commands.cpp:744
 msgid ""
 "Support for S/MIME has not been enabled.\n"
 "\n"
@@ -270,12 +270,12 @@ msgid ""
 ">Options->GpgOL.\n"
 msgstr ""
 
-#: src/ext-commands.cpp:772
+#: src/ext-commands.cpp:773
 #, fuzzy
 msgid "Could not start certificate manager"
 msgstr "Kunde inte starta nyckelhanteraren"
 
-#: src/ext-commands.cpp:784
+#: src/ext-commands.cpp:785
 msgid ""
 "You are about to start the process of reversing messages created by GpgOL to "
 "prepare deinstalling of GpgOL. Running this command will put GpgOL into a "
@@ -288,71 +288,71 @@ msgid ""
 "will again process messages."
 msgstr ""
 
-#: src/ext-commands.cpp:798
+#: src/ext-commands.cpp:799
 msgid "Do you want to revert this folder?"
 msgstr ""
 
-#: src/ext-commands.cpp:897
+#: src/ext-commands.cpp:901
 #, fuzzy
 msgid "Select this option to automatically select the protocol."
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:904
+#: src/ext-commands.cpp:908
 #, fuzzy
 msgid "Select this option to select the PGP/MIME protocol."
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:911
+#: src/ext-commands.cpp:915
 #, fuzzy
 msgid "Select this option to select the S/MIME protocol."
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:918
+#: src/ext-commands.cpp:922
 msgid "Select this option to encrypt the message."
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:925
+#: src/ext-commands.cpp:929
 msgid "Select this option to sign the message."
 msgstr "Välj det här alternativet för att signera meddelandet."
 
-#: src/ext-commands.cpp:932
+#: src/ext-commands.cpp:936
 #, fuzzy
 msgid "Select this option to open the certificate manager"
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:962
+#: src/ext-commands.cpp:966
 #, fuzzy
 msgid "Automatically select the protocol for sign/encrypt"
 msgstr "Välj det här alternativet för att kryptera meddelandet."
 
-#: src/ext-commands.cpp:972
+#: src/ext-commands.cpp:976
 msgid "Use PGP/MIME for sign/encrypt"
 msgstr ""
 
-#: src/ext-commands.cpp:982
+#: src/ext-commands.cpp:986
 msgid "Use S/MIME for sign/encrypt"
 msgstr ""
 
-#: src/ext-commands.cpp:992
+#: src/ext-commands.cpp:996
 #, fuzzy
 msgid "Encrypt message with GnuPG"
 msgstr "Signera meddelandet med GPG"
 
-#: src/ext-commands.cpp:1002
+#: src/ext-commands.cpp:1006
 #, fuzzy
 msgid "Sign message with GnuPG"
 msgstr "Signera meddelandet med GPG"
 
-#: src/ext-commands.cpp:1012
+#: src/ext-commands.cpp:1016
 msgid "Open the GpgOL certificate manager"
 msgstr ""
 
-#: src/main.c:679
+#: src/main.c:681
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr ""
 
-#: src/main.c:685
+#: src/main.c:687
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -360,18 +360,18 @@ msgid ""
 "\"%s\""
 msgstr ""
 
-#: src/mapihelp.cpp:1192 src/mapihelp.cpp:1200 src/mapihelp.cpp:1208
+#: src/mapihelp.cpp:1426 src/mapihelp.cpp:1434 src/mapihelp.cpp:1442
 msgid "[no subject]"
 msgstr ""
 
-#: src/mapihelp.cpp:1816
+#: src/mapihelp.cpp:2050
 msgid ""
 "[The content of this message is not visible because it has been decrypted by "
 "another Outlook session.  Use the \"decrypt/verify\" command to make it "
 "visible]"
 msgstr ""
 
-#: src/mapihelp.cpp:2586
+#: src/mapihelp.cpp:2827
 msgid ""
 "[The content of this message is not visible due to an processing error in "
 "GpgOL.]"
@@ -449,12 +449,12 @@ msgstr "Kryptering misslyckades"
 msgid "Signing failed (%s)"
 msgstr "Signering misslyckades"
 
-#: src/mimeparser.c:1126
+#: src/mimeparser.c:1131
 #, fuzzy
 msgid "Error writing to stream"
 msgstr "Fel vid skrivning av fil"
 
-#: src/mimeparser.c:1127
+#: src/mimeparser.c:1132
 msgid "I/O-Error"
 msgstr "In-/Ut-fel"
 
index ab66b17..a529c4d 100644 (file)
@@ -1,3 +1,17 @@
+2008-10-23  Werner Koch  <wk@g10code.com>
+
+       * mapihelp.cpp (mapi_delete_gpgol_body_attachment): New.
+       * message-events.cpp (OnWriteComplete): Remove a body attachment.
+
+       * message.cpp (message_display_handler): Do not display PGP
+       clearsigned messages.
+       (message_display_handler): Do not update GpgOLStatus; it is not
+       used anyway.
+       (pgp_mime_from_clearsigned): Fix bogus trailing white space
+       removal code.  Insert an empty line.
+       * mimeparser.c (mime_verify): Add arg MIMEHACK.
+       (message_verify): Use it.
+
 2008-10-17  Werner Koch  <wk@g10code.com>
 
        * recipient-dialog.c (load_rsetbox): Remove superfluous check on
index 58ad806..796c3ea 100644 (file)
@@ -1482,6 +1482,7 @@ mapi_get_message_type (LPMESSAGE message)
   if ( PROP_TYPE (propval->ulPropTag) == PT_STRING8 )
     {
       const char *s = propval->Value.lpszA;
+
       if (!strncmp (s, "IPM.Note.GpgOL", 14) && (!s[14] || s[14] =='.'))
         {
           s += 14;
@@ -2837,6 +2838,96 @@ mapi_get_gpgol_body_attachment (LPMESSAGE message,
 }
 
 
+/* Delete a possible body atatchment.  Returns true if an atatchment
+   has been deleted.  */
+int
+mapi_delete_gpgol_body_attachment (LPMESSAGE message)
+{    
+  HRESULT hr;
+  SizedSPropTagArray (1L, propAttNum) = { 1L, {PR_ATTACH_NUM} };
+  LPMAPITABLE mapitable;
+  LPSRowSet   mapirows;
+  unsigned int pos, n_attach;
+  ULONG moss_tag;
+  int found = 0;
+
+  if (get_gpgolattachtype_tag (message, &moss_tag) )
+    return 0;
+
+  hr = message->GetAttachmentTable (0, &mapitable);
+  if (FAILED (hr))
+    {
+      log_debug ("%s:%s: GetAttachmentTable failed: hr=%#lx",
+                 SRCNAME, __func__, hr);
+      return 0;
+    }
+      
+  hr = HrQueryAllRows (mapitable, (LPSPropTagArray)&propAttNum,
+                       NULL, NULL, 0, &mapirows);
+  if (FAILED (hr))
+    {
+      log_debug ("%s:%s: HrQueryAllRows failed: hr=%#lx",
+                 SRCNAME, __func__, hr);
+      mapitable->Release ();
+      return 0;
+    }
+  n_attach = mapirows->cRows > 0? mapirows->cRows : 0;
+  if (!n_attach)
+    {
+      FreeProws (mapirows);
+      mapitable->Release ();
+      return 0; /* No Attachments.  */
+    }
+
+  for (pos=0; pos < n_attach; pos++) 
+    {
+      LPATTACH att;
+
+      if (mapirows->aRow[pos].cValues < 1)
+        {
+          log_error ("%s:%s: invalid row at pos %d", SRCNAME, __func__, pos);
+          continue;
+        }
+      if (mapirows->aRow[pos].lpProps[0].ulPropTag != PR_ATTACH_NUM)
+        {
+          log_error ("%s:%s: invalid prop at pos %d", SRCNAME, __func__, pos);
+          continue;
+        }
+      hr = message->OpenAttach (mapirows->aRow[pos].lpProps[0].Value.l,
+                                NULL, MAPI_BEST_ACCESS, &att); 
+      if (FAILED (hr))
+        {
+          log_error ("%s:%s: can't open attachment %d (%ld): hr=%#lx",
+                     SRCNAME, __func__, pos, 
+                     mapirows->aRow[pos].lpProps[0].Value.l, hr);
+          continue;
+        }
+      if (has_gpgol_body_name (att)
+          && get_gpgolattachtype (att, moss_tag) == ATTACHTYPE_FROMMOSS)
+        {
+          att->Release ();
+          hr = message->DeleteAttach (mapirows->aRow[pos].lpProps[0].Value.l,
+                                      0, NULL, 0);
+          if (hr)
+            log_error ("%s:%s: DeleteAttach failed: hr=%#lx\n",
+                         SRCNAME, __func__, hr); 
+          else
+            {
+              log_debug ("%s:%s: body attachment deleted\n", 
+                         SRCNAME, __func__); 
+              found = 1;
+              
+            }
+          break;
+        }
+      att->Release ();
+    }
+  FreeProws (mapirows);
+  mapitable->Release ();
+  return found;
+}
+
+
 /* Copy the attachment ITEM of the message MESSAGE verbatim to the
    PR_BODY property.  Returns 0 on success.  This function does not
    call SaveChanges. */
index e76a96f..12f96b9 100644 (file)
@@ -159,6 +159,7 @@ int   mapi_get_gpgol_body_attachment (LPMESSAGE message,
                                       char **r_body, size_t *r_nbytes,
                                       int *r_ishtml, int *r_protected);
 
+int   mapi_delete_gpgol_body_attachment (LPMESSAGE message);
 
 int   mapi_attachment_to_body (LPMESSAGE message, mapi_attach_item_t *item);
 
index 56bda81..5d6db2c 100644 (file)
@@ -387,7 +387,14 @@ GpgolMessageEvents::OnWriteComplete (LPEXCHEXTCALLBACK eecb, ULONG flags)
       else if (!m_pExchExt->m_gpgEncrypt && m_pExchExt->m_gpgSign)
         rc = message_sign (msg, proto, hWnd);
       else
-        rc = 0;
+        {
+          /* In case this is a forward message which is not to be
+             signed or encrypted we need to remove a possible body
+             attachment.  */
+          if (mapi_delete_gpgol_body_attachment (msg))
+            mapi_save_changes (msg, KEEP_OPEN_READWRITE);
+          rc = 0;
+        }
       
       if (rc)
         {
index e9aac84..647d4c4 100644 (file)
@@ -154,28 +154,46 @@ message_display_handler (LPEXCHEXTCALLBACK eecb, HWND hwnd)
   LPMDB mdb = NULL;
   int ishtml, wasprotected = false;
   char *body;
-  
+
   hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
   if (SUCCEEDED (hr))
     {
-      err = mapi_get_gpgol_body_attachment (message, &body, NULL, 
-                                            &ishtml, &wasprotected);
-      if (!err && body)
+      if (mapi_get_message_type (message) == MSGTYPE_GPGOL_CLEAR_SIGNED)
         {
-          put_outlook_property (eecb, "GpgOLStatus", 
-                                mapi_get_sig_status (message));
-
-          update_display (hwnd, eecb, wasprotected, ishtml, body);
+          /* We used to display the clearsigned data in the processed
+             form, that is without the PGP lines and without the dash
+             escaping.  However, this poses the problem that the user
+             does not notice that he is viewing a mail which was
+             signed using a deprecated method and - far worse - it
+             might update the PR_BODY and thus all signature
+             information will get lost.  Of course we could save the
+             body away first like we do it with encrypted mails, but
+             that is too much overhead and GpgOL will always be
+             required to show such a message, which contrdicts the
+             very reason of clearsigned messages.  */
+          log_debug ("%s:%s: skipping display update for ClearSigned\n",
+                     SRCNAME, __func__);
         }
       else
         {
-          put_outlook_property (eecb, "GpgOLStatus", "?");
-          update_display (hwnd, NULL, 0, 0, 
-                          _("[Crypto operation failed - "
-                            "can't show the body of the message]"));
+          err = mapi_get_gpgol_body_attachment (message, &body, NULL, 
+                                                &ishtml, &wasprotected);
+          if (!err && body)
+            {
+              /* put_outlook_property (eecb, "GpgOLStatus",            */
+              /*                       mapi_get_sig_status (message)); */
+              
+              update_display (hwnd, eecb, wasprotected, ishtml, body);
+            }
+          else
+            {
+              /* put_outlook_property (eecb, "GpgOLStatus", "?"); */
+              update_display (hwnd, NULL, 0, 0, 
+                              _("[Crypto operation failed - "
+                                "can't show the body of the message]"));
+            }
+          xfree (body);
         }
-      xfree (body);
-  
     }
   else
     log_debug_w32 (hr, "%s:%s: error getting message", SRCNAME, __func__);
@@ -307,7 +325,10 @@ show_message (HWND hwnd, const char *text)
 /* Convert the clear signed message from INPUT into a PGP/MIME signed
    message and return it in a new allocated buffer.  OUTPUTLEN
    received the valid length of that buffer; the buffer is guaranteed
-   to be Nul terminated.  */
+   to be Nul terminated.  Note: Because we need to insert an empty
+   line to indicate the end of MIME headers, the signature won't
+   verify unless we tell the signature verification routine to skip
+   this first line.  */
 static char *
 pgp_mime_from_clearsigned (LPSTREAM input, size_t *outputlen)
 {
@@ -332,7 +353,7 @@ pgp_mime_from_clearsigned (LPSTREAM input, size_t *outputlen)
             "Content-Type: multipart/signed; boundary=\"%s\";\r\n"
             "              protocol=\"application/pgp-signature\"\r\n"
             "\r\n"
-            "--%s\r\n", boundary, boundary);
+            "--%s\r\n\r\n", boundary, boundary);
   snprintf (sig_header, sizeof sig_header,
             "--%s\r\n"
             "Content-Type: application/pgp-signature\r\n"
@@ -397,16 +418,19 @@ pgp_mime_from_clearsigned (LPSTREAM input, size_t *outputlen)
           while (*p && *p != '\n')
             {
               if (*p == ' ' || *p == '\t' || *p == '\r')
-                mark = p;
+                {
+                  if (!mark)
+                    mark = dest;
+                }
               else
                 mark = NULL;
               *dest++ = *p++;
             }
           if (mark)
-            *mark =0; /* Remove trailing white space.  */
+            dest = mark;
           if (*p == '\n')
             {
-              if (p[-1] == '\r')
+              if (p > p0 && p[-1] == '\r')
                 *dest++ = '\r';
               *dest++ = '\n';
             }
@@ -497,6 +521,7 @@ message_verify (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
   size_t inbuflen = 0;
   protocol_t protocol = PROTOCOL_UNKNOWN;
   int err;
+  int mimehack = 0;
 
   switch (msgtype)
     {
@@ -560,6 +585,7 @@ message_verify (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
       if (!inbuf)
         return -1;
       protocol = PROTOCOL_OPENPGP;
+      mimehack = 1; /* Required for our made up PGP/MIME.  */
     }
   else if (msgtype == MSGTYPE_GPGOL_OPAQUE_SIGNED)
     {
@@ -636,7 +662,7 @@ message_verify (LPMESSAGE message, msgtype_t msgtype, int force, HWND hwnd)
     err = mime_verify_opaque (protocol, opaquestream,
                               NULL, 0, message, hwnd, 0, 0);
   else
-    err = mime_verify (protocol, inbuf, inbuflen, message, hwnd, 0);
+    err = mime_verify (protocol, inbuf, inbuflen, message, hwnd, 0, mimehack);
   log_debug ("mime_verify%s returned %d", opaquestream? "_opaque":"", err);
   if (err && opt.enable_debug)
     {
index 9fca8e3..0729850 100644 (file)
@@ -1168,9 +1168,12 @@ plaintext_handler (void *handle, const void *buffer, size_t size)
 
 
 
+/* FIXME: Needs documentation!
+
+   MIMEHACK make the verification code ignore the first two bytes.  */
 int
 mime_verify (protocol_t protocol, const char *message, size_t messagelen, 
-             LPMESSAGE mapi_message, HWND hwnd, int preview_mode)
+             LPMESSAGE mapi_message, HWND hwnd, int preview_mode, int mimehack)
 {
   gpg_error_t err = 0;
   mime_context_t ctx;
@@ -1241,7 +1244,7 @@ mime_verify (protocol_t protocol, const char *message, size_t messagelen,
   /* Now actually verify the signature. */
   if (!err && ctx->signed_data && signature)
     {
-      gpgme_data_seek (ctx->signed_data, 0, SEEK_SET);
+      gpgme_data_seek (ctx->signed_data, mimehack? 2:0, SEEK_SET);
       
       if ((err=engine_create_filter (&filter, NULL, NULL)))
         goto leave;
index 9c10a44..4c00342 100644 (file)
@@ -30,7 +30,7 @@ extern "C" {
 
 int mime_verify (protocol_t protocol, const char *message, size_t messagelen, 
                  LPMESSAGE mapi_message, 
-                 HWND hwnd, int preview_mode);
+                 HWND hwnd, int preview_mode, int mimehack);
 int mime_verify_opaque (protocol_t protocol, LPSTREAM instream, 
                         const char *inbuffer, size_t inbufferlen,
                         LPMESSAGE mapi_message, HWND hwnd, int preview_mode,