Debian 3.0r1 Apache 1.3.26 cgi-bin behavior depends on script name and browser (?)
debian-user@lists.debian.org:
I am getting ready to study "MySQL and Perl for the Web" [Paul DuBois,
2002] and I have come across some baffling behavior with CGI scripts on
Apache 1.3.26 on Debian 3.0r1 -- sometimes Apache executes the scripts
as expected, other times it tries to download them or generates an
error. The behavior seems to depend on the script name, not the
content. The gory details follow.
Following the directions on:
http://httpd.apache.org/docs/howto/cgi.html#cgioutsideofscriptaliasdirectories
I have added the following lines to the main Apache configuration file:
root@d3020g:~/d3020g/etc/apache:CVS> cvs -q diff httpd.conf
Index: httpd.conf
===================================================================
RCS file: /cvs/dpchrist/d3020g/etc/apache/httpd.conf,v
retrieving revision 1.1
diff -r1.1 httpd.conf
378a379,382
> <Directory /home/dpchrist/public_html/cgi-bin>
> Options ExecCGI
> </Directory>
>
780a785
> AddHandler cgi-script pl
I loaded the configuration:
root@d3020g:~/d3020g/etc/apache:CVS> cp httpd.conf /etc/apache/.
cp: overwrite `/etc/apache/./httpd.conf'? y
root@d3020g:~/d3020g/etc/apache:CVS> apachectl configtest
[Mon Sep 29 22:57:33 2003] [warn] module config_log_module is
already loaded, skipping
[Mon Sep 29 22:57:33 2003] [warn] module mime_module is already
loaded, skipping
[Mon Sep 29 22:57:33 2003] [alert] apache: Could not determine the
server's fully qualified domain name, using 192.168.254.2 for ServerName
Syntax OK
root@d3020g:~/d3020g/etc/apache:CVS> apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted
I then put Perl CGI scripts into /home/dpchrist/public_html/cgi-bin and
attempted to access them via the URL
http://192.168.254.2/~dpchrist/cgi-bin/*. Some scripts are executed
while others do various naughty
things. Here are some scripts that execute as expected in Mozilla 1.4
and Internet Explorer 6.0.2800.1106:
1. dpchrist@d3020g:~/public_html/cgi-bin:CVS> cat foo.pl
#! /usr/bin/perl
print "Content-type: text/html\r\n\r\n";
print "Hello, World.";
2. dpchrist@d3020g:~/public_html/cgi-bin:CVS> cat intro4.pl
#!/usr/bin/perl -w
use strict;
use CGI;
my $cgi = new CGI;
print $cgi->header(),
$cgi->start_html("My Page Title"),
$cgi->p("My page body"),
$cgi->end_html(),
"\n";
exit(0);
3. dpchrist@d3020g:~/public_html/cgi-bin:CVS> cat intro5.pl
#!/usr/bin/perl -w
use strict;
use CGI qw( :standard );
print header(),
start_html("My Page Titel"),
p("My page body"),
end_html(),
"\n";
exit(0);
And here is one that Mozilla attempts to download, while IE says "The
page cannot be found":
dpchrist@d3020g:~/public_html/cgi-bin:CVS> cat intro3.pl
#!/usr/bin/perl -w
use strict;
print "Content-Type: text/html\n\n";
print <<END;
<html>
<head><title>My Page Title</title></head>
<body><p>My page body</p></body>
</html>
END
exit(0);
The really weird part is that if I rename a "bad" script to a "good"
name, it then executes!
dpchrist@d3020g:~/public_html/cgi-bin:CVS> mv intro3.pl bar.pl
Here are the Apache logs:
root@d3020g:/var/log/apache# tail -n 4 access.log
192.168.1.10 - - [29/Sep/2003:23:01:55 -0700] "GET
/~dpchrist/cgi-bin/foo.pl HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows; U;
Windows NT 5.0; en-US; rv:1.4) Gecko/20030624"
192.168.1.10 - - [29/Sep/2003:23:02:07 -0700] "GET
/~dpchrist/cgi-bin/intro4.pl HTTP/1.1" 200 301 "-" "Mozilla/5.0
(Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624"
192.168.1.10 - - [29/Sep/2003:23:02:15 -0700] "GET
/~dpchrist/cgi-bin/intro5.pl HTTP/1.1" 200 301 "-" "Mozilla/5.0
(Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624"
192.168.1.10 - - [29/Sep/2003:23:02:38 -0700] "GET
/~dpchrist/cgi-bin/bar.pl HTTP/1.1" 200 102 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624"
root@d3020g:/var/log/apache# tail -n 8 error.log
[Mon Sep 29 22:57:58 2003] [notice] SIGUSR1 received. Doing
graceful restart
[Mon Sep 29 22:57:58 2003] [warn] module config_log_module is
already loaded, skipping
[Mon Sep 29 22:57:58 2003] [warn] module mime_module is already
loaded, skipping
[Mon Sep 29 22:57:58 2003] [alert] apache: Could not determine the
server's fully qualified domain name, using 192.168.254.2 for ServerName
[Mon Sep 29 22:57:59 2003] [error] (2)No such file or directory:
mod_mime_magic: can't read magic file /etc/apache/share/magic
[Mon Sep 29 22:57:59 2003] [notice] Apache/1.3.26 (Unix) Debian
GNU/Linux configured -- resuming normal operations
[Mon Sep 29 22:57:59 2003] [notice] suEXEC mechanism enabled
(wrapper: /usr/lib/apache/suexec)
[Mon Sep 29 22:57:59 2003] [notice] Accept mutex: sysvsem (Default:
sysvsem)
root@d3020g:/var/log/apache# tail -n 4 suexec.log
[2003-09-29 23:01:55]: info: (target/actual) uid:
(dpchrist/dpchrist) gid: (dpchrist/dpchrist) cmd: foo.pl
[2003-09-29 23:02:06]: info: (target/actual) uid:
(dpchrist/dpchrist) gid: (dpchrist/dpchrist) cmd: intro4.pl
[2003-09-29 23:02:15]: info: (target/actual) uid:
(dpchrist/dpchrist) gid: (dpchrist/dpchrist) cmd: intro5.pl
[2003-09-29 23:02:38]: info: (target/actual) uid:
(dpchrist/dpchrist) gid: (dpchrist/dpchrist) cmd: bar.pl
Here is the script directory:
dpchrist@d3020g:~/public_html/cgi-bin:CVS> ls -al
total 36
drwxr-xr-x 3 dpchrist dpchrist 4096 Sep 29 23:04 .
drwxr-xr-x 4 dpchrist dpchrist 4096 Sep 28 21:41 ..
drwxr-xr-x 2 dpchrist dpchrist 4096 Sep 29 23:04 CVS
-rwxr-xr-x 1 dpchrist dpchrist 186 Sep 29 22:42 bar.pl
-rwxr-xr-x 1 dpchrist dpchrist 81 Sep 29 17:46 foo.pl
-rwxr-xr-x 1 dpchrist dpchrist 186 Sep 29 23:04 intro3.pl
-rwxr-xr-x 1 dpchrist dpchrist 193 Sep 29 22:42 intro4.pl
-rwxr-xr-x 1 dpchrist dpchrist 166 Sep 29 22:42 intro5.pl
-rwxr-xr-x 1 dpchrist dpchrist 747 Sep 29 22:42 intro7.pl
Any ideas?
TIA,
David
Reply to: