]> git.notmuchmail.org Git - notmuch/blobdiff - mime-node.c
index: implement notmuch_indexopts_t with try_decrypt
[notmuch] / mime-node.c
index 8b767d78311732abf48786dade8fb0797a364aa0..c3d5cb9b47595ad2a43606e8faf08b8a0e28283d 100644 (file)
@@ -33,7 +33,7 @@ typedef struct mime_node_context {
     GMimeMessage *mime_message;
 
     /* Context provided by the caller. */
-    notmuch_crypto_t *crypto;
+    _notmuch_crypto_t *crypto;
 } mime_node_context_t;
 
 static int
@@ -56,7 +56,7 @@ _mime_node_context_free (mime_node_context_t *res)
 
 notmuch_status_t
 mime_node_open (const void *ctx, notmuch_message_t *message,
-               notmuch_crypto_t *crypto, mime_node_t **root_out)
+               _notmuch_crypto_t *crypto, mime_node_t **root_out)
 {
     const char *filename = notmuch_message_get_filename (message);
     mime_node_context_t *mctx;
@@ -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;
     }