#include "notmuch-client.h"
+/* Create a GPG context (GMime 2.6) */
+static notmuch_crypto_context_t *
+create_gpg_context (notmuch_crypto_t *crypto)
+{
+ notmuch_crypto_context_t *gpgctx;
+
+ if (crypto->gpgctx)
+ return crypto->gpgctx;
+
+ /* TODO: GMimePasswordRequestFunc */
+ gpgctx = g_mime_gpg_context_new (NULL, crypto->gpgpath ? crypto->gpgpath : "gpg");
+ if (! gpgctx) {
+ fprintf (stderr, "Failed to construct gpg context.\n");
+ return NULL;
+ }
+ crypto->gpgctx = gpgctx;
+
+ g_mime_gpg_context_set_use_agent ((GMimeGpgContext *) gpgctx, TRUE);
+ g_mime_gpg_context_set_always_trust ((GMimeGpgContext *) gpgctx, FALSE);
+
+ return gpgctx;
+}
+
/* for the specified protocol return the context pointer (initializing
* if needed) */
notmuch_crypto_context_t *
{
notmuch_crypto_context_t *cryptoctx = NULL;
+ if (! protocol) {
+ fprintf (stderr, "Cryptographic protocol is empty.\n");
+ return cryptoctx;
+ }
+
/* As per RFC 1847 section 2.1: "the [protocol] value token is
* comprised of the type and sub-type tokens of the Content-Type".
* As per RFC 1521 section 2: "Content-Type values, subtypes, and
* parameter names as defined in this document are
* case-insensitive." Thus, we use strcasecmp for the protocol.
*/
- if ((strcasecmp (protocol, "application/pgp-signature") == 0)
- || (strcasecmp (protocol, "application/pgp-encrypted") == 0)) {
- 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) {
-#ifdef GMIME_ATLEAST_26
- g_mime_gpg_context_set_use_agent ((GMimeGpgContext*) crypto->gpgctx, TRUE);
-#endif
- g_mime_gpg_context_set_always_trust ((GMimeGpgContext*) crypto->gpgctx, FALSE);
- } else {
- fprintf (stderr, "Failed to construct gpg context.\n");
- }
- }
- cryptoctx = crypto->gpgctx;
-
+ if (strcasecmp (protocol, "application/pgp-signature") == 0 ||
+ strcasecmp (protocol, "application/pgp-encrypted") == 0) {
+ cryptoctx = create_gpg_context (crypto);
} else {
fprintf (stderr, "Unknown or unsupported cryptographic protocol.\n");
}