Add 4.97+security
[buildfarm-server.git] / bf-alerts.pl
index 1b9dd1a3b611a879a708c4ef969997f2f5c25afe..c038f963b0b6fd76bdb1239e8be6104cb7017c01 100755 (executable)
@@ -1,5 +1,13 @@
 #!/usr/bin/perl
 
+=comment
+
+Copyright (c) 2003-2010, Andrew Dunstan
+
+See accompanying License file for license details
+
+=cut 
+
 use strict;
 
 use Digest::SHA1  qw(sha1_hex);
@@ -8,14 +16,16 @@ use DBI;
 use DBD::Pg;
 use Data::Dumper;
 use Mail::Send;
-use Safe;
+use Storable qw(thaw);
 
 use vars qw($dbhost $dbname $dbuser $dbpass $dbport
        $all_stat $fail_stat $change_stat $green_stat
        $default_host
 );
 
-require "$ENV{BFConfDir}/BuildFarmWeb.pl";
+
+use FindBin qw($RealBin);
+require "$RealBin/BuildFarmWeb.pl";
 
 die "no dbname" unless $dbname;
 die "no dbuser" unless $dbuser;
@@ -45,7 +55,7 @@ my $sth = $db->prepare(q[
     SELECT DISTINCT ON (sysname, branch) 
         sysname, branch, 
         extract(epoch from snapshot at time zone 'GMT')::int as snapshot, 
-        conf_sum as config
+        frozen_conf as config
     FROM build_status s join buildsystems b on (s.sysname = b.name)
     WHERE NOT b.no_alerts and
        snapshot > current_timestamp - interval '30 days'
@@ -108,14 +118,7 @@ print "starting alert run: $lts\n";
 
 foreach my $sysbranch (@last_heard)
 {
-    # eval the config in a Safe container to protect ourselves
-    my $container = new Safe;
-    my $sconf = $sysbranch->{config}; 
-    unless ($sconf =~ s/.*(\$Script_Config)/$1/ms )
-    {
-       $sconf = '$Script_Config={};';
-    }
-    my $client_conf = $container->reval("$sconf;");
+    my $client_conf = thaw $sysbranch->{config};
 
     my %client_alert_settings = %{ $client_conf->{alerts} || {} };
     my $setting = $client_alert_settings{$sysbranch->{branch}};
@@ -197,7 +200,7 @@ my $me = `id -un`; chomp $me;
 my $host = `hostname`; chomp ($host);
 $host = $default_host unless ($host =~ m/[.]/ || !defined($default_host));
 
-my $from_addr = "PG Build Farm <$me\@$host>";
+my $from_addr = "Exim BuildFarm <$me\@$host>";
 $from_addr =~ tr /\r\n//d;
 
 
@@ -231,7 +234,7 @@ foreach my $clearme (@need_cleared)
     # $sth->finish;
 
     $msg->to($mailto);
-    $msg->subject("PGBuildfarm member $animal Branch $branch Alert cleared");
+    $msg->subject("Exim BuildFarm member $animal Branch $branch Alert cleared");
     my $fh = $msg->open;
     print $fh "\n\n$text\n"; 
     $fh->close;
@@ -239,9 +242,9 @@ foreach my $clearme (@need_cleared)
     print "alert cleared $animal $branch\n";
 }
 
-foreach my $clearme (@need_alerts)
+foreach my $needme (@need_alerts)
 {
-    my ($sysbranch, $setting) = @$clearme;
+    my ($sysbranch, $setting) = @$needme;
     my ($animal, $branch) = ($sysbranch->{sysname},$sysbranch->{branch});
     my $hours = sprintf("%.2f",($now - $sysbranch->{snapshot}) / 3600);
     my $text = "$sysbranch->{sysname} has not reported " .
@@ -260,7 +263,7 @@ foreach my $clearme (@need_alerts)
 
     $msg->to($mailto);
 
-    $msg->subject("PGBuildfarm member $animal Branch $branch " .
+    $msg->subject("Exim BuildFarm member $animal Branch $branch " .
                  "Alert notification");
     my $fh = $msg->open;
     print $fh "\n\n$text\n";