From 2d90f20d8f5ccd2d00201c69813876cfe2a1dda1 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Thu, 17 May 2012 10:36:08 +0300 Subject: [PATCH] Re: [PATCH 1/6] cli: new crypto structure to store crypto contexts and parameters --- 95/8ed9c3d98043174be0a950d61ae3bfac2a8be1 | 312 ++++++++++++++++++++++ 1 file changed, 312 insertions(+) create mode 100644 95/8ed9c3d98043174be0a950d61ae3bfac2a8be1 diff --git a/95/8ed9c3d98043174be0a950d61ae3bfac2a8be1 b/95/8ed9c3d98043174be0a950d61ae3bfac2a8be1 new file mode 100644 index 000000000..6666074f7 --- /dev/null +++ b/95/8ed9c3d98043174be0a950d61ae3bfac2a8be1 @@ -0,0 +1,312 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 76FFA431FAF + for ; Thu, 17 May 2012 00:36:16 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: -0.7 +X-Spam-Level: +X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id cnfEI171w897 for ; + Thu, 17 May 2012 00:36:15 -0700 (PDT) +Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com + [209.85.215.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 09847431FAE + for ; Thu, 17 May 2012 00:36:14 -0700 (PDT) +Received: by lagu2 with SMTP id u2so1266293lag.26 + for ; Thu, 17 May 2012 00:36:12 -0700 (PDT) +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=google.com; s=20120113; + h=from:to:subject:in-reply-to:references:user-agent:date:message-id + :mime-version:content-type:x-gm-message-state; + bh=Ve+d0ggxO1BwdZf1iDi1ZMOqwj8MsIgXOObjp4NBo6k=; + b=kt07yKDse0CqkPRyprQAJBGXXEfSob/3EaxOMb2UE1KfAEoGj5NBA2v07Jtaokwrrn + 7Q2vgxKA8WEYtmCeDBa9Kqdgq4pSnWnCUVjFrgiVOlYtF7Vg4iPiTdmVOP9zhZIPrJKV + /5wzL7NE61shXamR0ikYVF+o60O26qNpOw2jS7PuQUoCIdj+E/i5/F+rV0PAuofRJ9ua + Oog0Lm+HKF889kmhgPaVe0kKEVN2EPsdaYGQDXEegQeGB6JM0Y1ozjik10lqFhpXEv9k + tNYZ9YSrhVah+/LaRk5G9RjKqQcrgrMoK7J35buJaVV8aFLY5HKvTzJr/bR9JNLz7onZ + J0og== +Received: by 10.112.44.163 with SMTP id f3mr2555757lbm.59.1337240171964; + Thu, 17 May 2012 00:36:11 -0700 (PDT) +Received: from localhost (dsl-hkibrasgw4-fe50dc00-68.dhcp.inet.fi. + [80.220.80.68]) + by mx.google.com with ESMTPS id u4sm6702346lad.5.2012.05.17.00.36.09 + (version=SSLv3 cipher=OTHER); Thu, 17 May 2012 00:36:11 -0700 (PDT) +From: Jani Nikula +To: Jameson Graef Rollins , + Notmuch Mail +Subject: Re: [PATCH 1/6] cli: new crypto structure to store crypto contexts + and parameters +In-Reply-To: <1337205359-2444-2-git-send-email-jrollins@finestructure.net> +References: <1337205359-2444-1-git-send-email-jrollins@finestructure.net> + <1337205359-2444-2-git-send-email-jrollins@finestructure.net> +User-Agent: Notmuch/0.13+13~gc259b9a (http://notmuchmail.org) Emacs/23.3.1 + (i686-pc-linux-gnu) +Date: Thu, 17 May 2012 10:36:08 +0300 +Message-ID: <87ehqji7iv.fsf@nikula.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +X-Gm-Message-State: + ALoCoQk0LQR9yVcQdVFEszhY4ElvDlaotsnLpzzLxbXpgUGJ8HeWXAI3pognWz1KDgTHKzEOd29H +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +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: Thu, 17 May 2012 07:36:16 -0000 + +On Thu, 17 May 2012, Jameson Graef Rollins 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@notmuchmail.org +> http://notmuchmail.org/mailman/listinfo/notmuch -- 2.26.2