PR: 2434
authorRichard Levitte <levitte@openssl.org>
Thu, 20 Jan 2011 22:12:50 +0000 (22:12 +0000)
committerRichard Levitte <levitte@openssl.org>
Thu, 20 Jan 2011 22:12:50 +0000 (22:12 +0000)
Under Windows, there seems to be a problem relinking fips_premain_dso
because that file is locked.  Changing from backtick op to using
system() with redirection and reading the hash from the output file
seems to fix the problem.

In an ideal world, there should be no difference, as a command in a
backtick op should terminate before the backtick returns, same as it
does with system().  We suspect, though, that the loaded binary is
cached by Windows for a little while, and that reading the output from
a file provides enough delay for the lock to drop before we try to
relink.

util/fipslink.pl

index 3597bc1740ae23d1ad11daaba635f0c824f06006..8b6fbad7d851faef67b1abbf328027c6a0b69e09 100644 (file)
@@ -43,7 +43,12 @@ die "First stage Link failure" if $? != 0;
 
 
 print "$fips_premain_dso $fips_target\n";
-$fips_hash=`$fips_premain_dso $fips_target`;
+system("$fips_premain_dso $fips_target >$fips_target.sha1");
+die "Get hash failure" if $? != 0;
+open my $sha1_res, '<', $fips_target.".sha1" or die "Get hash failure";
+$fips_hash=<$sha1_res>;
+close $sha1_res;
+unlink $fips_target.".sha1";
 chomp $fips_hash;
 die "Get hash failure" if $? != 0;