Pedro wrote:
>Hi all,   I am working on a cgi script that can create  a temporal file
>with either an uploaded file, or, in its absence,  the pasted content of
>tha

Well, I spent sometime to learn this upload example:
Here is the solution I came up with.
There were 2 problems as far as I could tell:
1. The $fh variable was set wrong
2. $in needed to be untainted (I just copied the generic perlsec
    untaint routine, so you may be able to make a better one)

#!/usr/sbin/perl -wT
use CGI;
use strict;
use Fcntl qw( :DEFAULT :flock);
#define file paths for file writes and genscan location


my $bin="/usr1/par/bin";
my $httproot = "/usr/freeware/apache/share/htdocs/MIF/icons/";
my $dir = "/tmp/"; #directory for writing files
my $gnuplot = "/usr/freeware/bin/gnuplot";
my $ppmtogif = "/usr/freeware/bin/ppmtogif";


my $q = new CGI;
print $q->header,  $q->start_html(-title=>"Variability
Results",-bgcolor=>"white");
print $q->h1("Variability Results");


my $in    = $q->param("name");
my $file  = $q->param("file");
##############################################
#my $fh    = $q->upload( $file ); #Error here
my $fh    = $file ;  #Should be this
##############################################

my $paste = $q->param("alignment");
my $i;
my $flen;

my $var = $^T;
$in =~ s/\s\t//g;
$in = $in.$var;
##################################################
# Here is my "shady" but working untaint mechanism
if ($in =~ /^([-\@\w.]+)$/){$in= $1;} 
###################################################
if (!$file) {
  open(INFILE, ">$dir/$in") || die "I cannot create $in!\n";
  flock(INFILE, 2);
  print INFILE "$paste";
  close (INFILE) || die "can't close $dir/$in!";
} else {
  open(UPLOAD,">$dir/$in") or die "Can't open outfile for writing: $!";
  $flen = 0;
  while (read($fh,$i,1024)) {
      print UPLOAD $i;
      $flen = $flen + 1024;
      if ($flen > 5120000) {
      close(UPLOAD);
      die "Error - file is too large. Save aborted.<p>";
      }
     }
close(UPLOAD);
}

$q->end_html;

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to