]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
genserv.pl: detect `openssl` in `PATH`, omit `command -v`
authorViktor Szakats <commit@vsz.me>
Sat, 29 Mar 2025 13:43:10 +0000 (14:43 +0100)
committerViktor Szakats <commit@vsz.me>
Sun, 30 Mar 2025 21:36:18 +0000 (23:36 +0200)
Before this patch the script relied on Perl `system()` finding `openssl`
in `PATH`, plus tried to display the full path of `openssl` by using
`command -v` (or `which` on Windows). `command -v` did not work in CI
for unknown reasons. To resolve it, this patch detects `openssl` in
`PATH` manually, displays the detected full path and calls `openssl`
with the detected full path, and stops relying on `system` for this.

It also follows how `sshhelp.pm` is detecting executables. Though this
patch uses Perl `-f` instead of `-e && -d` used there .

Silencing this in CI logs:
```
Can't exec "command": No such file or directory at ../../../tests/certs/genserv.pl line 51.
```
Ref: https://github.com/curl/curl/actions/runs/14145795884/job/39632942668?pr=16865#step:39:108

Closes #16868

tests/certs/genserv.pl

index 092848988c5a404f52f31ff785ef9917448511bf..5475ee96a9bf488319382cf9c62982d28379b7bf 100755 (executable)
@@ -27,6 +27,7 @@ use strict;
 use warnings;
 
 use File::Basename;
+use File::Spec;
 
 my $OPENSSL = 'openssl';
 if(-f '/usr/local/ssl/bin/openssl') {
@@ -48,7 +49,18 @@ if(!$CAPREFIX) {
 } elsif(! -f "$CAPREFIX-ca.cacert" ||
         ! -f "$CAPREFIX-ca.key") {
 
-    system($^O eq 'MSWin32' ? 'which' : 'command -v' ." $OPENSSL");
+    if($OPENSSL eq basename($OPENSSL)) {  # has no dir component
+        # find openssl in PATH
+        foreach(File::Spec->path()) {
+            my $file = File::Spec->catfile($_, $OPENSSL);
+            if(-f $file) {
+                $OPENSSL = $file;
+                last;
+            }
+        }
+    }
+
+    print "$OPENSSL\n";
     system("$OPENSSL version");
 
     $PREFIX = $CAPREFIX;