[PATCH v3 1/6] cli: new crypto structure to store crypto contexts and parameters, and functions to support it
Jani Nikula
jani at nikula.org
Tue May 22 22:59:59 PDT 2012
On May 23, 2012 4:44 AM, "Jameson Graef Rollins" <jrollins at finestructure.net>
wrote:
>
> This new structure, notmuch_crypto_t, keeps all relevant crypto
> contexts and parameters together, and will make it easier to pass the
> stuff around and clean it up. The name of the crypto context inside
> this new struct will change, to reflect that it is actually a GPG
> context, which is a sub type of Crypto context. There are other types
> of Crypto contexts (Pkcs7 in particular, which we hope to support) so
> we want to be clear.
>
> The new crypto.c contains functions to return the proper context from
> the struct for a given protocol (and initialize it if needed), and to
> cleanup a struct by releasing the crypto contexts.
> ---
> Makefile.local | 1 +
> crypto.c | 65
++++++++++++++++++++++++++++++++++++++++++++++++++++++
> notmuch-client.h | 15 +++++++++++++
> 3 files changed, 81 insertions(+)
> create mode 100644 crypto.c
>
> diff --git a/Makefile.local b/Makefile.local
> index 53b4a0d..a890df2 100644
> --- a/Makefile.local
> +++ b/Makefile.local
> @@ -292,6 +292,7 @@ notmuch_client_srcs = \
> notmuch-time.c \
> query-string.c \
> mime-node.c \
> + crypto.c \
> json.c
>
> notmuch_client_modules = $(notmuch_client_srcs:.c=.o)
> diff --git a/crypto.c b/crypto.c
> new file mode 100644
> index 0000000..c346999
> --- /dev/null
> +++ b/crypto.c
> @@ -0,0 +1,65 @@
> +/* notmuch - Not much of an email program, (just index and search)
> + *
> + * Copyright © 2012 Jameson Rollins
> + *
> + * This program is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program. If not, see http://www.gnu.org/licenses/ .
> + *
> + * Authors: Jameson Rollins <jrollins at finestructure.net>
> + */
> +
> +#include "notmuch-client.h"
> +
> +/* for the specified protocol return the context pointer (initializing
> + * if needed) */
> +GMimeCryptoContext *
> +notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char
*protocol)
> +{
> + GMimeCryptoContext *cryptoctx = NULL;
Isn't GMimeCryptoContext gmime 2.6 specific? It's #ifdeffed elsewhere at
least. Also affects the return type.
> +
> + if ((strcmp (protocol, "application/pgp-signature") == 0)
> + || (strcmp (protocol, "application/pgp-encrypted") == 0)) {
Is protocol guaranteed to be lower case?
> + if (!crypto->gpgctx) {
> +#ifdef GMIME_ATLEAST_26
> + /* TODO: GMimePasswordRequestFunc */
> + crypto->gpgctx = g_mime_gpg_context_new (NULL, "gpg");
> +#else
> + GMimeSession* session = g_object_new
(g_mime_session_get_type(), NULL);
> + crypto->gpgctx = g_mime_gpg_context_new (session, "gpg");
> + g_object_unref (session);
> +#endif
> + if (crypto->gpgctx) {
> + g_mime_gpg_context_set_always_trust ((GMimeGpgContext*)
crypto->gpgctx, FALSE);
> + } else {
> + fprintf (stderr, "Failed to construct gpg context.\n");
> + }
> + }
> + cryptoctx = crypto->gpgctx;
> +
> + } else {
> + fprintf (stderr, "Unknown or unsupported cryptographic
protocol.\n");
> + }
> +
> + return cryptoctx;
> +}
> +
> +int
> +notmuch_crypto_cleanup (notmuch_crypto_t *crypto)
> +{
> + if (crypto->gpgctx) {
> + g_object_unref(crypto->gpgctx);
> + crypto->gpgctx = NULL;
> + }
> +
> + return 0;
> +}
> diff --git a/notmuch-client.h b/notmuch-client.h
> index 19b7f01..14d1e2f 100644
> --- a/notmuch-client.h
> +++ b/notmuch-client.h
> @@ -74,6 +74,15 @@ 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;
> @@ -113,6 +122,12 @@ chomp_newline (char *str)
> str[strlen(str)-1] = '\0';
> }
>
> +GMimeCryptoContext *
> +notmuch_crypto_get_context (notmuch_crypto_t *crypto, const char
*protocol);
> +
> +int
> +notmuch_crypto_cleanup (notmuch_crypto_t *crypto);
> +
> int
> notmuch_count_command (void *ctx, int argc, char *argv[]);
>
> --
> 1.7.10
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://notmuchmail.org/pipermail/notmuch/attachments/20120523/ceb6067b/attachment-0001.html>
More information about the notmuch
mailing list