I think that I have almost managed to get my first (proper) CGI script
to execute as intended, but it seems I still have one last hurdle to
jump. My Apache error.log provides me with the following single line:
[Fri Jul 22 16:34:37 2005] [error] [client 127.0.0.1] Access is
denied.\r, referer:
http://localhost/~neville.hodder/tests_c/upload_g.cgi
After too much time Googling and re-reading my manuals, I have a few
questions I hope someone can help me with:
1) Have I correctly Untainted my system() call and file permissions by
my modification of the $ENV{'PATH'}?
2) Has my modification of the $ENV{'PATH'} been to restrictive and
created a new "Access" problem?
2) Do I also need to enable one or all of "file/directory/execution"
access somewhere within my Apache httpd.conf settings?
Thanks for all and any advice
NJH
---------
#!c:/perl/bin/perl.exe -wT
use strict;
use diagnostics;
use CGI;
my $q = new CGI;
print $q->header,
$q->start_html(-title => "Nev's file Test", -bgcolor => "#EAEAAE"),
$q->h2("File selection:"),
$q->start_multipart_form,
$q->p("Please choose a board file to analyse"),
$q->filefield("pcb"),
$q->submit,
$q->end_form,
$q->hr,
"The board file you chose was: ", $q->param("pcb");
my $fh = $q->upload("pcb");
my $buffer = "";
use constant BUFFER_SIZE => 16_384;
open (OUTPUT, "> ..\\output\\temp.brd");
binmode $fh;
binmode OUTPUT;
while (read ($fh, $buffer, BUFFER_SIZE)){
print OUTPUT $buffer;
}
close OUTPUT;
$ENV{'PATH'} =
("\\\\Gb9\\cadence\\Cadence\\SPB_15.2\\tools\\pcb\\bin\\;\\\\gb9\\Cadenc
e\\Cadence\\Extracta\\;..\\output\\;C:\\WINDOWS\\system32");
delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
&dosomt();
print $q->end_html;
sub dosomt{
my $pcb = "..\\output\\temp.brd";
my $prog =
"\\\\Gb9\\cadence\\Cadence\\SPB_15.2\\tools\\pcb\\bin\\extracta.exe";
my $cmd = "\\\\gb9\\Cadence\\Cadence\\Extracta\\status_detail.cmd";
my $out = "..\\output\\extract_output.txt";
system($prog, $pcb, $cmd, $out);
}