]> git.p6c8.net - devedit.git/commitdiff
Catch some errors that might occur when unpacking an archive
authorpcanterino <>
Thu, 30 Dec 2010 16:07:56 +0000 (16:07 +0000)
committerpcanterino <>
Thu, 30 Dec 2010 16:07:56 +0000 (16:07 +0000)
errors.conf
modules/Command.pm
templates/about.htm

index 87c89145a50b6af81d67c9089ddf9b9c081bb61d..7da9eca9db368e0ab07b352f8a678f6a703763ff 100644 (file)
@@ -30,6 +30,8 @@ link_edit         = For security reasons, you cannot edit the target file of a s
 link_replace      = You are not allowed to overwrite symbolic links.
 mkdir_failed      = Could not create directory '{DIR}'.
 mkfile_failed     = Could not create file '{FILE}'.
+no_ae             = Perl module <tt>Archive::Extract</tt> is not available.
+no_archive        = '{FILE}' is not an archive file.
 no_copy           = You have not enough permissions to copy this file.
 no_delete         = You have not enough permissions to delete this file.
 no_dir_access     = You have not enough permissions to access this directory.
@@ -47,5 +49,7 @@ remove_root       = You are not allowed to remove the root directory.
 rename_failed     = Could not move/rename '{FILE}' to '{NEW_FILE}'.
 rename_root       = You are not allowed to move/rename the root directory.
 text_to_binary    = You are not allowed to write text data into a binary file.
+unpack_failed     = Unpacking of archive file '{FILE}' failed.
+unpack_no_dir     = You cannot unpack archive file '{FILE}' to an ordinary file or a symbolic ('{NEW_FILE}' is not a directory).
 
 # End of configuration file
\ No newline at end of file
index 0880c8c62823f7e51491d788d69f17a4d71fc692..ec7ca69ed2098779b9882c34532159025e461383 100644 (file)
@@ -6,7 +6,7 @@ package Command;
 # Execute Dev-Editor's commands
 #
 # Author:        Patrick Canterino <patrick@patshaping.de>
-# Last modified: 2010-10-26
+# Last modified: 2010-10-30
 #
 # Copyright (C) 1999-2000 Roland Bluethgen, Frank Schoenmann
 # Copyright (C) 2003-2009 Patrick Canterino
@@ -652,9 +652,17 @@ sub exec_unpack($$)
  my $new_virtual    = $data->{'new_virtual'};
  my $cgi            = $data->{'cgi'};
 
+ return error($config->{'errors'}->{'no_ae'},$dir) unless($File::Access::has_archive_extract);
+ return error($config->{'errors'}->{'no_archive'},$dir,{FILE => encode_html($virtual)}) unless(is_archive($physical));
  if($new_physical)
  {
-  archive_unpack($physical,$new_physical);
+  return error($config->{'errors'}->{'unpack_no_dir'},$dir,{FILE => encode_html($virtual), NEW_FILE => encode_html($new_virtual)}) if(-l $new_physical || not -d $new_physical);
+  my $return_unpack = archive_unpack($physical,$new_physical);
+  
+  return error($config->{'errors'}->{'unpack_failed'},$dir,{FILE => encode_html($virtual), AE_ERROR => ''}) unless($return_unpack);
+  
   return devedit_reload({command => 'show', file => $new_virtual});
  }
  else
@@ -1214,6 +1222,8 @@ sub exec_about($$)
 
  $tpl->fillin('PERL_PROG',encode_html($^X));
  $tpl->fillin('PERL_VER', sprintf('%vd',$^V));
+ $tpl->parse_if_block('PERL_ARCHIVE_EXTRACT',$File::Access::has_archive_extract);
 
  # Information about the server
 
index a3cf38a8691d0be84938257022e02752874502c0..da7de1390b91f1ee171759b97c6e987c98c6e1ba 100644 (file)
@@ -182,6 +182,11 @@ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 <td>{PERL_VER}</td>
 </tr>
 
+<tr>
+<td><b>Perl module <tt>Archive::Extract</tt> available:</b></td>
+<td>{IF PERL_ARCHIVE_EXTRACT}Yes{ELSE}No{ENDIF}</td>
+</tr>
+
 <tr>
 <td><b>HTTP server software:</b></td>
 <td>{HTTPD}</td>

patrick-canterino.de