]> granicus.if.org Git - curl/commitdiff
secureserver.pl: added full support for tstunnel on Windows
authorMarc Hoersken <info@marc-hoersken.de>
Sun, 12 Jan 2014 23:09:46 +0000 (00:09 +0100)
committerMarc Hoersken <info@marc-hoersken.de>
Sun, 12 Jan 2014 23:09:46 +0000 (00:09 +0100)
tstunnel on Windows does not support the pid option and is unable
to write to an output log that is already being used as a redirection
target for stdout. Therefore it does now output all log data to stdout
by default and secureserver.pl creates a fake pidfile on Windows.

tests/secureserver.pl

index bb44522693bd293934e73744facacbaf3e65db73..37a39571065ba723473a991d8e49a9ece7db940f 100755 (executable)
@@ -248,19 +248,21 @@ if($stunnel_version >= 400) {
     $SIG{TERM} = \&exit_signal_handler;
     # stunnel configuration file
     if(open(STUNCONF, ">$conffile")) {
-       print STUNCONF "
-       CApath = $path
-       cert = $certfile
-       pid = $pidfile
-       debug = $loglevel
-       output = $logfile
-       socket = $socketopt
-       foreground = yes
-       
-       [curltest]
-       accept = $accept_port
-       connect = $target_port
-       ";
+        print STUNCONF "
+            CApath = $path
+            cert = $certfile
+            debug = $loglevel
+            output = /dev/stdout
+            socket = $socketopt";
+        if($stunnel !~ /tstunnel(\.exe)?"?$/) {
+            print STUNCONF "
+            pid = $pidfile
+            foreground = yes";
+        }
+        print STUNCONF "
+            [curltest]
+            accept = $accept_port
+            connect = $target_port";
         if(!close(STUNCONF)) {
             print "$ssltext Error closing file $conffile\n";
             exit 1;
@@ -292,6 +294,25 @@ if($stunnel_version >= 400) {
 #
 chmod(0600, $certfile) if(-f $certfile);
 
+#***************************************************************************
+# Run tstunnel on Windows.
+#
+if($stunnel =~ /tstunnel(\.exe)?"?$/) {
+    # Fake pidfile for tstunnel on Windows.
+    if(open(OUT, ">$pidfile")) {
+        print OUT $$ . "\n";
+        close(OUT);
+    }
+
+    # Put an "exec" in front of the command so that the child process
+    # keeps this child's process ID.
+    exec("exec $cmd") || die "Can't exec() $cmd: $!";
+
+    # exec() should never return back here to this process. We protect
+    # ourselves by calling die() just in case something goes really bad.
+    die "error: exec() has returned";
+}
+
 #***************************************************************************
 # Run stunnel.
 #