From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 8A86A6DE0B7C for ; Mon, 11 Dec 2017 18:52:34 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.028 X-Spam-Level: X-Spam-Status: No, score=-0.028 tagged_above=-999 required=5 tests=[AWL=-0.028] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XariMu-sWkAY for ; Mon, 11 Dec 2017 18:52:34 -0800 (PST) Received: from che.mayfirst.org (che.mayfirst.org [162.247.75.118]) by arlo.cworth.org (Postfix) with ESMTPS id 79CE36DE0243 for ; Mon, 11 Dec 2017 18:52:33 -0800 (PST) Received: from fifthhorseman.net (unknown [38.109.115.130]) by che.mayfirst.org (Postfix) with ESMTPSA id 00560F99B for ; Mon, 11 Dec 2017 21:52:32 -0500 (EST) Received: by fifthhorseman.net (Postfix, from userid 1000) id E809620EF7; Mon, 11 Dec 2017 21:52:27 -0500 (EST) From: Daniel Kahn Gillmor To: Notmuch Mail Subject: [PATCH 3/5] cli: write session keys to database, if asked to do so Date: Mon, 11 Dec 2017 21:52:23 -0500 Message-Id: <20171212025225.11854-4-dkg@fifthhorseman.net> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171212025225.11854-1-dkg@fifthhorseman.net> References: <20171212025225.11854-1-dkg@fifthhorseman.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Dec 2017 02:52:34 -0000 If the decryption policy is NOTMUCH_DECRYPT_TRUE, that means we want to stash session keys in the database. Note that there is currently no way from the command line to set it this way, though, so it is not yet included in the test suite. --- mime-node.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/mime-node.c b/mime-node.c index 11df082b..75b79f98 100644 --- a/mime-node.c +++ b/mime-node.c @@ -197,16 +197,18 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part, GError *err = NULL; GMimeDecryptResult *decrypt_result = NULL; GMimeMultipartEncrypted *encrypteddata = GMIME_MULTIPART_ENCRYPTED (part); + notmuch_message_t *message = NULL; if (! node->decrypted_child) { - mime_node_t *parent; - for (parent = node; parent; parent = parent->parent) - if (parent->envelope_file) + for (mime_node_t *parent = node; parent; parent = parent->parent) + if (parent->envelope_file) { + message = parent->envelope_file; break; + } node->decrypted_child = _notmuch_crypto_decrypt (&node->decrypt_attempted, node->ctx->crypto->decrypt, - parent ? parent->envelope_file : NULL, + message, cryptoctx, encrypteddata, &decrypt_result, &err); } if (! node->decrypted_child) { @@ -225,6 +227,20 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part, g_object_ref (node->sig_list); set_signature_list_destructor (node); } + +#if HAVE_GMIME_SESSION_KEYS + if (node->ctx->crypto->decrypt == NOTMUCH_DECRYPT_TRUE && message) { + notmuch_database_t *db = notmuch_message_get_database (message); + const char *sk = g_mime_decrypt_result_get_session_key (decrypt_result); + if (db && sk) { + notmuch_status_t status; + status = notmuch_message_add_property (message, "session-key", sk); + if (status) + fprintf (stderr, "Failed to stash session key in the database (%d) %s\n", + status, notmuch_status_to_string (status)); + } + } +#endif g_object_unref (decrypt_result); } -- 2.15.1