mirror of
git://anongit.mindrot.org/openssh.git
synced 2024-11-26 03:54:12 +08:00
73 lines
1.6 KiB
Perl
Executable File
73 lines
1.6 KiB
Perl
Executable File
#!/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);
|