Diff for /loncom/cgi/decompress.pl between versions 1.5 and 1.19

version 1.5, 2003/11/17 23:12:12 version 1.19, 2012/11/27 11:33:17
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 LONCAPA::loncgi();  
 use Apache::lonnet;  use Apache::lonnet;
   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/',
  <html><body>NO COOKIE!</body></html>       '/usr/sbin/') {
 END   if (-x $dir.$program) {
 } else {      $location_of{$program} = $dir.$program;
     print "Content-type: text/html\n\n";  
 print "<html><head></head><body>";  
 print "$ENV{'cgi.path'}";  
 print "<br>$ENV{'cgi.file'}";  
 print "<br>$ENV{'user.name'}<br>";  
 $path = $ENV{'cgi.path'};  
 $path =~ m|/{1}|;  
 $path = $'; #' stupid emacs  
 $path =~ m|/{1}|;  
 $path = $';  
 $username = $`; #Hmm, can't use the enviroment for this, if you are a co-author.. so we work around it.  
 $path2 = "/home/$username/public_html/";  
 $path2 .=$path;  
 $back_path = "";  
  while($path =~ m|/|) {  
     $back_path .= $`;  
     $back_path .= "/";  
     $path = $'; #' stupid emacs  
  }   }
 $path = "/home/$username/public_html";      }
 $path .= '/';  
 $path .= $back_path;  
 print "<br>path: $path<br>";  
 print "back_path: $back_path <br>";  
 print "path2: $path2 <br>";  
 print "$path2<br>";  
 if ( -r $path2){  
 print "Good read access is allowed";  
 print "<br><br>";  
 $right = $ENV{'request.role'};  
 $right =~ m|\.|;  
 $right = $`;  
 $filename = $ENV{'cgi.file'};  
 if($right eq "ca" || $right eq "au") {  
 chdir $path;  
 if      ($filename =~ m|zip|) {  
     system "unzip -qq $path2 &> /dev/null";  
  } elsif ($filename =~ m|tar.gz|) {  
     system "tar -zxpvf $path2 &> /dev/null";  
  } elsif ($filename =~ m|tar.bz2|){  
    system "tar -jxpvf $path2 &> /dev/null";  
  } elsif ($filename =~ m|bz2|){  
     system "bunzip2 $path2 &> /dev/null";  
  } elsif ($filename =~ m|tgz|){  
     system "tar -zxpvf $path2 &> /dev/null";  
  } elsif ($filename =~ m|gz|){  
     system "gunzip $path2 &> /dev/null";  
  } elsif ($filename =~ m|tar|){  
     system "tar -xpvf $path2 &> /dev/null";  
  }  
 }   
 else {print "You don't have proper privledges";}  
 }  }
 else { print "Read access not allowed!"; }  
 print '<meta http-equiv="refresh" content="0; URL=';  print("Content-type: text/html\n\n");
 print "http://$ENV{'SERVER_NAME'}/~$username'}/$back_path"; print '" />';  
 print '</body></html>';  if (!&LONCAPA::loncgi::check_cookie_and_load_env()) {
 &Apache::lonnet::delenv(cgi.file);      &Apache::lonlocal::get_language_handle();
 &Apache::lonnet::delenv(cgi.path);      print(&LONCAPA::loncgi::missing_cookie_msg());
   } else {
       &Apache::lonlocal::get_language_handle();
       my %lt = &Apache::lonlocal::texthash (
                                               bade => 'Invalid file or directory name',
                                               outo => 'Output of decompress:',
                                               comp => 'Decompress complete.', 
                                               erro => 'An error occurred.',
                                               extf => 'Extraction failed.',
                                            );
       my $file=$Apache::lonnet::env{'cgi.file'};
       my $dir=$Apache::lonnet::env{'cgi.dir'};
       if (!$file || !$dir) {
           print(<<END);
           <html><body><span class="LC_error">$lt{'extf'} $lt{'bade'}</span></body></html>
   END
       } elsif (!-d $dir) {
           print('<html><body><span class="LC_error">'.$lt{'extf'}.' '."\n".
                 &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 !~ /^\Q$londocroot\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>');
           }
       }
 }  }
   

Removed from v.1.5  
changed lines
  Added in v.1.19


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>