--- loncom/cgi/plot.gif 2001/12/20 22:36:15 1.5 +++ loncom/cgi/plot.gif 2020/02/19 18:53:17 1.17 @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# $Id: plot.gif,v 1.5 2001/12/20 22:36:15 matthew Exp $ +# $Id: plot.gif,v 1.17 2020/02/19 18:53:17 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -24,27 +24,60 @@ # # http://www.lon-capa.org/ # - use strict; -my $output; + +$|=1; + my $tmpdir = '/home/httpd/perl/tmp/'; -my $filename = $tmpdir . $ENV{'QUERY_STRING'}; +my %data; +foreach (split/&/,$ENV{'QUERY_STRING'}) { + my ($name,$value)=split/=/; + $data{$name}=$value; +} +my $filename = $data{'file'}; +# unescape filename +$filename =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; +die if ($filename =~ /\// || $filename !~ /_plot.data$/); +$filename = $tmpdir . $filename; +die "$data{'file'} does not exist\n" if (! -e $filename); + +my $output = $data{'output'}; +if ($output eq '') { + $output = (split('\.',$0))[-1]; +} -$output =<<"END"; -Content-type: text/html +if ($output eq 'gif' || $output eq 'png') { + if (open(my $plot, "export LANG='en_US.UTF-8'; gnuplot $filename |")) { + print <<"END"; +Content-type: image/$output END + while (my $line = <$plot>) { + print($line); + } + close($plot); + } else { + die "failed to open pipe to run gnuplot\n"; + } -if (0) { -$output =<<"END"; -Content-type: image/gif +} elsif ($output eq 'eps') { + print <<"END"; +Content-type: text/html +