--- loncom/cgi/decompress.pl 2003/12/13 00:20:47 1.11 +++ loncom/cgi/decompress.pl 2008/11/28 20:42:20 1.17 @@ -31,69 +31,73 @@ #### use strict; use lib '/home/httpd/lib/perl'; -use LONCAPA::loncgi (); -if(! &LONCAPA::loncgi::check_cookie_and_load_env()) { - print "Content-type: text/html\n\n"; - print <NO COOKIE! -END +use Apache::lonnet; +use Apache::lonlocal; +use LONCAPA::loncgi; + +my %location_of; +foreach my $program ('tar','gunzip','bunzip2','unzip') { + foreach my $dir ('/bin/','/usr/bin/','/usr/local/bin/','/sbin/', + '/usr/sbin/') { + if (-x $dir.$program) { + $location_of{$program} = $dir.$program; + } + } +} + +print("Content-type: text/html\n\n"); + +if (!&LONCAPA::loncgi::check_cookie_and_load_env()) { + &Apache::lonlocal::get_language_handle(); + print(&LONCAPA::loncgi::missing_cookie_msg()); } else { - print "Content-type: text/html\n\n"; - if(! $ENV{'cgi.file'} || ! $ENV{'cgi.dir'}) { - print <Bad Enviroment! + &Apache::lonlocal::get_language_handle(); + my %lt = &Apache::lonlocal::texthash ( + bade => 'Bad Environment!', + outo => 'Output of decompress:', + comp => 'Decompress complete.', + erro => 'An error occurred', + ); + my $file=$Apache::lonnet::env{'cgi.file'}; + my $dir=$Apache::lonnet::env{'cgi.dir'}; + if(! $file || ! $dir) { + print(<$lt{'bade'} END } else { - print <Output of decompress:

+ print(<

$lt{'outo'}

END - chdir $ENV{'cgi.dir'}; - if ($ENV{'cgi.file'} =~ m|\.zip$|i) { - open(OUTPUT, "unzip -o $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.tar\.gz$|i) { - open(OUTPUT, "tar -zxpvf $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.tar\.bz2$|i) { - open(OUTPUT, "tar -jxpvf $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.bz2$|i) { - open(OUTPUT, "bunzip2 $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.tgz$|i) { - open(OUTPUT, "tar -zxpvf $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.gz$|i) { - open(OUTPUT, "gunzip $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); - } elsif ($ENV{'cgi.file'} =~ m|\.tar$|i) { - open(OUTPUT, "tar -xpvf $ENV{'cgi.file'} 2> /dev/null |"); - while () { - print "$_
"; - } - close(OUTPUT); + chdir($dir); + my @cmd; + if ($file =~ m|\.zip$|) { + @cmd = ($location_of{'unzip'},"-o"); + } elsif ($file =~ m|\.tar\.gz$| + || $file =~ m|\.tgz$| ) { + @cmd = ($location_of{'tar'},"-zxpvf"); + } elsif ($file =~ m|\.tar\.bz2$|) { + @cmd = ($location_of{'tar'},"-jxpvf"); + } elsif ($file =~ m|\.bz2$|) { + @cmd = ($location_of{'bunzip2'}); + } elsif ($file =~ m|\.gz$|) { + @cmd = ($location_of{'gunzip'}); + } elsif ($file =~ m|\.tar$|) { + @cmd = ($location_of{'tar'},"-xpvf"); } else { - print "There has been an error in determining the file type of $ENV{'cgi.file'}, please check name"; + print(''.&Apache::lonlocal::mt('There has been an error in determining the file type of [_1], please check the name',$file).''); } - print "
Decompress complete!
"; + if (@cmd) { + undef($!); + undef($@); + open(OUTPUT,"-|", @cmd, $file); + while (my $line = ) { print("$line
"); } + close(OUTPUT); + print("

$lt{'comp'}

"); + if ($! || $@) { + print('

'.$lt{'erro'}.'
'.$!.'
'.$@.'

'); + } + } + print(''); } } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.