# HG changeset patch
# User David Champion <[email protected]>
# Date 1451647188 21600
#      Fri Jan 01 05:19:48 2016 -0600
# Node ID cd7be2bfff1cd15592b15adc21f44f7b50ecc312
# Parent  9480a363a68a7472d61c8e27a29fd2312cac8721
favor List-Reply over List-Post

The longstanding <list-reply> function originally worked only for
messages from known and subscribed mailing lists. Later mutt added
support for replying to RFC 2369 List-Post: headers, but this is
incomplete RFC 2369 support.

As a first step to completing RFC 2369 support, we favor List-Reply:
headers over List-Post: when performing <list-reply>.  That is, if a
List-Reply: is present then we send replies to that URL; otherwise we
look for List-Post as previously.

diff -r 9480a363a68a -r cd7be2bfff1c mutt.h
--- a/mutt.h    Thu Dec 17 12:25:00 2015 -0800
+++ b/mutt.h    Fri Jan 01 05:19:48 2016 -0600
@@ -586,7 +586,8 @@
   ADDRESS *sender;
   ADDRESS *reply_to;
   ADDRESS *mail_followup_to;
-  char *list_post;             /* this stores a mailto URL, or nothing */
+  char *list_post;
+  char *list_reply;
   char *subject;
   char *real_subj;             /* offset of the real subject */
   char *message_id;
diff -r 9480a363a68a -r cd7be2bfff1c parse.c
--- a/parse.c   Thu Dec 17 12:25:00 2015 -0800
+++ b/parse.c   Fri Jan 01 05:19:48 2016 -0600
@@ -950,6 +950,31 @@
   return NULL;
 }
 
+static int parse_list_header(char **dst, char *p)
+{
+  char *beg, *end;
+
+  /* RFC 2369.  FIXME: We should ignore whitespace, but don't. */
+  if (!strncmp (p, "NO", 2))
+    return 0;
+
+  for (beg = strchr (p, '<'); beg; beg = strchr (end, ','))
+  {
+    ++beg;
+    if (!(end = strchr (beg, '>')))
+      break;
+    
+    /* Take the first mailto URL */
+    if (url_check_scheme (beg) == U_MAILTO)
+    {
+      FREE (dst);
+      *dst = mutt_substrdup (beg, end);
+      break;
+    }
+  }
+  return 1;
+}
+
 void mutt_parse_mime_message (CONTEXT *ctx, HEADER *cur)
 {
   MESSAGE *msg;
@@ -1105,29 +1130,14 @@
     }
     else if (!ascii_strcasecmp (line + 1, "ist-Post"))
     {
-      /* RFC 2369.  FIXME: We should ignore whitespace, but don't. */
-      if (strncmp (p, "NO", 2))
-      {
-       char *beg, *end;
-       for (beg = strchr (p, '<'); beg; beg = strchr (end, ','))
-       {
-         ++beg;
-         if (!(end = strchr (beg, '>')))
-           break;
-         
-         /* Take the first mailto URL */
-         if (url_check_scheme (beg) == U_MAILTO)
-         {
-           FREE (&e->list_post);
-           e->list_post = mutt_substrdup (beg, end);
-           break;
-         }
-       }
-      }
-      matched = 1;
+      matched = parse_list_header(&e->list_post, p);
+    }
+    else if (!ascii_strcasecmp (line + 1, "ist-Reply"))
+    {
+      matched = parse_list_header(&e->list_reply, p);
     }
     break;
-    
+
     case 'm':
     if (!ascii_strcasecmp (line + 1, "ime-version"))
     {
diff -r 9480a363a68a -r cd7be2bfff1c send.c
--- a/send.c    Thu Dec 17 12:25:00 2015 -0800
+++ b/send.c    Fri Jan 01 05:19:48 2016 -0600
@@ -1214,10 +1214,11 @@
 
   /* Parse and use an eventual list-post header */
   if ((flags & SENDLISTREPLY) 
-      && cur && cur->env && cur->env->list_post) 
+      && cur && cur->env && (cur->env->list_post || cur->env->list_reply))
   {
     /* Use any list-post header as a template */
-    url_parse_mailto (msg->env, NULL, cur->env->list_post);
+    url_parse_mailto (msg->env, NULL,
+                      cur->env->list_reply ? cur->env->list_reply : 
cur->env->list_post);
     /* We don't let them set the sender's address. */
     rfc822_free_address (&msg->env->from);
   }

Reply via email to