]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NNTP.pm
Merge remote-tracking branch 'origin/ds'
[public-inbox.git] / lib / PublicInbox / NNTP.pm
index 85778c44c215f37ce3d4fdd19e4a6bc52d4a68a7..fa412f8c6c8bc893b84ed80cb668cc45522a6fb9 100644 (file)
@@ -435,6 +435,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);
@@ -516,6 +536,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
 }