X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=pctb%2Fcommod-update-receiver;h=ff28fbb019ad54d9c0b6a9c923114e4f9bcf067b;hp=531ff1a2e5ac05e17f7bff891ddc07c7f416d08d;hb=3ff1e35cbf0515fbc42a43476e7c8ec1834e8db6;hpb=3c3e5dc8eae9b239f2dab871a3bd47222af09538 diff --git a/pctb/commod-update-receiver b/pctb/commod-update-receiver index 531ff1a..ff28fbb 100755 --- a/pctb/commod-update-receiver +++ b/pctb/commod-update-receiver @@ -37,6 +37,8 @@ use strict (qw(vars)); use POSIX; +use Commods; + $CGI::POST_MAX= 3*1024*1024; $CGI::DISABLE_UPLOADS= 1; @@ -44,3 +46,56 @@ use CGI qw/:standard -private_tempfiles/; setlocale(LC_CTYPE, "en_GB.UTF-8"); +my $re_any= "^(.*)\$"; + +parse_masters(); + +sub fail ($) { + my ($msg) = @_; + print header(-status=>'400 Bad commodity update', + -type=>'text/plain', + -charset=>'us-ascii'); + print "Error: $msg\n"; + exit 0; +} + +sub must_param ($$) { + my ($n,$re)= @_; + my $v= param($n); + fail("missing form parameter $n") unless defined $v; + fail("invalid form parameter $n") unless $v =~ m/$re/; + return $1; +} + +my $clientname= must_param('clientname',$re_any); +my $client= $clients{$clientname}; +fail('unknown client') unless defined $client; + +my $clientfixes= must_param('clientfixes', $re_any); +foreach my $bug (@$client) { + fail("client out of date - missing bugfix \`$bug'") + unless grep { $_ eq $bug } split /\s+/, $clientfixes; +} + +my $cversion= must_param('clientversion', "^(\\d[-+._0-9a-zA-Z]+)\$"); + +my $ocean= must_param('ocean', $re_any); +my $island= must_param('island', $re_any); + +my $arches= $oceans{$ocean}; +fail("unknown ocean") unless $arches; + +my $island_found= 0; +foreach my $islands (values %$arches) { + my $sources= $islands->{$island}; + next unless $sources; + die if $island_found; + $island_found= $sources; +} +fail("unknown island") unless $island_found; + +#foreach my $commod (sort keys %commods) { +# print "$commod\n"; +#} +#STDOUT->error and die $!; +#close STDOUT or die $!;