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 9 sub usage { 10 return("Usage: $0 <command file>\n"); 11 } 12 13 if (($#ARGV == -1) || ($#ARGV>1)) { 14 die(&usage); 15 } 16 17 # 'undocumented' option - run ent (in second param) on the output 18 if ($#ARGV==1) { 19 $entcmd=$ARGV[1] 20 } else { 21 $entcmd = "" 22 }; 23 24 $infilename = $ARGV[0]; 25 26 if (!open(IN, "<".$infilename)) { 27 die("Couldn't open input file"); 28 } 29 $outfilename=$infilename.".out"; 30 if (!open(OUT, ">$outfilename")) { 31 die("Couldn't open output file $outfilename"); 32 } 33 @infile=<IN>; 34 35 select(OUT); $|=1; select(STDOUT); 36 37 foreach (@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 72 close(IN); 73