From ba6f00bbd1803f5cccfafdb262f17b79b6c95252 Mon Sep 17 00:00:00 2001 From: Alexander Adolf Date: Fri, 25 Mar 2022 14:13:28 +0100 Subject: [PATCH] emacs/smime: render decrypted MIME entities in notmuch-show When processing encrypted S/MIME messages, after decryption the "last resort" handler notmuch-show-insert-part-*/* was called, because there was no application/pkcs7-mime handler, resulting in the decrypted contents not being displayed. This commit adds a new function notmuch-show-insert-part-application/pkcs7-mime (and an alias notmuch-show-insert-part-application/x-pkcs7-mime for the legacy MIME type) to render the S/MIME protected part after decryption. --- emacs/notmuch-show.el | 17 +++++++ test/T450-emacs-show.sh | 11 +++- .../crypto/smime-encrypted-signed-multipart | 51 +++++++++++++++++++ ...much-show-smime-encrypted-signed-multipart | 15 ++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 test/corpora/crypto/smime-encrypted-signed-multipart create mode 100644 test/emacs-show.expected-output/notmuch-show-smime-encrypted-signed-multipart diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 7c1f02c9..b7edfc98 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -712,6 +712,23 @@ will return nil if the CID is unknown or cannot be retrieved." (defun notmuch-show-insert-part-application/pgp-encrypted (_msg _part _content-type _nth _depth _button) t) +(defun notmuch-show-insert-part-application/pkcs7-mime (msg part _content-type _nth depth _button) + "Render S/MIME protected content after decryption. + +An alias for this function is also defined to handle entities +using the legacy application/x-pkcs7-mime MIME type." + (let* ((encstatus (car (plist-get part :encstatus))) + (inner-part (car (plist-get part :content)))) + ;; Insert a button detailing the encryption status. + (notmuch-crypto-insert-encstatus-button encstatus) + (if (not (string= (plist-get encstatus :status) "bad")) + ;; Show all decrypted parts. + (notmuch-show-insert-bodypart msg inner-part depth)))) + +;; Support for the legacy "x-" type. +(fset 'notmuch-show-insert-part-application/x-pkcs7-mime + 'notmuch-show-insert-part-application/pkcs7-mime) + (defun notmuch-show-insert-part-multipart/* (msg part _content-type _nth depth _button) (let ((inner-parts (plist-get part :content)) (start (point))) diff --git a/test/T450-emacs-show.sh b/test/T450-emacs-show.sh index 057ad37e..5c4bdd7e 100755 --- a/test/T450-emacs-show.sh +++ b/test/T450-emacs-show.sh @@ -49,7 +49,7 @@ test_emacs '(let ((notmuch-crypto-process-mime nil)) (test-visible-output))' test_expect_equal_file $EXPECTED/notmuch-show-process-crypto-mime-parts-off OUTPUT -test_begin_subtest "process cryptographic MIME parts" +test_begin_subtest "process cryptographic MIME parts (PGP)" test_emacs '(let ((notmuch-crypto-process-mime t)) (notmuch-show "id:20091117203301.GV3165@dottiness.seas.harvard.edu") (test-visible-output))' @@ -245,4 +245,13 @@ test_emacs "(test-log-error (notmuch-show \"$tid\")))" test_expect_equal "$(cat MESSAGES)" "COMPLETE" +# more crypto tests, using S/MIME from here on: +add_gpgsm_home + +test_begin_subtest "process cryptographic MIME parts (S/MIME)" +test_emacs '(let ((notmuch-crypto-process-mime t)) + (notmuch-show "id:575ddaaf0b234fd85e077cfb4d44d467@notmuchmail.org") + (test-visible-output))' +test_expect_equal_file $EXPECTED/notmuch-show-smime-encrypted-signed-multipart OUTPUT + test_done diff --git a/test/corpora/crypto/smime-encrypted-signed-multipart b/test/corpora/crypto/smime-encrypted-signed-multipart new file mode 100644 index 00000000..f0bd6c51 --- /dev/null +++ b/test/corpora/crypto/smime-encrypted-signed-multipart @@ -0,0 +1,51 @@ +Message-Id: <575ddaaf0b234fd85e077cfb4d44d467@notmuchmail.org> +From: test_suite@notmuchmail.org +To: test_suite@notmuchmail.org +Subject: notmuch-show S/MIME test +Date: Tue, 12 Apr 2022 16:57:30 +0200 +MIME-Version: 1.0 +Content-Type: application/pkcs7-mime; + smime-type=enveloped-data; + name=smime.p7m +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename=smime.p7m + +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 \ No newline at end of file diff --git a/test/emacs-show.expected-output/notmuch-show-smime-encrypted-signed-multipart b/test/emacs-show.expected-output/notmuch-show-smime-encrypted-signed-multipart new file mode 100644 index 00000000..556bd937 --- /dev/null +++ b/test/emacs-show.expected-output/notmuch-show-smime-encrypted-signed-multipart @@ -0,0 +1,15 @@ +test_suite@notmuchmail.org (0 mins. ago) (encrypted inbox) +Subject: notmuch-show S/MIME test +To: test_suite@notmuchmail.org +Date: Tue, 12 Apr 2022 16:57:30 +0200 + +[ smime.p7m: application/pkcs7-mime ] +[ Decryption successful ] +[ multipart/signed ] +[ Good signature by: ] +[ multipart/mixed ] +[ multipart/mixed ] +[ text/plain ] +The password is "12345678". But don't tell anyone! +[ test.dtd: application/octet-stream ] +[ smime.p7s: application/pkcs7-signature ] -- 2.35.1