summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2006-10-21 16:28:03 +0000
committerAndy Polyakov <appro@openssl.org>2006-10-21 16:28:03 +0000
commitd8cdd1567f36105f365714673166000f798c9709 (patch)
tree080572f97a721f3245a6ff5d3ca227d9978089e4 /tools
parentcbfb39d1be669aefe4c2dc3b3256f71fd0bd1266 (diff)
downloadopenssl-new-d8cdd1567f36105f365714673166000f798c9709.tar.gz
Make c_rehash more platform neutral and make it work in mixed environment,
such as MSYS with "native" Win32 perl.
Diffstat (limited to 'tools')
-rw-r--r--tools/c_rehash.in22
1 files changed, 17 insertions, 5 deletions
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 <IN>; # does the job for small text files
+ close OUT;
+ close IN;
}
$hashlist{$hash} = $fprint;
}