]> git.notmuchmail.org Git - notmuch/blobdiff - mime-node.c
index: implement notmuch_indexopts_t with try_decrypt
[notmuch] / mime-node.c
index 56187746b36c8e73d6d1186aa562ed74f9207402..c3d5cb9b47595ad2a43606e8faf08b8a0e28283d 100644 (file)
@@ -171,7 +171,7 @@ set_signature_list_destructor (mime_node_t *node)
 /* Verify a signed mime node (GMime 2.6) */
 static void
 node_verify (mime_node_t *node, GMimeObject *part,
-            g_mime_3_unused(notmuch_crypto_context_t *cryptoctx))
+            g_mime_3_unused(GMimeCryptoContext *cryptoctx))
 {
     GError *err = NULL;
 
@@ -192,7 +192,7 @@ node_verify (mime_node_t *node, GMimeObject *part,
 /* Decrypt and optionally verify an encrypted mime node (GMime 2.6) */
 static void
 node_decrypt_and_verify (mime_node_t *node, GMimeObject *part,
-                        g_mime_3_unused(notmuch_crypto_context_t *cryptoctx))
+                        g_mime_3_unused(GMimeCryptoContext *cryptoctx))
 {
     GError *err = NULL;
     GMimeDecryptResult *decrypt_result = NULL;
@@ -200,7 +200,11 @@ node_decrypt_and_verify (mime_node_t *node, GMimeObject *part,
 
     node->decrypt_attempted = true;
     node->decrypted_child = g_mime_multipart_encrypted_decrypt
+#if (GMIME_MAJOR_VERSION < 3)
        (encrypteddata, cryptoctx, &decrypt_result, &err);
+#else
+        (encrypteddata, GMIME_DECRYPT_NONE, NULL, &decrypt_result, &err);
+#endif
     if (! node->decrypted_child) {
        fprintf (stderr, "Failed to decrypt part: %s\n",
                 err ? err->message : "no error explanation given");
@@ -227,7 +231,7 @@ static mime_node_t *
 _mime_node_create (mime_node_t *parent, GMimeObject *part)
 {
     mime_node_t *node = talloc_zero (parent, mime_node_t);
-    notmuch_crypto_context_t *cryptoctx = NULL;
+    GMimeCryptoContext *cryptoctx = NULL;
 
     /* Set basic node properties */
     node->part = part;
@@ -265,7 +269,12 @@ _mime_node_create (mime_node_t *parent, GMimeObject *part)
        || (GMIME_IS_MULTIPART_SIGNED (part) && node->ctx->crypto->verify)) {
        GMimeContentType *content_type = g_mime_object_get_content_type (part);
        const char *protocol = g_mime_content_type_get_parameter (content_type, "protocol");
-       cryptoctx = _notmuch_crypto_get_context (node->ctx->crypto, protocol);
+       notmuch_status_t status;
+       status = _notmuch_crypto_get_gmime_ctx_for_protocol (node->ctx->crypto,
+                                                            protocol, &cryptoctx);
+       if (status) /* this is a warning, not an error */
+           fprintf (stderr, "Warning: %s (%s).\n", notmuch_status_to_string (status),
+                    protocol ? protocol : "NULL");
        if (!cryptoctx)
            return NULL;
     }