| #!/usr/bin/perl |
| # |
| # fixprogs - run through the list of entropy commands and |
| # score out the losers |
| # |
| |
| $entscale = 50; # divisor for optional entropy measurement |
| |
| sub usage { |
| return("Usage: $0 <command file>\n"); |
| } |
| |
| if (($#ARGV == -1) || ($#ARGV>1)) { |
| die(&usage); |
| } |
| |
| # 'undocumented' option - run ent (in second param) on the output |
| if ($#ARGV==1) { |
| $entcmd=$ARGV[1] |
| } else { |
| $entcmd = "" |
| }; |
| |
| $infilename = $ARGV[0]; |
| |
| if (!open(IN, "<".$infilename)) { |
| die("Couldn't open input file"); |
| } |
| $outfilename=$infilename.".out"; |
| if (!open(OUT, ">$outfilename")) { |
| die("Couldn't open output file $outfilename"); |
| } |
| @infile=<IN>; |
| |
| select(OUT); $|=1; select(STDOUT); |
| |
| foreach (@infile) { |
| if (/^\s*\#/ || /^\s*$/) { |
| print OUT; |
| next; |
| } |
| ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o; |
| @args = split(/ /, $cmd); |
| if (! ($pid = fork())) { |
| # child |
| close STDIN; close STDOUT; close STDERR; |
| open (STDIN, "</dev/null"); |
| open (STDOUT, ">/dev/null"); |
| open (STDERR, ">/dev/null"); |
| exec $path @args; |
| exit 1; # shouldn't be here |
| } |
| # parent |
| waitpid ($pid, 0); $ret=$? >> 8; |
| |
| if ($ret != 0) { |
| $path = "undef"; |
| } else { |
| if ($entcmd ne "") { |
| # now try to run ent on the command |
| $mostargs=join(" ", splice(@args,1)); |
| print "Evaluating '$path $mostargs'\n"; |
| @ent = qx{$path $mostargs | $entcmd -b -t}; |
| @ent = grep(/^1,/, @ent); |
| ($null, $null, $rate) = split(/,/, $ent[0]); |
| $est = $rate / $entscale; # scale the estimate back |
| } |
| } |
| print OUT "\"$cmd\" $path $est\n"; |
| } |
| |
| close(IN); |