[PATCH 1/6] cli: new crypto structure to store crypto contexts and parameters
Jameson Graef Rollins
jrollins at finestructure.net
Wed May 16 14:55:54 PDT 2012
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.
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
More information about the notmuch
mailing list