about summary refs log tree commit homepage
path: root/lib/PublicInbox/NNTP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox/NNTP.pm')
-rw-r--r--lib/PublicInbox/NNTP.pm27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index be80560f..8a31b910 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -434,6 +434,26 @@ sub xref ($$$$) {
 sub set_nntp_headers ($$$$$) {
         my ($self, $hdr, $ng, $n, $mid) = @_;
 
+        # why? leafnode requires a Path: header for some inexplicable
+        # reason.  We'll fake the shortest one possible.
+        $hdr->header_set('Path', 'y');
+
+        # leafnode (and maybe other NNTP clients) have trouble dealing
+        # with v2 messages which have multiple Message-IDs (either due
+        # to our own content-based dedupe or buggy git-send-email versions).
+        my @mids = $hdr->header('Message-ID');
+        if (scalar(@mids) > 1) {
+                my $mid0 = "<$mid>";
+                $hdr->header_set('Message-ID', $mid0);
+                my @alt = $hdr->header('X-Alt-Message-ID');
+                my %seen = map { $_ => 1 } (@alt, $mid0);
+                foreach my $m (@mids) {
+                        next if $seen{$m}++;
+                        push @alt, $m;
+                }
+                $hdr->header_set('X-Alt-Message-ID', @alt);
+        }
+
         # clobber some
         my $xref = xref($self, $ng, $n, $mid);
         $hdr->header_set('Xref', $xref);
@@ -515,6 +535,13 @@ sub _header ($) {
         my $hdr = $_[0]->header_obj->as_string;
         utf8::encode($hdr);
         $hdr =~ s/(?<!\r)\n/\r\n/sg;
+
+        # for leafnode compatibility, we need to ensure Message-ID headers
+        # are only a single line.  We can't subclass Email::Simple::Header
+        # and override _default_fold_at in here, either; since that won't
+        # affect messages already in the archive.
+        $hdr =~ s/^(Message-ID:)[ \t]*\r\n[ \t]+([^\r]+)\r\n/$1 $2\r\n/igsm;
+
         $hdr
 }