]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-reply.c
cli: modify mime_node_open to take new crypto struct as argument
[notmuch] / notmuch-reply.c
index 51cb6de8dc66c3ca9f20548a2a1a616e339af98c..6f368c93206d152fdb93a29320a74217a51946ae 100644 (file)
@@ -384,7 +384,11 @@ guess_from_received_header (notmuch_config_t *config, notmuch_message_t *message
     const char *delim=". \t";
     size_t i;
 
-    const char *to_headers[] = {"Envelope-to", "X-Original-To"};
+    const char *to_headers[] = {
+       "Envelope-to",
+       "X-Original-To",
+       "Delivered-To",
+    };
 
     /* sadly, there is no standard way to find out to which email
      * address a mail was delivered - what is in the headers depends
@@ -395,8 +399,9 @@ guess_from_received_header (notmuch_config_t *config, notmuch_message_t *message
      * the To: or Cc: header. From here we try the following in order:
      * 1) check for an Envelope-to: header
      * 2) check for an X-Original-To: header
-     * 3) check for a (for <email@add.res>) clause in Received: headers
-     * 4) check for the domain part of known email addresses in the
+     * 3) check for a Delivered-To: header
+     * 4) check for a (for <email@add.res>) clause in Received: headers
+     * 5) check for the domain part of known email addresses in the
      *    'by' part of Received headers
      * If none of these work, we give up and return NULL
      */
@@ -570,8 +575,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,
-                           &root) == NOTMUCH_STATUS_SUCCESS) {
+       if (mime_node_open (ctx, message, &(params->crypto), &root) == NOTMUCH_STATUS_SUCCESS) {
            format_part_reply (root);
            talloc_free (root);
        }
@@ -600,8 +604,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,
-                       &node) != NOTMUCH_STATUS_SUCCESS)
+    if (mime_node_open (ctx, message, &(params->crypto), &node) != NOTMUCH_STATUS_SUCCESS)
        return 1;
 
     reply = create_reply_message (ctx, config, message, reply_all);
@@ -701,7 +704,12 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
     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 };
+    notmuch_show_params_t params = {
+       .part = -1,
+       .crypto = {
+           .decrypt = FALSE
+       }
+    };
     int format = FORMAT_DEFAULT;
     int reply_all = TRUE;
 
@@ -715,7 +723,7 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
          (notmuch_keyword_t []){ { "all", TRUE },
                                  { "sender", FALSE },
                                  { 0, 0 } } },
-       { NOTMUCH_OPT_BOOLEAN, &params.decrypt, "decrypt", 'd', 0 },
+       { NOTMUCH_OPT_BOOLEAN, &params.crypto.decrypt, "decrypt", 'd', 0 },
        { 0, 0, 0, 0, 0 }
     };
 
@@ -732,18 +740,18 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
     else
        reply_format_func = notmuch_reply_format_default;
 
-    if (params.decrypt) {
+    if (params.crypto.decrypt) {
 #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
@@ -779,11 +787,9 @@ notmuch_reply_command (void *ctx, int argc, char *argv[])
     if (reply_format_func (ctx, config, query, &params, reply_all) != 0)
        return 1;
 
+    notmuch_crypto_cleanup (&params.crypto);
     notmuch_query_destroy (query);
     notmuch_database_destroy (notmuch);
 
-    if (params.cryptoctx)
-       g_object_unref(params.cryptoctx);
-
     return ret;
 }