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 6FC4B6DE020D for ; Tue, 9 Jan 2018 16:12:53 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] 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 vCXXFudQqXB6 for ; Tue, 9 Jan 2018 16:12:52 -0800 (PST) Received: from che.mayfirst.org (che.mayfirst.org [162.247.75.118]) by arlo.cworth.org (Postfix) with ESMTPS id B73916DE01EB for ; Tue, 9 Jan 2018 16:12:51 -0800 (PST) Received: from fifthhorseman.net (unknown [38.86.168.158]) by che.mayfirst.org (Postfix) with ESMTPSA id 9190EF99A for ; Tue, 9 Jan 2018 19:12:45 -0500 (EST) Received: by fifthhorseman.net (Postfix, from userid 1000) id CE6B020A57; Tue, 9 Jan 2018 19:12:30 -0500 (EST) From: Daniel Kahn Gillmor To: Notmuch Mail Subject: [PATCH v2 3/5] cli: write session keys to database, if asked to do so Date: Tue, 9 Jan 2018 19:12:26 -0500 Message-Id: <20180110001228.2211-4-dkg@fifthhorseman.net> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180110001228.2211-1-dkg@fifthhorseman.net> References: <20180110001228.2211-1-dkg@fifthhorseman.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.24 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: Wed, 10 Jan 2018 00:12:53 -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