]> git.donarmstrong.com Git - debbugs.git/blobdiff - scripts/process
encode added header separately from message to avoid double encoding
[debbugs.git] / scripts / process
index 4f7d15a8bfe25182df6bb13fe9f0163a59445f6f..5687bf3915e522d90736f9b55c8944c7933cfad6 100755 (executable)
@@ -16,8 +16,8 @@ use Debbugs::MIME qw(decode_rfc1522 create_mime_message getmailbody);
 use Debbugs::Mail qw(send_mail_message encode_headers get_addresses);
 use Debbugs::Packages qw(getpkgsrc binary_to_source);
 use Debbugs::User qw(read_usertags write_usertags);
-use Debbugs::Common qw(:lock get_hashname package_maintainer);
-use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug read_bug splitpackages :versions);
+use Debbugs::Common qw(:lock get_hashname package_maintainer overwritefile);
+use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug new_bug read_bug splitpackages  :versions);
 
 use Debbugs::CGI qw(html_escape bug_url);
 
@@ -28,6 +28,7 @@ use Debbugs::Text qw(:templates);
 use Debbugs::Config qw(:globals :config);
 
 use Debbugs::Control qw(append_action_to_log);
+use Encode qw(encode_utf8);
 
 chdir( "$gSpoolDir" ) || die "chdir spool: $!\n";
 
@@ -591,14 +592,9 @@ if ($ref<0) { # new bug report
     if (defined($pheader{forwarded})) {
        $data->{forwarded} = $pheader{forwarded};
     }
-    &filelock("nextnumber.lock");
-    open(N,"nextnumber") || die "nextnumber: read: $!";
-    my $nextnumber=<N>; $nextnumber =~ s/\n$// || die "nextnumber bad format";
-    $ref= $nextnumber+0;  $nextnumber += 1;  $newref=1;
-    &overwrite('nextnumber', "$nextnumber\n");
-    &unfilelock;
+    $ref = new_bug();
+    $newref = $ref;
     my $hash = get_hashname($ref);
-    &overwrite("db-h/$hash/$ref.log",'');
     $data->{originator} = $replyto;
     $data->{date} = $intdate;
     $data->{subject} = $subject;
@@ -632,8 +628,8 @@ if ($ref<0) { # new bug report
                                          );
         }
     }
-    &overwrite("db-h/$hash/$ref.report",
-               join("\n",@msg)."\n");
+    overwritefile("db-h/$hash/$ref.report",
+                 map {"$_\n"} @msg);
 }
 
 &checkmaintainers;
@@ -730,7 +726,7 @@ my $common_headers='';
 }
 if ($codeletter eq 'U') { # sent to -submitter
     &htmllog("Message", "sent on", $data->{originator}, "$gBug#$ref.");
-    &sendmessage(<<END,[$data->{originator},@resentccs],[@bccs]);
+    my $enc_msg=<<END;
 Subject: $gBug#$ref: $newsubject
 Reply-To: $replyto, $ref-quiet\@$gEmailDomain
 ${orgsender}Resent-To: $data->{originator}
@@ -740,8 +736,11 @@ Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: report $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}$fwd
+${source_pr_header}
 END
+    chomp $enc_msg;
+    $enc_msg = encode_utf8($enc_msg).$fwd."\n";
+    &sendmessage($enc_msg,[$data->{originator},@resentccs],[@bccs]);
 } elsif ($codeletter eq 'B') { # Sent to submit
     my $report_followup = $newref ? 'report' : 'followup';
     &htmllog($newref ? "Report" : "Information", "forwarded",
@@ -749,7 +748,7 @@ END
              "<code>$gBug#$ref</code>".
              (length($data->{package})? "; Package <code>".html_escape($data->{package})."</code>" : '').
              ".");
-    &sendmessage(<<END,["$gSubmitList\@$gListDomain",@resentccs],[@bccs]);
+    my $enc_msg=<<END;
 Subject: $gBug#$ref: $newsubject
 Reply-To: $replyto, $ref\@$gEmailDomain
 Resent-From: $header{'from'}
@@ -760,8 +759,11 @@ Resent-Sender: $gMaintainerEmail
 X-$gProject-PR-Message: $report_followup $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}$fwd
+${source_pr_header}
 END
+    chomp $enc_msg;
+    $enc_msg = encode_utf8($enc_msg).$fwd."\n";
+    &sendmessage($enc_msg,["$gSubmitList\@$gListDomain",@resentccs],[@bccs]);
 } elsif (@resentccs or @bccs) { # Quiet or Maintainer
     # D and F done far earlier; B just done - so this must be M or Q
     # We preserve whichever it was in the Reply-To (possibly adding
@@ -780,7 +782,7 @@ END
                  (length($data->{package}) ? "; Package <code>".html_escape($data->{package})."</code>" : '').
                  ".");
     }
-    &sendmessage(<<END,[@resentccs],[@bccs]);
+    my $enc_msg=<<END;
 Subject: $gBug#$ref: $newsubject
 Reply-To: $replyto, $ref-$baddressroot\@$gEmailDomain
 Resent-From: $header{'from'}
@@ -791,8 +793,11 @@ Resent-Sender: $gMaintainerEmail
 ${common_headers}X-$gProject-PR-Message: $report_followup $ref
 X-$gProject-PR-Package: $data->{package}
 X-$gProject-PR-Keywords: $data->{keywords}
-${source_pr_header}$fwd
+${source_pr_header}
 END
+    chomp $enc_msg;
+    $enc_msg = encode_utf8($enc_msg).$fwd."\n";
+    &sendmessage($enc_msg,[@resentccs],[@bccs]);
 }
 
 my $htmlbreak= length($brokenness) ? "<p>\n".html_escape($brokenness)."\n<p>\n" : '';
@@ -901,14 +906,6 @@ if (not exists $header{'x-debbugs-no-ack'} and
 &appendlog;
 &finish;
 
-sub overwrite {
-    my ($f,$v) = @_;
-    open(NEW,">$f.new") || die "$f.new: create: $!";
-    print(NEW "$v") || die "$f.new: write: $!";
-    close(NEW) || die "$f.new: close: $!";
-    rename("$f.new","$f") || die "rename $f.new to $f: $!";
-}
-
 sub appendlog {
     my $hash = get_hashname($ref);
     if (!open(AP,">>db-h/$hash/$ref.log")) {