You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
72 lines
1.6 KiB
#!/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);
|
|
|