1#!/usr/bin/perl 2# 3# fixprogs - run through the list of entropy commands and 4# score out the losers 5# 6 7$entscale = 50; # divisor for optional entropy measurement 8 9sub usage { 10 return("Usage: $0 <command file>\n"); 11} 12 13if (($#ARGV == -1) || ($#ARGV>1)) { 14 die(&usage); 15} 16 17# 'undocumented' option - run ent (in second param) on the output 18if ($#ARGV==1) { 19 $entcmd=$ARGV[1] 20} else { 21 $entcmd = "" 22}; 23 24$infilename = $ARGV[0]; 25 26if (!open(IN, "<".$infilename)) { 27 die("Couldn't open input file"); 28} 29$outfilename=$infilename.".out"; 30if (!open(OUT, ">$outfilename")) { 31 die("Couldn't open output file $outfilename"); 32} 33@infile=<IN>; 34 35select(OUT); $|=1; select(STDOUT); 36 37foreach (@infile) { 38 if (/^\s*\#/ || /^\s*$/) { 39 print OUT; 40 next; 41 } 42 ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o; 43 @args = split(/ /, $cmd); 44 if (! ($pid = fork())) { 45 # child 46 close STDIN; close STDOUT; close STDERR; 47 open (STDIN, "</dev/null"); 48 open (STDOUT, ">/dev/null"); 49 open (STDERR, ">/dev/null"); 50 exec $path @args; 51 exit 1; # shouldn't be here 52 } 53 # parent 54 waitpid ($pid, 0); $ret=$? >> 8; 55 56 if ($ret != 0) { 57 $path = "undef"; 58 } else { 59 if ($entcmd ne "") { 60 # now try to run ent on the command 61 $mostargs=join(" ", splice(@args,1)); 62 print "Evaluating '$path $mostargs'\n"; 63 @ent = qx{$path $mostargs | $entcmd -b -t}; 64 @ent = grep(/^1,/, @ent); 65 ($null, $null, $rate) = split(/,/, $ent[0]); 66 $est = $rate / $entscale; # scale the estimate back 67 } 68 } 69 print OUT "\"$cmd\" $path $est\n"; 70} 71 72close(IN); 73