use strict;
+use vars qw($dbhost $dbname $dbuser $dbpass $dbport
+ $all_stat $fail_stat $change_stat $green_stat
+ $server_time
+ $min_script_version $min_web_script_version
+);
+
+# force this before we do anything - even load modules
+BEGIN { $server_time = time; }
+
use CGI;
use Digest::SHA1 qw(sha1_hex);
use MIME::Base64;
use Mail::Send;
use Safe;
-use vars qw($dbhost $dbname $dbuser $dbpass $dbport
- $all_stat $fail_stat $change_stat $green_stat
-);
-
require "$ENV{BFConfDir}/BuildFarmWeb.pl";
die "no dbname" unless $dbname;
my $date=
sprintf("%d-%.2d-%.2d_%.2d:%.2d:%.2d",$year,$mon,$mday,$hour,$min,$sec);
-if ($ENV{BF_DEBUG} || ($ts > time) || (! $secret) )
+if ($ENV{BF_DEBUG} || ($ts > time) || ($ts + 86400 < time ) || (! $secret) )
{
open(TX,">../buildlogs/$animal.$date");
print TX "sig=$sig\nlogtar-len=" , length($log_archive),
{
my $gmt = gmtime($ts);
print "Status: 491 bad ts parameter - $ts ($gmt GMT) is in the future.\n",
- "Context-Type: text/plain\n\n bad ts parameter - $ts ($gmt GMT) is in the future\n";
+ "Content-Type: text/plain\n\n bad ts parameter - $ts ($gmt GMT) is in the future\n";
$db->disconnect;
exit;
}
+unless ($ts + 86400 > time)
+{
+ my $gmt = gmtime($ts);
+ print "Status: 491 bad ts parameter - $ts ($gmt GMT) is more than 24 hours ago.\n",
+ "Content-Type: text/plain\n\n bad ts parameter - $ts ($gmt GMT) is more than 24 hours ago.\n";
+ $db->disconnect;
+ exit;
+}
+
unless ($secret)
{
print
}
my $client_conf = $container->reval("$sconf;");
-my @config_flags = @{ $client_conf->{config_opts} || [] };
+if ($min_script_version)
+{
+ $client_conf->{script_version} ||= '0.0';
+ my ($minmajor,$minminor) = split(/\./,$min_script_version);
+ my ($smajor,$sminor) = split(/\./,$client_conf->{script_version});
+ if ($minmajor > $smajor || ($minmajor == $smajor && $minminor > $sminor))
+ {
+ print "Status: 460 script version too low\nContent-Type: text/plain\n\n";
+ print
+ "Script version is below minimum required\n",
+ "Reported version: $client_conf->{script_version},",
+ "Minumum version required: $min_script_version\n";
+ $db->disconnect;
+ exit;
+ }
+}
+
+if ($min_web_script_version)
+{
+ $client_conf->{web_script_version} ||= '0.0';
+ my ($minmajor,$minminor) = split(/\./,$min_script_version);
+ my ($smajor,$sminor) = split(/\./,$client_conf->{script_version});
+ if ($minmajor > $smajor || ($minmajor == $smajor && $minminor > $sminor))
+ {
+ print "Status: 461 web script version too low\nContent-Type: text/plain\n\n";
+ print
+ "Web Script version is below minimum required\n",
+ "Reported version: $client_conf->{web_script_version},",
+ "Minumum version required: $min_web_script_version\n";
+ $db->disconnect;
+ exit;
+ }
+}
+
+my @config_flags;
+if (not exists $client_conf->{config_opts} )
+{
+ @config_flags = ();
+}
+elsif (ref $client_conf->{config_opts} eq 'HASH')
+{
+ # leave out keys with false values
+ @config_flags = grep { $client_conf->{config_opts}->{$_} }
+ keys %{$client_conf->{config_opts}};
+}
+elsif (ref $client_conf->{config_opts} eq 'ARRAY' )
+{
+ @config_flags = @{$client_conf->{config_opts}};
+}
+
if (@config_flags)
{
@config_flags = grep {! m/=/ } @config_flags;
$sth->bind_param(8,$changed_this_run);
$sth->bind_param(9,$changed_since_success);
$sth->bind_param(10,$log_file_names);
-$sth->bind_param(11,$log_archive,{ pg_type => DBD::Pg::PG_BYTEA });
+#$sth->bind_param(11,$log_archive,{ pg_type => DBD::Pg::PG_BYTEA });
+$sth->bind_param(11,undef,{ pg_type => DBD::Pg::PG_BYTEA });
$sth->bind_param(12,$config_flags);
$sth->execute;
if ($ENV{BF_DEBUG})
{
+ my $client_time = $client_conf->{current_ts};
open(TX,">>../buildlogs/$animal.$date");
print TX "\n",Dumper(\$client_conf),"\n";
+ print TX "server time: $server_time, client time: $client_time\n" if $client_time;
close(TX);
}