From: Andy Polyakov Date: Sat, 21 Oct 2006 16:28:03 +0000 (+0000) Subject: Make c_rehash more platform neutral and make it work in mixed environment, X-Git-Tag: OpenSSL_0_9_8k^2~1097 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=d8cdd1567f36105f365714673166000f798c9709;p=oweals%2Fopenssl.git Make c_rehash more platform neutral and make it work in mixed environment, such as MSYS with "native" Win32 perl. --- diff --git a/Makefile.org b/Makefile.org index 805ab6f1c1..a32ed33ff3 100644 --- a/Makefile.org +++ b/Makefile.org @@ -388,6 +388,7 @@ rehash: rehash.time rehash.time: certs apps @if [ -z "$(CROSS_COMPILE_PREFIX)" ]; then \ (OPENSSL="`pwd`/util/opensslwrap.sh"; \ + [ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe"; \ OPENSSL_DEBUG_MEMORY=on; \ export OPENSSL OPENSSL_DEBUG_MEMORY; \ $(PERL) tools/c_rehash certs) && \ diff --git a/tools/c_rehash.in b/tools/c_rehash.in index 4497cbd9f1..ca3021ae8a 100644 --- a/tools/c_rehash.in +++ b/tools/c_rehash.in @@ -15,11 +15,14 @@ if(defined $ENV{OPENSSL}) { $ENV{OPENSSL} = $openssl; } -$ENV{PATH} .= ":$dir/bin"; +my $pwd = `pwd`; chomp $pwd; +my $path_delim = ($pwd =~ /^[a-z]\:/i) ? ';' : ':'; # DOS/Win32 or Unix delimiter? + +$ENV{PATH} .= "$path_delim$dir/bin"; if(! -x $openssl) { my $found = 0; - foreach (split /:/, $ENV{PATH}) { + foreach (split /$path_delim/, $ENV{PATH}) { if(-x "$_/$openssl") { $found = 1; last; @@ -34,11 +37,16 @@ if(! -x $openssl) { 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 $_) { @@ -101,7 +109,7 @@ sub check_file { 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/^.*=//; @@ -122,7 +130,11 @@ sub link_hash_cert { 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 ; # does the job for small text files + close OUT; + close IN; } $hashlist{$hash} = $fprint; }