- $$HeaderR{lc($currentheader)} .= $line;
- }
- }
-
- foreach (@PGPSignHeaders) {
- if (defined($$HeaderR{lc($_)}) && $$HeaderR{lc($_)} =~ m/^[^\s:]+: .+/o) {
- push @signheaders, $_;
- }
- }
-
- $pgpbody = join ("", @$BodyR);
-
- # Delete and create the temporary pgp-Files
- unlink "$pgptmpf.txt";
- unlink "$pgptmpf.txt.asc";
- $signheaders = join(",", @signheaders);
-
- $pgphead = "X-Signed-Headers: $signheaders\n";
- foreach $header (@signheaders) {
- if ($$HeaderR{lc($header)} =~ m/^[^\s:]+: (.+?)\n?$/so) {
- $pgphead .= $header.": ".$1."\n";
- }
- }
-
- open(FH, ">" . $pgptmpf . ".txt") or die "$0: E: can't open $pgptmpf: $!\n";
- print FH $pgphead, "\n", $pgpbody;
- print FH "\n" if ($PGPVersion =~ m/GPG/io); # workaround a pgp/gpg incompatibility - should IMHO be fixed in pgpverify
- close(FH) or warn "$0: W: Couldn't close TMP: $!\n";
-
- # Start PGP, then read the signature;
- my $PGPCommand = getpgpcommand($PGPVersion);
- `$PGPCommand`;
-
- open (FH, "<" . $pgptmpf . ".txt.asc") or die "$0: E: can't open ".$pgptmpf.".txt.asc: $!\n";
- $/ = "$pgpbegin\n";
- $_ = <FH>;
- unless (m/\Q$pgpbegin\E$/o) {
-# unlink $pgptmpf . ".txt";
-# unlink $pgptmpf . ".txt.asc";
- die "$0: E: $pgpbegin not found in ".$pgptmpf.".txt.asc\n"
- }
- unlink($pgptmpf . ".txt") or warn "$0: W: Couldn't unlink $pgptmpf.txt: $!\n";
-
- $/ = "\n";
- $_ = <FH>;
- unless (m/^Version: (\S+)(?:\s(\S+))?/o) {
- unlink $pgptmpf . ".txt";
- unlink $pgptmpf . ".txt.asc";
- die "$0: E: didn't find PGP Version line where expected.\n";
- }
-
- if (defined($2)) {
- $$HeaderR{$pgpheader} = $1."-".$2." ".$signheaders;
- } else {
- $$HeaderR{$pgpheader} = $1." ".$signheaders;
- }
-
- do { # skip other pgp headers like
- $_ = <FH>; # "charset:"||"comment:" until empty line
- } while ! /^$/;
-
- while (<FH>) {
- chomp;
- last if /^\Q$pgpend\E$/;
- $$HeaderR{$pgpheader} .= "\n\t$_";
- }
-
- $$HeaderR{$pgpheader} .= "\n" unless ($$HeaderR{$pgpheader} =~ /\n$/s);
-
- $_ = <FH>;
- unless (eof(FH)) {
- unlink $pgptmpf . ".txt";
- unlink $pgptmpf . ".txt.asc";
- die "$0: E: unexpected data following $pgpend\n";
- }
- close(FH);
- unlink "$pgptmpf.txt.asc";
-
- my $tmppgpheader = $pgpheader . ": " . $$HeaderR{$pgpheader};
- delete $$HeaderR{$pgpheader};
-
- @pgphead = ();
- foreach $header (@PGPorderheaders) {
- if ($$HeaderR{$header} && $$HeaderR{$header} ne "\n") {
- push(@pgphead, "$$HeaderR{$header}");
- delete $$HeaderR{$header};