Stefan: Perl-Skript mit "fork" funktioniert nicht als CGI

Beitrag lesen

Hallo Alexander, hier nun die vorläufigen Ergebnisse.

Das Skript sieht jetzt so aus:
------------------------------------------------------
#!/usr/bin/perl -w -T
use strict; # strict und -T: Eingebaut auf Alexanders Rat
use CGI::Carp qw(fatalsToBrowser);
use POSIX;
print "Content-type: text/html\n\n";
print "ENV_PATH: $ENV{'PATH'}<br>"; # Eingebaut auf Alexanders Rat

print qq~
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<tt>~;
my @returnvalue=();
$|=1;
pipe READFD,WRITEFD;
my $oh= select(WRITEFD); select($oh);
my $Kind_pid = fork();

die "Nicht geforkt: $!\n" unless defined $Kind_pid; # Eingebaut auf Alexanders Rat

if($Kind_pid) {
use POSIX ":sys_wait_h";
my $waitcount=1;
do {
my $Kind_pid = waitpid(-1,&WNOHANG);
#Wartenachricht hier
print " ...".$waitcount;
$waitcount++;
sleep 2;
} until $Kind_pid == -1;
close(WRITEFD);
@returnvalue=<READFD>;
}
else {
my $cvs='';
sleep 10;
my @cvscan=/bin/echo "foobar";
close(READFD);
foreach $cvs (@cvscan){
#print $cvs."<br>\n";
print WRITEFD $cvs;
}
close STDOUT;
exit(0);
}

#Weitere Verarbeitung hier
print "\nAusgabe hier\n";
print @returnvalue;
print qq~
</tt>
</BODY>
</HTML>~;

Wenn ich es jetzt an der Kommandozeile aufrufe, sieht es nach einer Verschlimmbesserung aus, denn es terminiert nun auch dort wieder nicht:
------------------------------------------------------
perl -T /var/www/cgi-bin/test.pl
Content-type: text/html

ENV_PATH: /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/games<br>
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<tt> ...1 ...2 ...3 ...4 ...5 ...6<h1>Software error:</h1>
<pre>Insecure $ENV{PATH} while running with -T switch at /var/www/cgi-bin/test.pl line 38.
</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message
and the time and date of the error.

</p>
[Thu Jul 12 16:26:33 2007] test.pl: Insecure $ENV{PATH} while running with -T switch at /var/www/cgi-bin/test.pl line 38.
...7 ...8 ...9 ...10 ...11 ...12 ...13
------------------------------------------------------
Aber Du kannst mir sicherlich sagen, was ich gegen diese Fehlermeldung konkret unternehmen muss? Ich hatte die Hoffnung, es würde reichen, den absoluten Pfad zur ausführbaren Datei anzugeben, aber scheinbar mag er da was anderes nicht.

Hier noch die Ausgabe beim Start via Webserver, wo er ebenfalls nicht terminiert:
------------------------------------------------------
ENV_PATH: /usr/local/bin:/bin:/usr/bin:/usr/lib/cgi-bin<br>
<HTML>
<HEAD><TITLE>Test</TITLE></HEAD>
<BODY>
<tt> ...1 ...2 ...3 ...4 ...5<h1>Software error:</h1>

<pre>Insecure $ENV{PATH} while running with -T switch at test.pl line 38.
</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message
and the time and date of the error.

</p>
...6[Thu Jul 12 16:29:25 2007] test.pl: Insecure $ENV{PATH} while running with -T switch at test.pl line 38.
...7 ...8 ...9 ...10 ...11 ...12 ...13
------------------------------------------------------

Bin auf die nächsten Lösungsansätze gespannt...

Gruß Stefan