summaryrefslogtreecommitdiffstats
path: root/fixprogs
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2000-05-18 23:12:50 +1000
committerDamien Miller <djm@mindrot.org>2000-05-18 23:12:50 +1000
commit912d9752c29b8d39c59a164da26fccc28636f951 (patch)
tree171eebbcaa50b3677bbca7a6b1eb50a271697304 /fixprogs
parentcce494a4c881c2964429e398a4da5c7c964b0f2a (diff)
Doh - forgot to import fixprogs
Diffstat (limited to 'fixprogs')
-rwxr-xr-xfixprogs72
1 files changed, 72 insertions, 0 deletions
diff --git a/fixprogs b/fixprogs
new file mode 100755
index 00000000..4a70d2f9
--- /dev/null
+++ b/fixprogs
@@ -0,0 +1,72 @@
+#!/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);