Diff for /loncom/cgi/decompress.pl between versions 1.2 and 1.18

version 1.2, 2003/10/18 17:42:45 version 1.18, 2012/04/19 02:13:00
Line 1 Line 1
 #!/usr/bin/perl  #!/usr/bin/perl
 #  #
 #   # $Id$
   #
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
 # This file is part of the LearningOnline Network with CAPA (LON-CAPA).  # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
Line 26 Line 27
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 #  #
 # A CGI script that decompresses compressed files for mass uploading into  # A CGI script that decompresses compressed files for mass uploading into
 # construction space  # construction space or into a course.
 ####  ####
   use strict;
 use lib '/home/httpd/lib/perl';  use lib '/home/httpd/lib/perl';
 use LONCAPA::Configuration;  use Apache::lonnet;
 use LONCAPA::loncgi();  use Apache::lonlocal;
   use LONCAPA::loncgi;
   
 if(! &LONCAPA::loncgi::check_cookie_and_load_env()){  my %location_of;
  print "Content-type: text/html\n\n";  foreach my $program ('tar','gunzip','bunzip2','unzip') {
  print <<END;      foreach my $dir ('/bin/','/usr/bin/','/usr/local/bin/','/sbin/',
  NO COOKIE!       '/usr/sbin/') {
 END   if (-x $dir.$program) {
 }      $location_of{$program} = $dir.$program;
 else  
 {  
  $url = $ENV{'HTTP_REFERER'};  
  $url =~ m|/{2}|;  
  $url = $';  
  $url =~ m|/{1}|;  
  $referer = $`;  
  if($referer ne $ENV{'SERVER_NAME'})  
  { print "Content-type: text/html\n\n";  
  print "You are trying something that is not allowed, go to the real homeserver and try again";  
  }   }
  else      }
  {  }
  $url = $';  
  $url =~ m|$ENV{'user.name'}/{1}|;  print("Content-type: text/html\n\n");
  $url = $';  
  $url =~ m|\?{1}|;  if (!&LONCAPA::loncgi::check_cookie_and_load_env()) {
  $url = $`;      &Apache::lonlocal::get_language_handle();
  $path ="/home/$ENV{'user.name'}/public_html/";      print(&LONCAPA::loncgi::missing_cookie_msg());
  $back_path = "";  } else {
  while($url =~ m|/|)      &Apache::lonlocal::get_language_handle();
  {      my %lt = &Apache::lonlocal::texthash (
  $path .= $`;                                              bade => 'Invalid file or directory name',
  $back_path .= $`;                                              outo => 'Output of decompress:',
  $path .= "/";                                              comp => 'Decompress complete.', 
  $back_path .= "/";                                              erro => 'An error occurred.',
  $url = $';                                              extf => 'Extraction failed.',
  }                                           );
  chdir $path;      my $file=$Apache::lonnet::env{'cgi.file'};
  $filename=$url;      my $dir=$Apache::lonnet::env{'cgi.dir'};
  if($url =~ m|zip|){system "unzip -qq $filename &> /dev/null";}      if (!$file || !$dir) {
  elsif($url =~ m|tar.gz|){system "tar -zxpvf $filename &> /dev/null";}          print(<<END);
  elsif($url =~ m|tar.bz2|){system "tar -jxpvf $filename &> /dev/null";}          <html><body><span class="LC_error">$lt{'extf'} $lt{'bade'}</span></body></html>
  elsif($url =~ m|bz2|){system "bunzip2 $filename &> /dev/null";}  END
  elsif($url =~ m|tgz|){system "tar -zxpvf $filename &> /dev/null";}      } elsif (!-d $dir) {
  elsif($url =~ m|gz|){system "gunzip $filename &> /dev/null";}          print('<html><body><span class="LC_error">'.$lt{'extf'}.' '."\n".
  elsif($url =~ m|tar|){system "tar -xpvf $filename &> /dev/null";}                &Apache::lonlocal::mt('The specified directory "[_1]" is invalid.',$dir).
  }                '</span></body></html>');
       } else {
           my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
           my $lonuserroot = $Apache::lonnet::perlvar{'lonUsersDir'};
           if (($dir !~ /^\Qlondocroot\E/) && ($dir !~ /^\Q$lonuserroot\E/)) {
               print('<html><body><span class="LC_error">'.$lt{'extf'}.'<br />'."\n".
                     &Apache::lonlocal::mt('The specified directory "[_1]" is invalid',$dir).
                     '</span></body></html>');
           } elsif (chdir($dir)) {
               if (-e $file) {
                   print(<<END);
           <html><body><p><b>$lt{'outo'}</b></p>
   END
                   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");
                   }
           if (@cmd) {
               undef($!);
               undef($@);
               open(OUTPUT,"-|", @cmd, $file);
               while (my $line = <OUTPUT>) { print("$line<br />"); }
               close(OUTPUT);
               print("<p><b>$lt{'comp'}</b></p>");
               if ($! || $@) {
           print('<p><span class="LC_error">'.$lt{'erro'}.'<br />'.$!."\n".
                                 '<br />'.$@.'</span></p>');
               } else {
                           &Apache::lonnet::appenv({'cgi.decompressed' => 'ok'});
                       }
                   } else {
                       print('<span class="LC_error">'.
                             &Apache::lonlocal::mt('There has been an error in determining the file type of [_1], please check the name.',$file).'</span>');
                   }
                   print('</body></html>');
               } else {
                   print('<html><body><span class="LC_error">'.$lt{'extf'}.'<br />'."\n".
                         &Apache::lonlocal::mt('The specified file "[_1]" does not exist.',$file).
                         '</span></body></html>');
               }
           } else {
               print('<html><body><span class="LC_error">'.$lt{'extf'}.'<br />'."\n".
                     &Apache::lonlocal::mt('Could not change working directory to "[_1]".',$dir).
                     '</span></body></html>');
           }
       }
 }  }
 print "Content-type: text/html\n\n";  
 print '<META http-equiv="refresh" content="0; URL=';  
 print "http://$ENV{'SERVER_NAME'}/~$ENV{'user.name'}/$back_path"; print '" >';   
   
   

Removed from v.1.2  
changed lines
  Added in v.1.18


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.