#!/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);