#! /usr/bin/perl # # cgi interface to view.sh # script to be run, in the chroot environment # $prog="/vecr/bin/view.sh"; # Make output unbuffered # $| = 1; # GET # if ($ENV{REQUEST_METHOD} eq "GET") { @a = ("GET", @ARGV); exec("$prog", @a); exit; } # else POST # $buffer = ""; read(STDIN, $buffer, $ENV{CONTENT_LENGTH}); # handle upload separately # if( $ENV{CONTENT_TYPE} =~ /^multipart\/form-data;/) { open( EDIT,"| $prog POST"); print EDIT "upload @ARGV\n"; $buffer =~ s/\r//g; print EDIT "$buffer\n"; close( EDIT); exit; # debug: # # print "Content-type: text/plain\n\n"; # print "argc = $#ARGV, argv = @ARGV\n\n"; # while (($key,$value) = each %ENV) { # print "$key = $value\n"; # } # print "\nstdin is:\n\n$buffer\n"; # exit; } # Split the name-value pairs # @pairs = split(/&/, $buffer); $data=""; $args=""; $mode="run"; foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if( $name eq "data") { $data .= $value; } elsif( $name eq "args") { $args .= $value; } elsif( $name eq "update") { $mode = "update"; } elsif( $name eq "compile") { $mode = "compile"; } elsif( $name eq "copy") { $mode = "copy"; } elsif( $name eq "crun") { $mode = "crun"; } elsif( $name eq "plot.x") # image input link returns .x and .y values { $mode = "plot"; } elsif( $name eq "splot.x") { $mode = "splot"; } elsif( $name eq "debug") { $mode = "debug"; } elsif( $name eq "input") { $mode = "input"; } elsif( $name eq "cmd") { $mode = "cmd"; } elsif( $name eq "setuser") { $mode = "setuser"; } elsif( $name eq "IO") { $mode = "IO"; } elsif( $name eq "IOD") { $mode = "IOD"; } elsif( $name eq "wav.x") # image input link returns .x and .y values { $mode = "wav"; } elsif( $name eq "image.x") { $mode = "image"; } elsif( $name eq "frameset") { $mode = "frameset"; } elsif( $name eq "empty") { $mode = "empty"; } elsif( $name eq "passwd") { $mode = "passwd"; } elsif( $name eq "color") { $ENV{'color'} = $value; } } open( EDIT,"| $prog POST"); print EDIT "$mode @ARGV $args\n"; if( $data ne "") { print EDIT "$data\n"; } close( EDIT); exit;