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
This commit is contained in:
Daniel Kahn Gillmor 2018-05-11 02:57:57 -04:00 committed by David Bremner
parent bc842bfff1
commit 808cababbb

View file

@ -873,6 +873,11 @@ show_message (void *ctx,
void *local = talloc_new (ctx); void *local = talloc_new (ctx);
mime_node_t *root, *part; mime_node_t *root, *part;
notmuch_status_t status; 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); status = mime_node_open (local, message, &(params->crypto), &root);
if (status) if (status)
@ -880,6 +885,21 @@ show_message (void *ctx,
part = mime_node_seek_dfs (root, (params->part < 0 ? 0 : params->part)); part = mime_node_seek_dfs (root, (params->part < 0 ? 0 : params->part));
if (part) if (part)
status = format->part (local, sp, part, indent, params); 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: DONE:
talloc_free (local); talloc_free (local);
return status; return status;