198937Sdes#!/usr/bin/perl
298937Sdes#
398937Sdes# fixprogs  - run through the list of entropy commands and
498937Sdes#             score out the losers
598937Sdes#
698937Sdes
798937Sdes$entscale = 50; # divisor for optional entropy measurement
898937Sdes
998937Sdessub usage {
1098937Sdes  return("Usage: $0 <command file>\n");
1198937Sdes}
1298937Sdes
1398937Sdesif (($#ARGV == -1) || ($#ARGV>1)) {
1498937Sdes  die(&usage);
1598937Sdes}
1698937Sdes
1798937Sdes# 'undocumented' option - run ent (in second param) on the output
1898937Sdesif ($#ARGV==1) {
1998937Sdes  $entcmd=$ARGV[1]
2098937Sdes} else {
2198937Sdes  $entcmd = ""
2298937Sdes};
2398937Sdes
2498937Sdes$infilename = $ARGV[0];
2598937Sdes
2698937Sdesif (!open(IN, "<".$infilename)) {
2798937Sdes  die("Couldn't open input file");
2898937Sdes}
2998937Sdes$outfilename=$infilename.".out";
3098937Sdesif (!open(OUT, ">$outfilename")) {
3198937Sdes  die("Couldn't open output file $outfilename");
3298937Sdes}
3398937Sdes@infile=<IN>;
3498937Sdes
3598937Sdesselect(OUT); $|=1; select(STDOUT);
3698937Sdes
3798937Sdesforeach (@infile) {
3898937Sdes  if (/^\s*\#/ || /^\s*$/) {
3998937Sdes    print OUT;
4098937Sdes    next;
4198937Sdes  }
4298937Sdes  ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o;
4398937Sdes  @args = split(/ /, $cmd);
4498937Sdes   if (! ($pid = fork())) {
4598937Sdes     # child
4698937Sdes     close STDIN; close STDOUT; close STDERR;
4798937Sdes     open (STDIN,  "</dev/null");
4898937Sdes     open (STDOUT, ">/dev/null");
4998937Sdes     open (STDERR, ">/dev/null");
5098937Sdes     exec $path @args;
5198937Sdes     exit 1; # shouldn't be here
5298937Sdes   }
5398937Sdes   # parent
5498937Sdes   waitpid ($pid, 0); $ret=$? >> 8;
5598937Sdes
5698937Sdes  if ($ret != 0) {
5798937Sdes    $path = "undef";
5898937Sdes  } else {
5998937Sdes    if ($entcmd ne "") {
6098937Sdes      # now try to run ent on the command
6198937Sdes      $mostargs=join(" ", splice(@args,1));
6298937Sdes      print "Evaluating '$path $mostargs'\n";
6398937Sdes      @ent = qx{$path $mostargs | $entcmd -b -t};
6498937Sdes      @ent = grep(/^1,/, @ent);
6598937Sdes      ($null, $null, $rate) = split(/,/, $ent[0]);
6698937Sdes      $est = $rate / $entscale;		# scale the estimate back
6798937Sdes    }
68126274Sdes  }
6998937Sdes  print OUT "\"$cmd\" $path $est\n";
7098937Sdes}
7198937Sdes
7298937Sdesclose(IN);
73