From: Daniel Kahn Gillmor Date: Fri, 11 May 2018 06:57:57 +0000 (-0400) Subject: cli/show: reindex when we learned new session keys about a message X-Git-Tag: 0.27_rc0~15 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=808cababbb8ef2d1cfbf9f2babc99ba48f2b3ffa;hp=bc842bfff12998a9b1a30b880cf8c6612f727d45 cli/show: reindex when we learned new session keys about a message If the number of session keys for a given message increased after running "notmuch show" then we just learned something new that might let us do automatic decryption. We should reindex this message using our newfound knowledge. Amended by db: add previously discussed #if block --- diff --git a/notmuch-show.c b/notmuch-show.c index 9871159d..3d10f3b2 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -873,6 +873,11 @@ show_message (void *ctx, void *local = talloc_new (ctx); mime_node_t *root, *part; notmuch_status_t status; + unsigned int session_keys = 0; + notmuch_status_t session_key_count_error = NOTMUCH_STATUS_SUCCESS; + + if (params->crypto.decrypt == NOTMUCH_DECRYPT_TRUE) + session_key_count_error = notmuch_message_count_properties (message, "session-key", &session_keys); status = mime_node_open (local, message, &(params->crypto), &root); if (status) @@ -880,6 +885,21 @@ show_message (void *ctx, part = mime_node_seek_dfs (root, (params->part < 0 ? 0 : params->part)); if (part) status = format->part (local, sp, part, indent, params); +#if HAVE_GMIME_SESSION_KEYS + if (params->crypto.decrypt == NOTMUCH_DECRYPT_TRUE && session_key_count_error == NOTMUCH_STATUS_SUCCESS) { + unsigned int new_session_keys = 0; + if (notmuch_message_count_properties (message, "session-key", &new_session_keys) == NOTMUCH_STATUS_SUCCESS && + new_session_keys > session_keys) { + /* try a quiet re-indexing */ + notmuch_indexopts_t *indexopts = notmuch_database_get_default_indexopts (notmuch_message_get_database (message)); + if (indexopts) { + notmuch_indexopts_set_decrypt_policy (indexopts, NOTMUCH_DECRYPT_AUTO); + print_status_message ("Error re-indexing message with --decrypt=stash", + message, notmuch_message_reindex (message, indexopts)); + } + } + } +#endif DONE: talloc_free (local); return status;