[PATCH 1/6] cli: new crypto structure to store crypto contexts and parameters
Jani Nikula
jani at nikula.org
Thu May 17 00:36:08 PDT 2012
On Thu, 17 May 2012, Jameson Graef Rollins <jrollins at finestructure.net> wrote:
> The main point here is to keep track of the crypto stuff together in
> one place. In notmuch-show the crypto struct is a sub structure of
> the parameters struct. In notmuch-reply, which had been using a
> notmuch_show_params_t to store the crypto parameters, we can now just
> use the general crypto struct.
Looks good. My only (potentially unwarranted) worry is dropping the use
of notmuch_show_params_t in reply. This diverges the show/reply code,
making any future unification of them slightly harder. And if reply ever
needs params, we'll need to bring it back. But perhaps I worry too
much. :)
BR,
Jani.
>
> I slip in a name change of the crypto context itself to better reflect
> what the context is specifically for: it's actually a GPG context,
> which is a sub type of Crypto context. There are other types of
> Crypto contexts (Pkcs7 in particular) so we want to be clear.
>
> The following patches will use this to simplify some function
> interfaces.
> ---
> notmuch-client.h | 16 ++++++++++------
> notmuch-reply.c | 34 +++++++++++++++++-----------------
> notmuch-show.c | 22 +++++++++++-----------
> 3 files changed, 38 insertions(+), 34 deletions(-)
>
> diff --git a/notmuch-client.h b/notmuch-client.h
> index 19b7f01..2ad24cf 100644
> --- a/notmuch-client.h
> +++ b/notmuch-client.h
> @@ -74,17 +74,21 @@ typedef struct notmuch_show_format {
> const char *message_set_end;
> } notmuch_show_format_t;
>
> +typedef struct notmuch_crypto {
> +#ifdef GMIME_ATLEAST_26
> + GMimeCryptoContext* gpgctx;
> +#else
> + GMimeCipherContext* gpgctx;
> +#endif
> + notmuch_bool_t decrypt;
> +} notmuch_crypto_t;
> +
> typedef struct notmuch_show_params {
> notmuch_bool_t entire_thread;
> notmuch_bool_t omit_excluded;
> notmuch_bool_t raw;
> int part;
> -#ifdef GMIME_ATLEAST_26
> - GMimeCryptoContext* cryptoctx;
> -#else
> - GMimeCipherContext* cryptoctx;
> -#endif
> - notmuch_bool_t decrypt;
> + notmuch_crypto_t crypto;
> } notmuch_show_params_t;
>
> /* There's no point in continuing when we've detected that we've done
> diff --git a/notmuch-reply.c b/notmuch-reply.c
> index 7184a5d..ed87899 100644
> --- a/notmuch-reply.c
> +++ b/notmuch-reply.c
> @@ -515,7 +515,7 @@ static int
> notmuch_reply_format_default(void *ctx,
> notmuch_config_t *config,
> notmuch_query_t *query,
> - notmuch_show_params_t *params,
> + notmuch_crypto_t *crypto,
> notmuch_bool_t reply_all)
> {
> GMimeMessage *reply;
> @@ -544,7 +544,7 @@ notmuch_reply_format_default(void *ctx,
> g_object_unref (G_OBJECT (reply));
> reply = NULL;
>
> - if (mime_node_open (ctx, message, params->cryptoctx, params->decrypt,
> + if (mime_node_open (ctx, message, crypto->gpgctx, crypto->decrypt,
> &root) == NOTMUCH_STATUS_SUCCESS) {
> format_part_reply (root);
> talloc_free (root);
> @@ -559,7 +559,7 @@ static int
> notmuch_reply_format_json(void *ctx,
> notmuch_config_t *config,
> notmuch_query_t *query,
> - notmuch_show_params_t *params,
> + notmuch_crypto_t *crypto,
> notmuch_bool_t reply_all)
> {
> GMimeMessage *reply;
> @@ -574,7 +574,7 @@ notmuch_reply_format_json(void *ctx,
>
> messages = notmuch_query_search_messages (query);
> message = notmuch_messages_get (messages);
> - if (mime_node_open (ctx, message, params->cryptoctx, params->decrypt,
> + if (mime_node_open (ctx, message, crypto->gpgctx, crypto->decrypt,
> &node) != NOTMUCH_STATUS_SUCCESS)
> return 1;
>
> @@ -605,7 +605,7 @@ static int
> notmuch_reply_format_headers_only(void *ctx,
> notmuch_config_t *config,
> notmuch_query_t *query,
> - unused (notmuch_show_params_t *params),
> + unused (notmuch_crypto_t *crypto),
> notmuch_bool_t reply_all)
> {
> GMimeMessage *reply;
> @@ -674,8 +674,8 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
> notmuch_query_t *query;
> char *query_string;
> int opt_index, ret = 0;
> - int (*reply_format_func)(void *ctx, notmuch_config_t *config, notmuch_query_t *query, notmuch_show_params_t *params, notmuch_bool_t reply_all);
> - notmuch_show_params_t params = { .part = -1 };
> + int (*reply_format_func)(void *ctx, notmuch_config_t *config, notmuch_query_t *query, notmuch_crypto_t *crypto, notmuch_bool_t reply_all);
> + notmuch_crypto_t crypto = { .decrypt = FALSE };
> int format = FORMAT_DEFAULT;
> int reply_all = TRUE;
>
> @@ -689,7 +689,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
> (notmuch_keyword_t []){ { "all", TRUE },
> { "sender", FALSE },
> { 0, 0 } } },
> - { NOTMUCH_OPT_BOOLEAN, ¶ms.decrypt, "decrypt", 'd', 0 },
> + { NOTMUCH_OPT_BOOLEAN, &crypto.decrypt, "decrypt", 'd', 0 },
> { 0, 0, 0, 0, 0 }
> };
>
> @@ -706,18 +706,18 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
> else
> reply_format_func = notmuch_reply_format_default;
>
> - if (params.decrypt) {
> + if (crypto.decrypt) {
> #ifdef GMIME_ATLEAST_26
> /* TODO: GMimePasswordRequestFunc */
> - params.cryptoctx = g_mime_gpg_context_new (NULL, "gpg");
> + crypto.gpgctx = g_mime_gpg_context_new (NULL, "gpg");
> #else
> GMimeSession* session = g_object_new (g_mime_session_get_type(), NULL);
> - params.cryptoctx = g_mime_gpg_context_new (session, "gpg");
> + crypto.gpgctx = g_mime_gpg_context_new (session, "gpg");
> #endif
> - if (params.cryptoctx) {
> - g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) params.cryptoctx, FALSE);
> + if (crypto.gpgctx) {
> + g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) crypto.gpgctx, FALSE);
> } else {
> - params.decrypt = FALSE;
> + crypto.decrypt = FALSE;
> fprintf (stderr, "Failed to construct gpg context.\n");
> }
> #ifndef GMIME_ATLEAST_26
> @@ -750,14 +750,14 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
> return 1;
> }
>
> - if (reply_format_func (ctx, config, query, ¶ms, reply_all) != 0)
> + if (reply_format_func (ctx, config, query, &crypto, reply_all) != 0)
> return 1;
>
> notmuch_query_destroy (query);
> notmuch_database_destroy (notmuch);
>
> - if (params.cryptoctx)
> - g_object_unref(params.cryptoctx);
> + if (crypto.gpgctx)
> + g_object_unref(crypto.gpgctx);
>
> return ret;
> }
> diff --git a/notmuch-show.c b/notmuch-show.c
> index 95427d4..d254179 100644
> --- a/notmuch-show.c
> +++ b/notmuch-show.c
> @@ -810,8 +810,8 @@ show_message (void *ctx,
> mime_node_t *root, *part;
> notmuch_status_t status;
>
> - status = mime_node_open (local, message, params->cryptoctx,
> - params->decrypt, &root);
> + status = mime_node_open (local, message, params->crypto.gpgctx,
> + params->crypto.decrypt, &root);
> if (status)
> goto DONE;
> part = mime_node_seek_dfs (root, (params->part < 0 ? 0 : params->part));
> @@ -1002,7 +1002,7 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
> { 0, 0 } } },
> { NOTMUCH_OPT_INT, ¶ms.part, "part", 'p', 0 },
> { NOTMUCH_OPT_BOOLEAN, ¶ms.entire_thread, "entire-thread", 't', 0 },
> - { NOTMUCH_OPT_BOOLEAN, ¶ms.decrypt, "decrypt", 'd', 0 },
> + { NOTMUCH_OPT_BOOLEAN, ¶ms.crypto.decrypt, "decrypt", 'd', 0 },
> { NOTMUCH_OPT_BOOLEAN, &verify, "verify", 'v', 0 },
> { 0, 0, 0, 0, 0 }
> };
> @@ -1047,18 +1047,18 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
> break;
> }
>
> - if (params.decrypt || verify) {
> + if (params.crypto.decrypt || verify) {
> #ifdef GMIME_ATLEAST_26
> /* TODO: GMimePasswordRequestFunc */
> - params.cryptoctx = g_mime_gpg_context_new (NULL, "gpg");
> + params.crypto.gpgctx = g_mime_gpg_context_new (NULL, "gpg");
> #else
> GMimeSession* session = g_object_new (g_mime_session_get_type(), NULL);
> - params.cryptoctx = g_mime_gpg_context_new (session, "gpg");
> + params.crypto.gpgctx = g_mime_gpg_context_new (session, "gpg");
> #endif
> - if (params.cryptoctx) {
> - g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) params.cryptoctx, FALSE);
> + if (params.crypto.gpgctx) {
> + g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) params.crypto.gpgctx, FALSE);
> } else {
> - params.decrypt = FALSE;
> + params.crypto.decrypt = FALSE;
> fprintf (stderr, "Failed to construct gpg context.\n");
> }
> #ifndef GMIME_ATLEAST_26
> @@ -1118,8 +1118,8 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
> notmuch_query_destroy (query);
> notmuch_database_destroy (notmuch);
>
> - if (params.cryptoctx)
> - g_object_unref(params.cryptoctx);
> + if (params.crypto.gpgctx)
> + g_object_unref(params.crypto.gpgctx);
>
> return ret;
> }
> --
> 1.7.10
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
More information about the notmuch
mailing list