Commit d864d724 authored by Sergey Lyubka's avatar Sergey Lyubka

On windows, enclosing path to CGI script in quotes to allow paths with spaces

parent 7ca5962d
...@@ -1341,7 +1341,7 @@ static pid_t spawn_process(struct mg_connection *conn, const char *prog, ...@@ -1341,7 +1341,7 @@ static pid_t spawn_process(struct mg_connection *conn, const char *prog,
} }
GetFullPathNameA(dir, sizeof(full_dir), full_dir, NULL); GetFullPathNameA(dir, sizeof(full_dir), full_dir, NULL);
mg_snprintf(conn, cmdline, sizeof(cmdline), "%s%s%s\\%s", mg_snprintf(conn, cmdline, sizeof(cmdline), "%s%s\"%s\\%s\"",
interp, interp[0] == '\0' ? "" : " ", full_dir, prog); interp, interp[0] == '\0' ? "" : " ", full_dir, prog);
DEBUG_TRACE(("Running [%s]", cmdline)); DEBUG_TRACE(("Running [%s]", cmdline));
......
#!/usr/bin/env perl
print "Content-Type: text/plain\n\nhello\n";
...@@ -19,9 +19,10 @@ my $test_dir_uri = "test_dir"; ...@@ -19,9 +19,10 @@ my $test_dir_uri = "test_dir";
my $root = 'test'; my $root = 'test';
my $test_dir = $root . $dir_separator. $test_dir_uri; my $test_dir = $root . $dir_separator. $test_dir_uri;
my $config = 'mongoose.conf'; my $config = 'mongoose.conf';
my $exe = '.' . $dir_separator . 'mongoose'; my $exe_ext = on_windows() ? '.exe' : '';
my $embed_exe = '.' . $dir_separator . 'embed'; my $mongoose_exe = '.' . $dir_separator . 'mongoose' . $exe_ext;
my $unit_test_exe = '.' . $dir_separator . 'unit_test'; my $embed_exe = '.' . $dir_separator . 'embed' . $exe_ext;
my $unit_test_exe = '.' . $dir_separator . 'unit_test' . $exe_ext;
my $exit_code = 0; my $exit_code = 0;
my @files_to_delete = ('debug.log', 'access.log', $config, "$root/a/put.txt", my @files_to_delete = ('debug.log', 'access.log', $config, "$root/a/put.txt",
...@@ -51,9 +52,9 @@ sub get_num_of_log_entries { ...@@ -51,9 +52,9 @@ sub get_num_of_log_entries {
# Send the request to the 127.0.0.1:$port and return the reply # Send the request to the 127.0.0.1:$port and return the reply
sub req { sub req {
my ($request, $inc, $timeout) = @_; my ($request, $inc, $timeout) = @_;
my $sock = IO::Socket::INET->new(Proto=>"tcp", my $sock = IO::Socket::INET->new(Proto => 6,
PeerAddr=>'127.0.0.1', PeerPort=>$port); PeerAddr => '127.0.0.1', PeerPort => $port);
fail("Cannot connect: $!") unless $sock; fail("Cannot connect to http://127.0.0.1:$port : $!") unless $sock;
$sock->autoflush(1); $sock->autoflush(1);
foreach my $byte (split //, $request) { foreach my $byte (split //, $request) {
last unless print $sock $byte; last unless print $sock $byte;
...@@ -97,7 +98,6 @@ sub spawn { ...@@ -97,7 +98,6 @@ sub spawn {
if (on_windows()) { if (on_windows()) {
my @args = split /\s+/, $cmdline; my @args = split /\s+/, $cmdline;
my $executable = $args[0]; my $executable = $args[0];
$executable .= '.exe';
Win32::Spawn($executable, $cmdline, $pid); Win32::Spawn($executable, $cmdline, $pid);
die "Cannot spawn @_: $!" unless $pid; die "Cannot spawn @_: $!" unless $pid;
} else { } else {
...@@ -155,13 +155,13 @@ if (scalar(@ARGV) > 0 and $ARGV[0] eq 'unit') { ...@@ -155,13 +155,13 @@ if (scalar(@ARGV) > 0 and $ARGV[0] eq 'unit') {
# Command line options override config files settings # Command line options override config files settings
write_file($config, "access_log_file access.log\n" . write_file($config, "access_log_file access.log\n" .
"listening_ports 127.0.0.1:12345\n"); "listening_ports 127.0.0.1:12345\n");
spawn("$exe -listening_ports 127.0.0.1:$port"); spawn("$mongoose_exe -listening_ports 127.0.0.1:$port");
o("GET /test/hello.txt HTTP/1.0\n\n", 'HTTP/1.1 200 OK', 'Loading config file'); o("GET /test/hello.txt HTTP/1.0\n\n", 'HTTP/1.1 200 OK', 'Loading config file');
unlink $config; unlink $config;
kill_spawned_child(); kill_spawned_child();
# Spawn the server on port $port # Spawn the server on port $port
my $cmd = "$exe ". my $cmd = "$mongoose_exe ".
"-listening_ports 127.0.0.1:$port ". "-listening_ports 127.0.0.1:$port ".
"-access_log_file access.log ". "-access_log_file access.log ".
"-error_log_file debug.log ". "-error_log_file debug.log ".
...@@ -352,6 +352,8 @@ unless (scalar(@ARGV) > 0 and $ARGV[0] eq "basic_tests") { ...@@ -352,6 +352,8 @@ unless (scalar(@ARGV) > 0 and $ARGV[0] eq "basic_tests") {
unlink "$root/.htpasswd"; unlink "$root/.htpasswd";
o("GET /dir%20with%20spaces/hello.cgi HTTP/1.0\n\r\n",
'HTTP/1.1 200 OK.+hello', 'CGI script with spaces in path');
o("GET /env.cgi HTTP/1.0\n\r\n", 'HTTP/1.1 200 OK', 'GET CGI file'); o("GET /env.cgi HTTP/1.0\n\r\n", 'HTTP/1.1 200 OK', 'GET CGI file');
o("GET /bad2.cgi HTTP/1.0\n\n", "HTTP/1.1 123 Please pass me to the client\r", o("GET /bad2.cgi HTTP/1.0\n\n", "HTTP/1.1 123 Please pass me to the client\r",
'CGI Status code text'); 'CGI Status code text');
...@@ -410,9 +412,9 @@ unless (scalar(@ARGV) > 0 and $ARGV[0] eq "basic_tests") { ...@@ -410,9 +412,9 @@ unless (scalar(@ARGV) > 0 and $ARGV[0] eq "basic_tests") {
# Manipulate the passwords file # Manipulate the passwords file
my $path = 'test_htpasswd'; my $path = 'test_htpasswd';
unlink $path; unlink $path;
system("$exe -A $path a b c") == 0 system("$mongoose_exe -A $path a b c") == 0
or fail("Cannot add user in a passwd file"); or fail("Cannot add user in a passwd file");
system("$exe -A $path a b c2") == 0 system("$mongoose_exe -A $path a b c2") == 0
or fail("Cannot edit user in a passwd file"); or fail("Cannot edit user in a passwd file");
my $content = read_file($path); my $content = read_file($path);
$content =~ /^b:a:\w+$/gs or fail("Bad content of the passwd file"); $content =~ /^b:a:\w+$/gs or fail("Bad content of the passwd file");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment