X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=tools%2Fc_rehash.in;h=96a73aeedd835c220d41053322770e8ec2b05b3f;hp=baec7c14ff4308a3062996597f0c27a1dbef54d0;hb=a2688c872ded9cd210bb721ab6bbf5e7cc745049;hpb=439df5087f012e65b80c13ade8953778cc0b4704;ds=inline diff --git a/tools/c_rehash.in b/tools/c_rehash.in index baec7c14ff..96a73aeedd 100644 --- a/tools/c_rehash.in +++ b/tools/c_rehash.in @@ -15,12 +15,21 @@ if(defined $ENV{OPENSSL}) { $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} .= "$path_delim$dir/bin"; -if(! -f $openssl) { +if(! -x $openssl) { my $found = 0; - foreach (split /:/, $ENV{PATH}) { - if(-f "$_/$openssl") { + foreach (split /$path_delim/, $ENV{PATH}) { + if(-x "$_/$openssl") { $found = 1; last; } @@ -34,11 +43,16 @@ if(! -f $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 $_) { @@ -100,7 +114,8 @@ sub check_file { sub link_hash_cert { my $fname = $_[0]; - my ($hash, $fprint) = `$openssl x509 -hash -fingerprint -noout -in $fname`; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" x509 -hash -fingerprint -noout -in "$fname"`; chomp $hash; chomp $fprint; $fprint =~ s/^.*=//; @@ -117,7 +132,16 @@ sub link_hash_cert { } $hash .= ".$suffix"; print "$fname => $hash\n"; - symlink $fname, $hash; + $symlink_exists=eval {symlink("",""); 1}; + if ($symlink_exists) { + symlink $fname, $hash; + } else { + 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; } @@ -125,7 +149,8 @@ sub link_hash_cert { sub link_hash_crl { my $fname = $_[0]; - my ($hash, $fprint) = `$openssl crl -hash -fingerprint -noout -in $fname`; + $fname =~ s/'/'\\''/g; + my ($hash, $fprint) = `"$openssl" crl -hash -fingerprint -noout -in '$fname'`; chomp $hash; chomp $fprint; $fprint =~ s/^.*=//; @@ -142,7 +167,12 @@ sub link_hash_crl { } $hash .= ".r$suffix"; print "$fname => $hash\n"; - symlink $fname, $hash; + $symlink_exists=eval {symlink("",""); 1}; + if ($symlink_exists) { + symlink $fname, $hash; + } else { + system ("cp", $fname, $hash); + } $hashlist{$hash} = $fprint; }