Index: openssl/tools/c_rehash.in |
=================================================================== |
--- openssl/tools/c_rehash.in (revision 105093) |
+++ openssl/tools/c_rehash.in (working copy) |
@@ -16,13 +16,23 @@ |
$ENV{OPENSSL} = $openssl; |
} |
-$ENV{PATH} .= ":$dir/bin"; |
+my $pwd; |
+eval "require Cwd"; |
+if (defined(&Cwd::getcwd)) { |
+ $pwd=Cwd::getcwd(); |
+} else { |
+ $pwd=`pwd`; chomp($pwd); |
+} |
+my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':'; # DOS/Win32 or Unix delimiter? |
+$ENV{PATH} = "$prefix/bin" . ($ENV{PATH} ? $path_delim . $ENV{PATH} : ""); # prefix our path |
+ |
if(! -x $openssl) { |
my $found = 0; |
- foreach (split /:/, $ENV{PATH}) { |
+ foreach (split /$path_delim/, $ENV{PATH}) { |
if(-x "$_/$openssl") { |
$found = 1; |
+ $openssl = "$_/$openssl"; |
last; |
} |
} |
@@ -35,11 +45,16 @@ |
if(@ARGV) { |
@dirlist = @ARGV; |
} elsif($ENV{SSL_CERT_DIR}) { |
- @dirlist = split /:/, $ENV{SSL_CERT_DIR}; |
+ @dirlist = split /$path_delim/, $ENV{SSL_CERT_DIR}; |
} else { |
$dirlist[0] = "$dir/certs"; |
} |
+if (-d $dirlist[0]) { |
+ chdir $dirlist[0]; |
+ $openssl="$pwd/$openssl" if (!-x $openssl); |
+ chdir $pwd; |
+} |
foreach (@dirlist) { |
if(-d $_ and -w $_) { |
@@ -102,7 +117,7 @@ |
sub link_hash_cert { |
my $fname = $_[0]; |
$fname =~ s/'/'\\''/g; |
- my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in '$fname'`; |
+ my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in "$fname"`; |
chomp $hash; |
chomp $fprint; |
$fprint =~ s/^.*=//; |
@@ -123,7 +138,11 @@ |
if ($symlink_exists) { |
symlink $fname, $hash; |
} else { |
- system ("cp", $fname, $hash); |
+ open IN,"<$fname" or die "can't open $fname for read"; |
+ open OUT,">$hash" or die "can't open $hash for write"; |
+ print OUT <IN>; # does the job for small text files |
+ close OUT; |
+ close IN; |
} |
$hashlist{$hash} = $fprint; |
} |