X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=pctb%2Fcommod-update-receiver;h=4b52251b9967896aa7b1e70985a3082197df9b26;hb=b971a4a2c96ff4dac86857e7fc7f06cc11ff9da4;hp=ac52fec7fe89499ab5feed1ca168ec858c0f1776;hpb=b958771fa67513ba09630953ec91b9d21b3f42f9;p=ypp-sc-tools.db-test.git diff --git a/pctb/commod-update-receiver b/pctb/commod-update-receiver index ac52fec..4b52251 100755 --- a/pctb/commod-update-receiver +++ b/pctb/commod-update-receiver @@ -102,9 +102,6 @@ $o{'timestamp'}= must_param('timestamp', "^([1-9]\\d{1,20})\$"); my $now= time; defined $now or die $!; fail("clock skew") if $o{'timestamp'} >= $now; -die if $o{'ocean'} =~ m/\=/; -die if $o{'island'} =~ m/\=/; - my $indatafh= upload('data'); defined $indatafh or fail("data is not a file"); my $datafile= must_param('data',"^(deduped\\.tsv\\.gz)\$"); @@ -119,14 +116,29 @@ foreach my $cs (qw(client server)) { $o{"${cs}spec"}= join ' ', map { $o{$cs.$_} } qw(name version fixes); } -foreach my $vn (sort keys %o) { - my $mpart= MIME::Entity->build(Type => 'text/plain', - Charset => 'utf-8', - Disposition => 'inline', - Data => $o{$vn}); - $mcontent->add_part($mpart); +my $metadata= ''; + +sub ksmap ($) { + my ($v) = @_; + my $i=0; grep { return $i if $_ eq $v; $i++ } qw(ocean island timestamp); + sprintf "z %d %s", (length $v) / 8, $v; +} + +foreach my $vn (sort { ksmap($a) cmp ksmap($b) } keys %o) { + my $val= $o{$vn}; + die if $val =~ m/\n|\r|\t/; + $metadata .= "$vn\t$o{$vn}\n"; } +my $mdpart= MIME::Entity->build(Top => 0, + Type => 'text/plain', + Charset => 'utf-8', + Disposition => 'inline', + Encoding => 'quoted-printable', + Filename => 'metadata', + Data => $metadata); +$mcontent->add_part($mdpart); + my $gunzchild= open(GZ, "-|"); defined $gunzchild or die $!; if (!$gunzchild) { open STDIN, "<&=", $indatafh or die $!; @@ -156,15 +168,21 @@ while () { GZ->error and die $!; $?=0; close GZ; $? and fail("gunzip for check failed code $?"); -my $mdatafile= MIME::Entity->build(Type => 'application/octet-stream', +my $mdatafile= MIME::Entity->build(Top => 0, + Type => 'application/octet-stream', Disposition => 'attachment', Encoding => 'base64', - File => $datafile); + Filename => 'deduped.tsv.gz', + Path => $datafile); $mcontent->add_part($mdatafile); -open M, "|/usr/sbin/sendmail -t -oi -oee -odq" +open M, "|/usr/sbin/sendmail -t -oi -oee -odb" or fail("fork sendmail failed! ($!)"); $mcontent->print(\*M); M->error and fail("write sendmail failed! ($!)"); $?=0; close M; $? and fail("sendmail failed code $?"); + +print header(-type=>'text/plain', -charset=>'us-ascii'), + "OK\n" + or die $!;