You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
(12) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(66) |
Feb
(7) |
Mar
(9) |
Apr
(14) |
May
|
Jun
(14) |
Jul
(18) |
Aug
(1) |
Sep
|
Oct
|
Nov
(4) |
Dec
|
2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Sebastien D. <sde...@us...> - 2005-04-22 08:21:56
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31070 Modified Files: HISTORY Log Message: Added a way to empty upload directory Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.24 retrieving revision 1.25 diff -u -d -r1.24 -r1.25 --- HISTORY 14 Mar 2005 14:56:57 -0000 1.24 +++ HISTORY 22 Apr 2005 08:21:47 -0000 1.25 @@ -1,3 +1,6 @@ +2005-04-22: +- New file: admin/purge.php + 2005-03-14: tag v06 - update tar.inc.php to match Tar 1.3.0 from PEAR. - changes in admin/index.php to allow for archive with any directory names. |
From: Sebastien D. <sde...@us...> - 2005-04-22 08:21:56
|
Update of /cvsroot/tslogparser/tslogparser/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31070/admin Added Files: purge.php Log Message: Added a way to empty upload directory --- NEW FILE: purge.php --- <?php /* * Copyright (c) 2005, Bull S.A.. All rights reserved. * Created by: Sebastien Decugis * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * You should have received a copy of the GNU General Public License along * with this program; if not, write the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston MA 02111-1307, USA. */ /* This file empties the upload directory. Use with care! */ $root="../"; $_PAGE["title"]="TSLP purge"; /* Output header page */ require($root."header.inc.php"); /* We'll need functions defined in other files */ require($root."functions.inc.php"); function rmdirRecursive($path,$followLinks=false) { $dir = opendir($path) ; while ( $entry = readdir($dir) ) { if ( is_file( "$path/$entry" ) || ((!$followLinks) && is_link("$path/$entry")) ) { echo ( "unlink $path/$entry;\n" ); // Uncomment when happy! //unlink( "$path/$entry" ); } elseif ( is_dir( "$path/$entry" ) && $entry!='.' && $entry!='..' ) { rmdirRecursive( "$path/$entry" ) ; } } closedir($dir) ; echo "rmdir $path;\n"; // Uncomment when happy! // return rmdir($path); } rmdirRecursive($root."ts/"); require($root."footer.inc.php"); ?> |
From: Sebastien D. <sde...@us...> - 2005-03-14 16:58:20
|
Update of /cvsroot/tslogparser/web/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6308 Modified Files: index.php tar.inc.php Log Message: Update demo to 0.6 Index: tar.inc.php =================================================================== RCS file: /cvsroot/tslogparser/web/admin/tar.inc.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- tar.inc.php 27 Jan 2005 10:37:52 -0000 1.1 +++ tar.inc.php 14 Mar 2005 16:58:01 -0000 1.2 @@ -1005,16 +1005,17 @@ // | obtain it through the world-wide-web, please send a note to | // | li...@ph... so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ -// | Author: Vincent Blavet <vi...@bl...> | +// | Author: Vincent Blavet <vi...@ph...> | // +----------------------------------------------------------------------+ // // $Id$ +define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001); /** * Creates a (compressed) Tar archive * -* @author Vincent Blavet <vi...@bl...> +* @author Vincent Blavet <vi...@ph...> * @version $Revision$ * @package Archive */ @@ -1036,6 +1037,11 @@ var $_compress_type='none'; /** + * @var string Explode separator + */ + var $_separator=' '; + + /** * @var file descriptor */ var $_file=0; @@ -1093,12 +1099,16 @@ } } } else { - if (($p_compress == true) || ($p_compress == 'gz')) { + if (($p_compress === true) || ($p_compress == 'gz')) { $this->_compress = true; $this->_compress_type = 'gz'; } else if ($p_compress == 'bz2') { $this->_compress = true; $this->_compress_type = 'bz2'; + } else { + die("Unsupported compression type '$p_compress'\n". + "Supported types are 'gz' and 'bz2'.\n"); + return false; } } $this->_tarname = $p_tarname; @@ -1147,8 +1157,9 @@ * sub-directories are also added. * See also createModify() method for more details. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. * @return true on success, false on error. * @see createModify() * @access public @@ -1168,8 +1179,9 @@ * even if a file with the same name is already archived. * See also createModify() method for more details. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. * @return true on success, false on error. * @see createModify() * @access public @@ -1227,13 +1239,15 @@ * for extraction in a different path than the origin files are. * See also addModify() method for file adding properties. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_add_dir A string which contains a path to be added to the - * memorized path of each element in the list. - * @param string $p_remove_dir A string which contains a path to be removed from - * the memorized path of each element in the list, when - * relevant. + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated by + * a single blank space. + * @param string $p_add_dir A string which contains a path to be added + * to the memorized path of each element in + * the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of each + * element in the list, when relevant. * @return boolean true on success, false on error. * @access public * @see addModify() @@ -1249,7 +1263,7 @@ if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_cleanFile(); $this->_error('Invalid file list'); @@ -1297,12 +1311,15 @@ * If a file/dir is not readable the file/dir is ignored. However an * error text is send to PEAR error. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_add_dir A string which contains a path to be added to the - * memorized path of each element in the list. - * @param string $p_remove_dir A string which contains a path to be removed from - * the memorized path of each element in the list, when + * @param array $p_filelist An array of filenames and directory + * names, or a single string with names + * separated by a single blank space. + * @param string $p_add_dir A string which contains a path to be + * added to the memorized path of each + * element in the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of + * each element in the list, when * relevant. * @return true on success, false on error. * @access public @@ -1311,13 +1328,14 @@ { $v_result = true; - if (!@is_file($this->_tarname)) - $v_result = $this->createModify($p_filelist, $p_add_dir, $p_remove_dir); + if (!$this->_isArchive()) + $v_result = $this->createModify($p_filelist, $p_add_dir, + $p_remove_dir); else { if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_error('Invalid file list'); return false; @@ -1336,17 +1354,19 @@ * end of the existing archive. If the archive does not yet exists it * is created. * - * @param string $p_filename A string which contains the full filename path - * that will be associated with the string. - * @param string $p_string The content of the file added in the archive. + * @param string $p_filename A string which contains the full + * filename path that will be associated + * with the string. + * @param string $p_string The content of the file added in + * the archive. * @return true on success, false on error. * @access public */ function addString($p_filename, $p_string) { $v_result = true; - - if (!@is_file($this->_tarname)) { + + if (!$this->_isArchive()) { if (!$this->_openWrite()) { return false; } @@ -1392,10 +1412,11 @@ * is returned. However the result can be a partial extraction that may * need to be manually cleaned. * - * @param string $p_path The path of the directory where the files/dir need to by - * extracted. - * @param string $p_remove_path Part of the memorized path that can be removed if - * present at the beginning of the file/dir path. + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. * @return boolean true on success, false on error. * @access public * @see extractList() @@ -1406,7 +1427,8 @@ $v_list_detail = array(); if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, "complete", 0, $p_remove_path); + $v_result = $this->_extractList($p_path, $v_list_detail, + "complete", 0, $p_remove_path); $this->_close(); } @@ -1442,12 +1464,14 @@ * in the directory indicated by the optional $p_path parameter. * If indicated the $p_remove_path can be used in the same way as it is * used in extractModify() method. - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_path The path of the directory where the files/dir need to by - * extracted. - * @param string $p_remove_path Part of the memorized path that can be removed if - * present at the beginning of the file/dir path. + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated + * by a single blank space. + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. * @return true on success, false on error. * @access public * @see extractModify() @@ -1460,14 +1484,15 @@ if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_error('Invalid string list'); return false; } if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, "partial", $v_list, $p_remove_path); + $v_result = $this->_extractList($p_path, $v_list_detail, "partial", + $v_list, $p_remove_path); $this->_close(); } @@ -1475,6 +1500,60 @@ } // }}} + // {{{ setAttribute() + /** + * This method set specific attributes of the archive. It uses a variable + * list of parameters, in the format attribute code + attribute values : + * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ','); + * @param mixed $argv variable list of attributes and values + * @return true on success, false on error. + * @access public + */ + function setAttribute() + { + $v_result = true; + + // ----- Get the number of variable list of arguments + if (($v_size = func_num_args()) == 0) { + return true; + } + + // ----- Get the arguments + $v_att_list = &func_get_args(); + + // ----- Read the attributes + $i=0; + while ($i<$v_size) { + + // ----- Look for next option + switch ($v_att_list[$i]) { + // ----- Look for options that request a string value + case ARCHIVE_TAR_ATT_SEPARATOR : + // ----- Check the number of parameters + if (($i+1) >= $v_size) { + $this->_error('Invalid number of parameters for ' + .'attribute ARCHIVE_TAR_ATT_SEPARATOR'); + return false; + } + + // ----- Get the value + $this->_separator = $v_att_list[$i+1]; + $i++; + break; + + default : + $this->_error('Unknow attribute code '.$v_att_list[$i].''); + return false; + } + + // ----- Next attribute + $i++; + } + + return $v_result; + } + // }}} + // {{{ _error() function _error($p_message) { @@ -1491,20 +1570,33 @@ } // }}} + // {{{ _isArchive() + function _isArchive($p_filename=NULL) + { + if ($p_filename == NULL) { + $p_filename = $this->_tarname; + } + clearstatcache(); + return @is_file($p_filename); + } + // }}} + // {{{ _openWrite() function _openWrite() { if ($this->_compress_type == 'gz') - $this->_file = @gzopen($this->_tarname, "wb"); + $this->_file = @gzopen($this->_tarname, "wb9"); else if ($this->_compress_type == 'bz2') $this->_file = @bzopen($this->_tarname, "wb"); else if ($this->_compress_type == 'none') $this->_file = @fopen($this->_tarname, "wb"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { - $this->_error('Unable to open in write mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in write mode \'' + .$this->_tarname.'\''); return false; } @@ -1521,12 +1613,14 @@ if ($this->_temp_tarname == '') { $this->_temp_tarname = uniqid('tar').'.tmp'; if (!$v_file_from = @fopen($this->_tarname, 'rb')) { - $this->_error('Unable to open in read mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in read mode \'' + .$this->_tarname.'\''); $this->_temp_tarname = ''; return false; } if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) { - $this->_error('Unable to open in write mode \''.$this->_temp_tarname.'\''); + $this->_error('Unable to open in write mode \'' + .$this->_temp_tarname.'\''); $this->_temp_tarname = ''; return false; } @@ -1550,7 +1644,8 @@ else if ($this->_compress_type == 'none') $this->_file = @fopen($v_filename, "rb"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { $this->_error('Unable to open in read mode \''.$v_filename.'\''); @@ -1571,10 +1666,12 @@ else if ($this->_compress_type == 'none') $this->_file = @fopen($this->_tarname, "r+b"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { - $this->_error('Unable to open in read/write mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in read/write mode \'' + .$this->_tarname.'\''); return false; } @@ -1585,7 +1682,8 @@ // {{{ _close() function _close() { - if (isset($this->_file)) { + //if (isset($this->_file)) { + if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') @gzclose($this->_file); else if ($this->_compress_type == 'bz2') @@ -1593,7 +1691,8 @@ else if ($this->_compress_type == 'none') @fclose($this->_file); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); $this->_file = 0; } @@ -1632,7 +1731,7 @@ // {{{ _writeBlock() function _writeBlock($p_binary_data, $p_len=null) { - if ($this->_file) { + if (is_resource($this->_file)) { if ($p_len === null) { if ($this->_compress_type == 'gz') @gzputs($this->_file, $p_binary_data); @@ -1641,7 +1740,8 @@ else if ($this->_compress_type == 'none') @fputs($this->_file, $p_binary_data); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } else { if ($this->_compress_type == 'gz') @gzputs($this->_file, $p_binary_data, $p_len); @@ -1650,7 +1750,8 @@ else if ($this->_compress_type == 'none') @fputs($this->_file, $p_binary_data, $p_len); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } } @@ -1659,13 +1760,10 @@ // }}} // {{{ _readBlock() - function _readBlock($p_len=null) + function _readBlock() { $v_block = null; - if ($this->_file) { - if ($p_len === null) - $p_len = 512; - + if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') $v_block = @gzread($this->_file, 512); else if ($this->_compress_type == 'bz2') @@ -1673,8 +1771,8 @@ else if ($this->_compress_type == 'none') $v_block = @fread($this->_file, 512); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); - + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } return $v_block; } @@ -1683,12 +1781,13 @@ // {{{ _jumpBlock() function _jumpBlock($p_len=null) { - if ($this->_file) { + if (is_resource($this->_file)) { if ($p_len === null) $p_len = 1; - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz') { @gzseek($this->_file, @gztell($this->_file)+($p_len*512)); + } else if ($this->_compress_type == 'bz2') { // ----- Replace missing bztell() and bzseek() for ($i=0; $i<$p_len; $i++) @@ -1696,7 +1795,8 @@ } else if ($this->_compress_type == 'none') @fseek($this->_file, @ftell($this->_file)+($p_len*512)); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } return true; @@ -1706,7 +1806,7 @@ // {{{ _writeFooter() function _writeFooter() { - if ($this->_file) { + if (is_resource($this->_file)) { // ----- Write the last 0 filled block for end of archive $v_binary_data = pack("a512", ''); $this->_writeBlock($v_binary_data); @@ -1733,8 +1833,10 @@ if (sizeof($p_list) == 0) return true; - for ($j=0; ($j<count($p_list)) && ($v_result); $j++) { - $v_filename = $p_list[$j]; + foreach ($p_list as $v_filename) { + if (!$v_result) { + break; + } // ----- Skip the current tar name if ($v_filename == $this->_tarname) @@ -1757,15 +1859,17 @@ $this->_warning("Directory '$v_filename' can not be read"); continue; } - $p_hitem = readdir($p_hdir); // '.' directory - $p_hitem = readdir($p_hdir); // '..' directory while (false !== ($p_hitem = readdir($p_hdir))) { - if ($v_filename != ".") - $p_temp_list[0] = $v_filename.'/'.$p_hitem; - else - $p_temp_list[0] = $p_hitem; + if (($p_hitem != '.') && ($p_hitem != '..')) { + if ($v_filename != ".") + $p_temp_list[0] = $v_filename.'/'.$p_hitem; + else + $p_temp_list[0] = $p_hitem; - $v_result = $this->_addList($p_temp_list, $p_add_dir, $p_remove_dir); + $v_result = $this->_addList($p_temp_list, + $p_add_dir, + $p_remove_dir); + } } unset($p_temp_list); @@ -1814,9 +1918,10 @@ $v_stored_filename = $this->_pathReduction($v_stored_filename); - if (is_file($p_filename)) { + if ($this->_isArchive($p_filename)) { if (($v_file = @fopen($p_filename, "rb")) == 0) { - $this->_warning("Unable to open file '$p_filename' in binary read mode"); + $this->_warning("Unable to open file '".$p_filename + ."' in binary read mode"); return true; } @@ -1856,7 +1961,8 @@ // ----- Calculate the stored filename $p_filename = $this->_translateWinPath($p_filename, false);; - if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), 0, 0, "", 0, 0)) + if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), + 0, 0, "", 0, 0)) return false; $i=0; @@ -1913,8 +2019,13 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", $v_reduce_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + $v_reduce_filename, $v_perms, $v_uid, + $v_gid, $v_size, $v_mtime); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -1944,7 +2055,8 @@ // }}} // {{{ _writeHeaderBlock() - function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, $p_type='', $p_uid=0, $p_gid=0) + function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, + $p_type='', $p_uid=0, $p_gid=0) { $p_filename = $this->_pathReduction($p_filename); @@ -1981,8 +2093,13 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", $p_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $p_type, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + $p_filename, $v_perms, $v_uid, $v_gid, + $v_size, $v_mtime); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $p_type, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -2034,8 +2151,12 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", '././@LongLink', 0, 0, 0, $v_size, 0); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + '././@LongLink', 0, 0, 0, $v_size, 0); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -2097,7 +2218,10 @@ for ($i=156; $i<512; $i++) $v_checksum+=ord(substr($v_binary_data,$i,1)); - $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data); + $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/" + ."a8checksum/a1typeflag/a100link/a6magic/a2version/" + ."a32uname/a32gname/a8devmajor/a8devminor", + $v_binary_data); // ----- Extract the checksum $v_header['checksum'] = OctDec(trim($v_data['checksum'])); @@ -2108,7 +2232,9 @@ if (($v_checksum == 256) && ($v_header['checksum'] == 0)) return true; - $this->_error('Invalid checksum for file "'.$v_data['filename'].'" : '.$v_checksum.' calculated, '.$v_header['checksum'].' expected'); + $this->_error('Invalid checksum for file "'.$v_data['filename'] + .'" : '.$v_checksum.' calculated, ' + .$v_header['checksum'].' expected'); return false; } @@ -2122,7 +2248,8 @@ if (($v_header['typeflag'] = $v_data['typeflag']) == "5") { $v_header['size'] = 0; } - /* ----- All these fields are removed form the header because they do not carry interesting info + /* ----- All these fields are removed form the header because + they do not carry interesting info $v_header[link] = trim($v_data[link]); $v_header[magic] = trim($v_data[magic]); $v_header[version] = trim($v_data[version]); @@ -2190,7 +2317,8 @@ if ($v_header['filename'] == $p_filename) { if ($v_header['typeflag'] == "5") { - $this->_error('Unable to extract in string a directory entry {'.$v_header['filename'].'}'); + $this->_error('Unable to extract in string a directory ' + .'entry {'.$v_header['filename'].'}'); return NULL; } else { $n = floor($v_header['size']/512); @@ -2199,7 +2327,8 @@ } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); - $v_result_str .= substr($v_content, 0, ($v_header['size'] % 512)); + $v_result_str .= substr($v_content, 0, + ($v_header['size'] % 512)); } return $v_result_str; } @@ -2213,7 +2342,8 @@ // }}} // {{{ _extractList() - function _extractList($p_path, &$p_list_detail, $p_mode, $p_file_list, $p_remove_path) + function _extractList($p_path, &$p_list_detail, $p_mode, + $p_file_list, $p_remove_path) { $v_result=true; $v_nb = 0; @@ -2221,7 +2351,8 @@ $v_listing = false; $p_path = $this->_translateWinPath($p_path, false); - if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { + if ($p_path == '' || (substr($p_path, 0, 1) != '/' + && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { $p_path = "./".$p_path; } $p_remove_path = $this->_translateWinPath($p_remove_path); @@ -2251,7 +2382,7 @@ clearstatcache(); - While (strlen($v_binary_data = $this->_readBlock()) != 0) + while (strlen($v_binary_data = $this->_readBlock()) != 0) { $v_extract_file = FALSE; $v_extraction_stopped = 0; @@ -2259,8 +2390,9 @@ if (!$this->_readHeader($v_binary_data, $v_header)) return false; - if ($v_header['filename'] == '') + if ($v_header['filename'] == '') { continue; + } // ----- Look for long filename if ($v_header['typeflag'] == 'L') { @@ -2276,7 +2408,9 @@ // ----- Look if it is a directory if (substr($p_file_list[$i], -1) == '/') { // ----- Look if the directory is in the filename path - if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) { + if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) + && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) + == $p_file_list[$i])) { $v_extract_file = TRUE; break; } @@ -2296,8 +2430,10 @@ if (($v_extract_file) && (!$v_listing)) { if (($p_remove_path != '') - && (substr($v_header['filename'], 0, $p_remove_path_size) == $p_remove_path)) - $v_header['filename'] = substr($v_header['filename'], $p_remove_path_size); + && (substr($v_header['filename'], 0, $p_remove_path_size) + == $p_remove_path)) + $v_header['filename'] = substr($v_header['filename'], + $p_remove_path_size); if (($p_path != './') && ($p_path != '/')) { while (substr($p_path, -1) == '/') $p_path = substr($p_path, 0, strlen($p_path)-1); @@ -2308,16 +2444,21 @@ $v_header['filename'] = $p_path.'/'.$v_header['filename']; } if (file_exists($v_header['filename'])) { - if ((@is_dir($v_header['filename'])) && ($v_header['typeflag'] == '')) { - $this->_error('File '.$v_header['filename'].' already exists as a directory'); + if ( (@is_dir($v_header['filename'])) + && ($v_header['typeflag'] == '')) { + $this->_error('File '.$v_header['filename'] + .' already exists as a directory'); return false; } - if ((is_file($v_header['filename'])) && ($v_header['typeflag'] == "5")) { - $this->_error('Directory '.$v_header['filename'].' already exists as a file'); + if ( ($this->_isArchive($v_header['filename'])) + && ($v_header['typeflag'] == "5")) { + $this->_error('Directory '.$v_header['filename'] + .' already exists as a file'); return false; } if (!is_writeable($v_header['filename'])) { - $this->_error('File '.$v_header['filename'].' already exists and is write protected'); + $this->_error('File '.$v_header['filename'] + .' already exists and is write protected'); return false; } if (filemtime($v_header['filename']) > $v_header['mtime']) { @@ -2326,7 +2467,10 @@ } // ----- Check the directory availability and create it if necessary - elseif (($v_result = $this->_dirCheck(($v_header['typeflag'] == "5"?$v_header['filename']:dirname($v_header['filename'])))) != 1) { + elseif (($v_result + = $this->_dirCheck(($v_header['typeflag'] == "5" + ?$v_header['filename'] + :dirname($v_header['filename'])))) != 1) { $this->_error('Unable to create path for '.$v_header['filename']); return false; } @@ -2335,13 +2479,15 @@ if ($v_header['typeflag'] == "5") { if (!@file_exists($v_header['filename'])) { if (!@mkdir($v_header['filename'], 0777)) { - $this->_error('Unable to create directory {'.$v_header['filename'].'}'); + $this->_error('Unable to create directory {' + .$v_header['filename'].'}'); return false; } } } else { if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { - $this->_error('Error while opening {'.$v_header['filename'].'} in write binary mode'); + $this->_error('Error while opening {'.$v_header['filename'] + .'} in write binary mode'); return false; } else { $n = floor($v_header['size']/512); @@ -2358,17 +2504,18 @@ // ----- Change the file mode, mtime @touch($v_header['filename'], $v_header['mtime']); - if ($v_header['mode'] & 0111) { - // make file executable, obey umask - $mode = fileperms($v_header['filename']) | (~umask() & 0111); - @chmod($v_header['filename'], $mode); - } + // To be completed + //chmod($v_header[filename], DecOct($v_header[mode])); } // ----- Check the file size clearstatcache(); if (filesize($v_header['filename']) != $v_header['size']) { - $this->_error('Extracted file '.$v_header['filename'].' does not have the correct file size \''.filesize($v_filename).'\' ('.$v_header['size'].' expected). Archive may be corrupted.'); + $this->_error('Extracted file '.$v_header['filename'] + .' does not have the correct file size \'' + .filesize($v_header['filename']) + .'\' ('.$v_header['size'] + .' expected). Archive may be corrupted.'); return false; } } @@ -2388,7 +2535,8 @@ if ($v_listing || $v_extract_file || $v_extraction_stopped) { // ----- Log extracted files - if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename']) + if (($v_file_dir = dirname($v_header['filename'])) + == $v_header['filename']) $v_file_dir = ''; if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) $v_file_dir = '/'; @@ -2411,7 +2559,9 @@ $this->_close(); if (!@rename($this->_tarname, $this->_tarname.".tmp")) { - $this->_error('Error while renaming \''.$this->_tarname.'\' to temporary file \''.$this->_tarname.'.tmp\''); + $this->_error('Error while renaming \''.$this->_tarname + .'\' to temporary file \''.$this->_tarname + .'.tmp\''); return false; } @@ -2421,7 +2571,8 @@ $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb"); if ($v_temp_tar == 0) { - $this->_error('Unable to open file \''.$this->_tarname.'.tmp\' in binary read mode'); + $this->_error('Unable to open file \''.$this->_tarname + .'.tmp\' in binary read mode'); @rename($this->_tarname.".tmp", $this->_tarname); return false; } @@ -2451,8 +2602,10 @@ $v_buffered_lines[] = @bzread($v_temp_tar, 512); // ----- Read the following blocks but not the last one - while (strlen($v_buffered_lines[] = @bzread($v_temp_tar, 512)) > 0) { - $v_binary_data = pack("a512", array_shift($v_buffered_lines)); + while (strlen($v_buffered_lines[] + = @bzread($v_temp_tar, 512)) > 0) { + $v_binary_data = pack("a512", + array_shift($v_buffered_lines)); $this->_writeBlock($v_binary_data); } @@ -2460,11 +2613,13 @@ } if (!@unlink($this->_tarname.".tmp")) { - $this->_error('Error while deleting temporary file \''.$this->_tarname.'.tmp\''); + $this->_error('Error while deleting temporary file \'' + .$this->_tarname.'.tmp\''); } } else { - // ----- For not compressed tar, just add files before the last 512 bytes block + // ----- For not compressed tar, just add files before the last + // 512 bytes block if (!$this->_openReadWrite()) return false; @@ -2527,8 +2682,8 @@ // {{{ _pathReduction() /** - * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", and - * remove double slashes. + * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", + * rand emove double slashes. * * @param string $p_dir path to reduce * @@ -2557,11 +2712,14 @@ // ----- Ignore it and ignore the $i-1 $i--; } - else if (($v_list[$i] == '') && ($i!=(sizeof($v_list)-1)) && ($i!=0)) { + else if ( ($v_list[$i] == '') + && ($i!=(sizeof($v_list)-1)) + && ($i!=0)) { // ----- Ignore only the double '//' in path, // but not the first and last / } else { - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'.$v_result:''); + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/' + .$v_result:''); } } } @@ -2576,7 +2734,8 @@ { if (OS_WINDOWS) { // ----- Look for potential disk letter - if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + if ( ($p_remove_disk_letter) + && (($v_position = strpos($p_path, ':')) != false)) { $p_path = substr($p_path, $v_position+1); } // ----- Change potential windows directory separator Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/web/admin/index.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- index.php 27 Jan 2005 10:47:56 -0000 1.3 +++ index.php 14 Mar 2005 16:58:01 -0000 1.4 @@ -182,7 +182,7 @@ && ($_FILES['tsarchive']['type'] != "application/x-tar") && ($_FILES['tsarchive']['type'] != "application/x-gzip")) { - echo "<b>You have to supply the testsuite in a tar gzip'd format.</b>\n"; + echo "<b>You have to supply the testsuite in a tar gzip'd format (got '".htmlentities($_FILES['tsarchive']['type'])."').</b>\n"; db_fini(); require($root."footer.inc.php"); die(); @@ -194,7 +194,7 @@ $tmpdir = $root."ts/".time(); - if (!$tar->extractModify($tmpdir, "ts")) + if (!$tar->extractModify($tmpdir, "")) { echo "<b>Archive extraction failed.</b>\n"; @@ -203,6 +203,40 @@ die(); } + /* Find directory name from inside archive, if any */ + /* 1 - check the files are inside a subdirectory */ + if (!is_dir($tmpdir."/conformance/interface")) + { + /* 2 - open the directory where files were extracted */ + if ($dh = opendir($tmpdir)) + { + /* 3 - list the files. We assume there is only 1 directory here */ + while (($file = readdir($dh)) !== false) + { + if (($file == ".") || ($file == "..")) + continue; + if (is_dir($tmpdir."/".$file)) + { + $tmpdir .= "/".$file; + break; + } + echo "<b>Unexpected entry in archive: $file</b>"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + /* 4 - close the directory */ + closedir($dh); + } + else + { + echo "<b>Unable to open temporary directory $tmpdir</b>"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + } + /* Here we're in step 2 in process: ready to proceed */ echo "<pre>\n"; @@ -264,7 +298,7 @@ <td><textarea name="ts_descr" rows="3" cols="79"><?php echo $_GET["ts_descr"]; ?></textarea></td> </tr> <tr> - <td>New release archive (tar.gz expanding in 'ts' directory):</td> + <td>New release archive (tar.gz format):</td> <td><input name="tsarchive" type="file"></td> </tr> <tr> |
From: Sebastien D. <sde...@us...> - 2005-03-14 16:56:34
|
Update of /cvsroot/tslogparser/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5843 Modified Files: downloads.php Log Message: update download page to 0.6 Index: downloads.php =================================================================== RCS file: /cvsroot/tslogparser/web/downloads.php,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- downloads.php 9 Feb 2005 10:23:52 -0000 1.4 +++ downloads.php 14 Mar 2005 16:56:21 -0000 1.5 @@ -11,7 +11,7 @@ <tr><td> </td></tr> <tr> <td> - <p>The latest stable release is <b>0.5</b> (Jan 27, 2005).</p> + <p>The latest stable release is <b>0.6</b> (Mar 14, 2005).</p> <p>It can be downloaded from <a href="http://sourceforge.net/project/showfiles.php?group_id=124567"> this place (SourceForge.net)</a>.</p> |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:57:21
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6000 Modified Files: HISTORY Log Message: Ready to release Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- HISTORY 14 Mar 2005 14:43:49 -0000 1.23 +++ HISTORY 14 Mar 2005 14:56:57 -0000 1.24 @@ -1,4 +1,4 @@ -2005-03-14: +2005-03-14: tag v06 - update tar.inc.php to match Tar 1.3.0 from PEAR. - changes in admin/index.php to allow for archive with any directory names. |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:56:16
|
Update of /cvsroot/tslogparser/tslogparser/package In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5743/package Modified Files: tslogparser.spec Log Message: Ready to release Index: tslogparser.spec =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/package/tslogparser.spec,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- tslogparser.spec 7 Feb 2005 15:35:13 -0000 1.8 +++ tslogparser.spec 14 Mar 2005 14:56:06 -0000 1.9 @@ -7,9 +7,9 @@ # rpmbuild --target noarch-redhat-linux -ta tslogparser-*.tar.gz %define name tslogparser -%define version 0.5 -%define release 4 -%define filename tslogparser-v05 +%define version 0.6 +%define release 2 +%define filename tslogparser-v06 %define tslp_user tslogparser %define tslp_group tslogparser |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:55:18
|
Update of /cvsroot/tslogparser/tslogparser/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5464 Modified Files: index.php Log Message: Fix in Tar function call Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/admin/index.php,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- index.php 14 Mar 2005 14:43:50 -0000 1.10 +++ index.php 14 Mar 2005 14:55:06 -0000 1.11 @@ -194,7 +194,7 @@ $tmpdir = $root."ts/".time(); - if (!$tar->extractModify($tmpdir)) + if (!$tar->extractModify($tmpdir, "")) { echo "<b>Archive extraction failed.</b>\n"; |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:44:02
|
Update of /cvsroot/tslogparser/tslogparser/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2354/admin Modified Files: index.php Log Message: Simplify tar archives usage (experimental) Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/admin/index.php,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- index.php 7 Feb 2005 15:31:54 -0000 1.9 +++ index.php 14 Mar 2005 14:43:50 -0000 1.10 @@ -194,7 +194,7 @@ $tmpdir = $root."ts/".time(); - if (!$tar->extractModify($tmpdir, "ts")) + if (!$tar->extractModify($tmpdir)) { echo "<b>Archive extraction failed.</b>\n"; @@ -203,6 +203,40 @@ die(); } + /* Find directory name from inside archive, if any */ + /* 1 - check the files are inside a subdirectory */ + if (!is_dir($tmpdir."/conformance/interface")) + { + /* 2 - open the directory where files were extracted */ + if ($dh = opendir($tmpdir)) + { + /* 3 - list the files. We assume there is only 1 directory here */ + while (($file = readdir($dh)) !== false) + { + if (($file == ".") || ($file == "..")) + continue; + if (is_dir($tmpdir."/".$file)) + { + $tmpdir .= "/".$file; + break; + } + echo "<b>Unexpected entry in archive: $file</b>"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + /* 4 - close the directory */ + closedir($dh); + } + else + { + echo "<b>Unable to open temporary directory $tmpdir</b>"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + } + /* Here we're in step 2 in process: ready to proceed */ echo "<pre>\n"; @@ -264,7 +298,7 @@ <td><textarea name="ts_descr" rows="3" cols="79"><?php echo $_GET["ts_descr"]; ?></textarea></td> </tr> <tr> - <td>New release archive (tar.gz expanding in 'ts' directory):</td> + <td>New release archive (tar.gz format):</td> <td><input name="tsarchive" type="file"></td> </tr> <tr> |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:44:02
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2354 Modified Files: HISTORY Log Message: Simplify tar archives usage (experimental) Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- HISTORY 14 Mar 2005 14:14:38 -0000 1.22 +++ HISTORY 14 Mar 2005 14:43:49 -0000 1.23 @@ -1,5 +1,6 @@ 2005-03-14: - update tar.inc.php to match Tar 1.3.0 from PEAR. +- changes in admin/index.php to allow for archive with any directory names. 2005-02-07: - Add MIME message description in admin/index.php on upload failure. |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:14:49
|
Update of /cvsroot/tslogparser/tslogparser/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26735/admin Modified Files: tar.inc.php Log Message: Update Tar support Index: tar.inc.php =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/admin/tar.inc.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- tar.inc.php 26 Jan 2005 17:52:49 -0000 1.1 +++ tar.inc.php 14 Mar 2005 14:14:38 -0000 1.2 @@ -1005,16 +1005,17 @@ // | obtain it through the world-wide-web, please send a note to | // | li...@ph... so we can mail you a copy immediately. | // +----------------------------------------------------------------------+ -// | Author: Vincent Blavet <vi...@bl...> | +// | Author: Vincent Blavet <vi...@ph...> | // +----------------------------------------------------------------------+ // // $Id$ +define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001); /** * Creates a (compressed) Tar archive * -* @author Vincent Blavet <vi...@bl...> +* @author Vincent Blavet <vi...@ph...> * @version $Revision$ * @package Archive */ @@ -1036,6 +1037,11 @@ var $_compress_type='none'; /** + * @var string Explode separator + */ + var $_separator=' '; + + /** * @var file descriptor */ var $_file=0; @@ -1093,12 +1099,16 @@ } } } else { - if (($p_compress == true) || ($p_compress == 'gz')) { + if (($p_compress === true) || ($p_compress == 'gz')) { $this->_compress = true; $this->_compress_type = 'gz'; } else if ($p_compress == 'bz2') { $this->_compress = true; $this->_compress_type = 'bz2'; + } else { + die("Unsupported compression type '$p_compress'\n". + "Supported types are 'gz' and 'bz2'.\n"); + return false; } } $this->_tarname = $p_tarname; @@ -1147,8 +1157,9 @@ * sub-directories are also added. * See also createModify() method for more details. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. * @return true on success, false on error. * @see createModify() * @access public @@ -1168,8 +1179,9 @@ * even if a file with the same name is already archived. * See also createModify() method for more details. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. * @return true on success, false on error. * @see createModify() * @access public @@ -1227,13 +1239,15 @@ * for extraction in a different path than the origin files are. * See also addModify() method for file adding properties. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_add_dir A string which contains a path to be added to the - * memorized path of each element in the list. - * @param string $p_remove_dir A string which contains a path to be removed from - * the memorized path of each element in the list, when - * relevant. + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated by + * a single blank space. + * @param string $p_add_dir A string which contains a path to be added + * to the memorized path of each element in + * the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of each + * element in the list, when relevant. * @return boolean true on success, false on error. * @access public * @see addModify() @@ -1249,7 +1263,7 @@ if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_cleanFile(); $this->_error('Invalid file list'); @@ -1297,12 +1311,15 @@ * If a file/dir is not readable the file/dir is ignored. However an * error text is send to PEAR error. * - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_add_dir A string which contains a path to be added to the - * memorized path of each element in the list. - * @param string $p_remove_dir A string which contains a path to be removed from - * the memorized path of each element in the list, when + * @param array $p_filelist An array of filenames and directory + * names, or a single string with names + * separated by a single blank space. + * @param string $p_add_dir A string which contains a path to be + * added to the memorized path of each + * element in the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of + * each element in the list, when * relevant. * @return true on success, false on error. * @access public @@ -1311,13 +1328,14 @@ { $v_result = true; - if (!@is_file($this->_tarname)) - $v_result = $this->createModify($p_filelist, $p_add_dir, $p_remove_dir); + if (!$this->_isArchive()) + $v_result = $this->createModify($p_filelist, $p_add_dir, + $p_remove_dir); else { if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_error('Invalid file list'); return false; @@ -1336,17 +1354,19 @@ * end of the existing archive. If the archive does not yet exists it * is created. * - * @param string $p_filename A string which contains the full filename path - * that will be associated with the string. - * @param string $p_string The content of the file added in the archive. + * @param string $p_filename A string which contains the full + * filename path that will be associated + * with the string. + * @param string $p_string The content of the file added in + * the archive. * @return true on success, false on error. * @access public */ function addString($p_filename, $p_string) { $v_result = true; - - if (!@is_file($this->_tarname)) { + + if (!$this->_isArchive()) { if (!$this->_openWrite()) { return false; } @@ -1392,10 +1412,11 @@ * is returned. However the result can be a partial extraction that may * need to be manually cleaned. * - * @param string $p_path The path of the directory where the files/dir need to by - * extracted. - * @param string $p_remove_path Part of the memorized path that can be removed if - * present at the beginning of the file/dir path. + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. * @return boolean true on success, false on error. * @access public * @see extractList() @@ -1406,7 +1427,8 @@ $v_list_detail = array(); if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, "complete", 0, $p_remove_path); + $v_result = $this->_extractList($p_path, $v_list_detail, + "complete", 0, $p_remove_path); $this->_close(); } @@ -1442,12 +1464,14 @@ * in the directory indicated by the optional $p_path parameter. * If indicated the $p_remove_path can be used in the same way as it is * used in extractModify() method. - * @param array $p_filelist An array of filenames and directory names, or a single - * string with names separated by a single blank space. - * @param string $p_path The path of the directory where the files/dir need to by - * extracted. - * @param string $p_remove_path Part of the memorized path that can be removed if - * present at the beginning of the file/dir path. + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated + * by a single blank space. + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. * @return true on success, false on error. * @access public * @see extractModify() @@ -1460,14 +1484,15 @@ if (is_array($p_filelist)) $v_list = $p_filelist; elseif (is_string($p_filelist)) - $v_list = explode(" ", $p_filelist); + $v_list = explode($this->_separator, $p_filelist); else { $this->_error('Invalid string list'); return false; } if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, "partial", $v_list, $p_remove_path); + $v_result = $this->_extractList($p_path, $v_list_detail, "partial", + $v_list, $p_remove_path); $this->_close(); } @@ -1475,6 +1500,60 @@ } // }}} + // {{{ setAttribute() + /** + * This method set specific attributes of the archive. It uses a variable + * list of parameters, in the format attribute code + attribute values : + * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ','); + * @param mixed $argv variable list of attributes and values + * @return true on success, false on error. + * @access public + */ + function setAttribute() + { + $v_result = true; + + // ----- Get the number of variable list of arguments + if (($v_size = func_num_args()) == 0) { + return true; + } + + // ----- Get the arguments + $v_att_list = &func_get_args(); + + // ----- Read the attributes + $i=0; + while ($i<$v_size) { + + // ----- Look for next option + switch ($v_att_list[$i]) { + // ----- Look for options that request a string value + case ARCHIVE_TAR_ATT_SEPARATOR : + // ----- Check the number of parameters + if (($i+1) >= $v_size) { + $this->_error('Invalid number of parameters for ' + .'attribute ARCHIVE_TAR_ATT_SEPARATOR'); + return false; + } + + // ----- Get the value + $this->_separator = $v_att_list[$i+1]; + $i++; + break; + + default : + $this->_error('Unknow attribute code '.$v_att_list[$i].''); + return false; + } + + // ----- Next attribute + $i++; + } + + return $v_result; + } + // }}} + // {{{ _error() function _error($p_message) { @@ -1491,20 +1570,33 @@ } // }}} + // {{{ _isArchive() + function _isArchive($p_filename=NULL) + { + if ($p_filename == NULL) { + $p_filename = $this->_tarname; + } + clearstatcache(); + return @is_file($p_filename); + } + // }}} + // {{{ _openWrite() function _openWrite() { if ($this->_compress_type == 'gz') - $this->_file = @gzopen($this->_tarname, "wb"); + $this->_file = @gzopen($this->_tarname, "wb9"); else if ($this->_compress_type == 'bz2') $this->_file = @bzopen($this->_tarname, "wb"); else if ($this->_compress_type == 'none') $this->_file = @fopen($this->_tarname, "wb"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { - $this->_error('Unable to open in write mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in write mode \'' + .$this->_tarname.'\''); return false; } @@ -1521,12 +1613,14 @@ if ($this->_temp_tarname == '') { $this->_temp_tarname = uniqid('tar').'.tmp'; if (!$v_file_from = @fopen($this->_tarname, 'rb')) { - $this->_error('Unable to open in read mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in read mode \'' + .$this->_tarname.'\''); $this->_temp_tarname = ''; return false; } if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) { - $this->_error('Unable to open in write mode \''.$this->_temp_tarname.'\''); + $this->_error('Unable to open in write mode \'' + .$this->_temp_tarname.'\''); $this->_temp_tarname = ''; return false; } @@ -1550,7 +1644,8 @@ else if ($this->_compress_type == 'none') $this->_file = @fopen($v_filename, "rb"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { $this->_error('Unable to open in read mode \''.$v_filename.'\''); @@ -1571,10 +1666,12 @@ else if ($this->_compress_type == 'none') $this->_file = @fopen($this->_tarname, "r+b"); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); if ($this->_file == 0) { - $this->_error('Unable to open in read/write mode \''.$this->_tarname.'\''); + $this->_error('Unable to open in read/write mode \'' + .$this->_tarname.'\''); return false; } @@ -1585,7 +1682,8 @@ // {{{ _close() function _close() { - if (isset($this->_file)) { + //if (isset($this->_file)) { + if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') @gzclose($this->_file); else if ($this->_compress_type == 'bz2') @@ -1593,7 +1691,8 @@ else if ($this->_compress_type == 'none') @fclose($this->_file); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); $this->_file = 0; } @@ -1632,7 +1731,7 @@ // {{{ _writeBlock() function _writeBlock($p_binary_data, $p_len=null) { - if ($this->_file) { + if (is_resource($this->_file)) { if ($p_len === null) { if ($this->_compress_type == 'gz') @gzputs($this->_file, $p_binary_data); @@ -1641,7 +1740,8 @@ else if ($this->_compress_type == 'none') @fputs($this->_file, $p_binary_data); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } else { if ($this->_compress_type == 'gz') @gzputs($this->_file, $p_binary_data, $p_len); @@ -1650,7 +1750,8 @@ else if ($this->_compress_type == 'none') @fputs($this->_file, $p_binary_data, $p_len); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } } @@ -1659,13 +1760,10 @@ // }}} // {{{ _readBlock() - function _readBlock($p_len=null) + function _readBlock() { $v_block = null; - if ($this->_file) { - if ($p_len === null) - $p_len = 512; - + if (is_resource($this->_file)) { if ($this->_compress_type == 'gz') $v_block = @gzread($this->_file, 512); else if ($this->_compress_type == 'bz2') @@ -1673,8 +1771,8 @@ else if ($this->_compress_type == 'none') $v_block = @fread($this->_file, 512); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); - + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } return $v_block; } @@ -1683,12 +1781,13 @@ // {{{ _jumpBlock() function _jumpBlock($p_len=null) { - if ($this->_file) { + if (is_resource($this->_file)) { if ($p_len === null) $p_len = 1; - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz') { @gzseek($this->_file, @gztell($this->_file)+($p_len*512)); + } else if ($this->_compress_type == 'bz2') { // ----- Replace missing bztell() and bzseek() for ($i=0; $i<$p_len; $i++) @@ -1696,7 +1795,8 @@ } else if ($this->_compress_type == 'none') @fseek($this->_file, @ftell($this->_file)+($p_len*512)); else - $this->_error('Unknown or missing compression type ('.$this->_compress_type.')'); + $this->_error('Unknown or missing compression type (' + .$this->_compress_type.')'); } return true; @@ -1706,7 +1806,7 @@ // {{{ _writeFooter() function _writeFooter() { - if ($this->_file) { + if (is_resource($this->_file)) { // ----- Write the last 0 filled block for end of archive $v_binary_data = pack("a512", ''); $this->_writeBlock($v_binary_data); @@ -1733,8 +1833,10 @@ if (sizeof($p_list) == 0) return true; - for ($j=0; ($j<count($p_list)) && ($v_result); $j++) { - $v_filename = $p_list[$j]; + foreach ($p_list as $v_filename) { + if (!$v_result) { + break; + } // ----- Skip the current tar name if ($v_filename == $this->_tarname) @@ -1757,15 +1859,17 @@ $this->_warning("Directory '$v_filename' can not be read"); continue; } - $p_hitem = readdir($p_hdir); // '.' directory - $p_hitem = readdir($p_hdir); // '..' directory while (false !== ($p_hitem = readdir($p_hdir))) { - if ($v_filename != ".") - $p_temp_list[0] = $v_filename.'/'.$p_hitem; - else - $p_temp_list[0] = $p_hitem; + if (($p_hitem != '.') && ($p_hitem != '..')) { + if ($v_filename != ".") + $p_temp_list[0] = $v_filename.'/'.$p_hitem; + else + $p_temp_list[0] = $p_hitem; - $v_result = $this->_addList($p_temp_list, $p_add_dir, $p_remove_dir); + $v_result = $this->_addList($p_temp_list, + $p_add_dir, + $p_remove_dir); + } } unset($p_temp_list); @@ -1814,9 +1918,10 @@ $v_stored_filename = $this->_pathReduction($v_stored_filename); - if (is_file($p_filename)) { + if ($this->_isArchive($p_filename)) { if (($v_file = @fopen($p_filename, "rb")) == 0) { - $this->_warning("Unable to open file '$p_filename' in binary read mode"); + $this->_warning("Unable to open file '".$p_filename + ."' in binary read mode"); return true; } @@ -1856,7 +1961,8 @@ // ----- Calculate the stored filename $p_filename = $this->_translateWinPath($p_filename, false);; - if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), 0, 0, "", 0, 0)) + if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), + 0, 0, "", 0, 0)) return false; $i=0; @@ -1913,8 +2019,13 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", $v_reduce_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + $v_reduce_filename, $v_perms, $v_uid, + $v_gid, $v_size, $v_mtime); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -1944,7 +2055,8 @@ // }}} // {{{ _writeHeaderBlock() - function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, $p_type='', $p_uid=0, $p_gid=0) + function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, + $p_type='', $p_uid=0, $p_gid=0) { $p_filename = $this->_pathReduction($p_filename); @@ -1981,8 +2093,13 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", $p_filename, $v_perms, $v_uid, $v_gid, $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $p_type, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + $p_filename, $v_perms, $v_uid, $v_gid, + $v_size, $v_mtime); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $p_type, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -2034,8 +2151,12 @@ $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", '././@LongLink', 0, 0, 0, $v_size, 0); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", $v_typeflag, $v_linkname, $v_magic, $v_version, $v_uname, $v_gname, $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack("a100a8a8a8a12A12", + '././@LongLink', 0, 0, 0, $v_size, 0); + $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, $v_linkname, $v_magic, + $v_version, $v_uname, $v_gname, + $v_devmajor, $v_devminor, $v_prefix, ''); // ----- Calculate the checksum $v_checksum = 0; @@ -2097,7 +2218,10 @@ for ($i=156; $i<512; $i++) $v_checksum+=ord(substr($v_binary_data,$i,1)); - $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $v_binary_data); + $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/" + ."a8checksum/a1typeflag/a100link/a6magic/a2version/" + ."a32uname/a32gname/a8devmajor/a8devminor", + $v_binary_data); // ----- Extract the checksum $v_header['checksum'] = OctDec(trim($v_data['checksum'])); @@ -2108,7 +2232,9 @@ if (($v_checksum == 256) && ($v_header['checksum'] == 0)) return true; - $this->_error('Invalid checksum for file "'.$v_data['filename'].'" : '.$v_checksum.' calculated, '.$v_header['checksum'].' expected'); + $this->_error('Invalid checksum for file "'.$v_data['filename'] + .'" : '.$v_checksum.' calculated, ' + .$v_header['checksum'].' expected'); return false; } @@ -2122,7 +2248,8 @@ if (($v_header['typeflag'] = $v_data['typeflag']) == "5") { $v_header['size'] = 0; } - /* ----- All these fields are removed form the header because they do not carry interesting info + /* ----- All these fields are removed form the header because + they do not carry interesting info $v_header[link] = trim($v_data[link]); $v_header[magic] = trim($v_data[magic]); $v_header[version] = trim($v_data[version]); @@ -2190,7 +2317,8 @@ if ($v_header['filename'] == $p_filename) { if ($v_header['typeflag'] == "5") { - $this->_error('Unable to extract in string a directory entry {'.$v_header['filename'].'}'); + $this->_error('Unable to extract in string a directory ' + .'entry {'.$v_header['filename'].'}'); return NULL; } else { $n = floor($v_header['size']/512); @@ -2199,7 +2327,8 @@ } if (($v_header['size'] % 512) != 0) { $v_content = $this->_readBlock(); - $v_result_str .= substr($v_content, 0, ($v_header['size'] % 512)); + $v_result_str .= substr($v_content, 0, + ($v_header['size'] % 512)); } return $v_result_str; } @@ -2213,7 +2342,8 @@ // }}} // {{{ _extractList() - function _extractList($p_path, &$p_list_detail, $p_mode, $p_file_list, $p_remove_path) + function _extractList($p_path, &$p_list_detail, $p_mode, + $p_file_list, $p_remove_path) { $v_result=true; $v_nb = 0; @@ -2221,7 +2351,8 @@ $v_listing = false; $p_path = $this->_translateWinPath($p_path, false); - if ($p_path == '' || (substr($p_path, 0, 1) != '/' && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { + if ($p_path == '' || (substr($p_path, 0, 1) != '/' + && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { $p_path = "./".$p_path; } $p_remove_path = $this->_translateWinPath($p_remove_path); @@ -2251,7 +2382,7 @@ clearstatcache(); - While (strlen($v_binary_data = $this->_readBlock()) != 0) + while (strlen($v_binary_data = $this->_readBlock()) != 0) { $v_extract_file = FALSE; $v_extraction_stopped = 0; @@ -2259,8 +2390,9 @@ if (!$this->_readHeader($v_binary_data, $v_header)) return false; - if ($v_header['filename'] == '') + if ($v_header['filename'] == '') { continue; + } // ----- Look for long filename if ($v_header['typeflag'] == 'L') { @@ -2276,7 +2408,9 @@ // ----- Look if it is a directory if (substr($p_file_list[$i], -1) == '/') { // ----- Look if the directory is in the filename path - if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) == $p_file_list[$i])) { + if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) + && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) + == $p_file_list[$i])) { $v_extract_file = TRUE; break; } @@ -2296,8 +2430,10 @@ if (($v_extract_file) && (!$v_listing)) { if (($p_remove_path != '') - && (substr($v_header['filename'], 0, $p_remove_path_size) == $p_remove_path)) - $v_header['filename'] = substr($v_header['filename'], $p_remove_path_size); + && (substr($v_header['filename'], 0, $p_remove_path_size) + == $p_remove_path)) + $v_header['filename'] = substr($v_header['filename'], + $p_remove_path_size); if (($p_path != './') && ($p_path != '/')) { while (substr($p_path, -1) == '/') $p_path = substr($p_path, 0, strlen($p_path)-1); @@ -2308,16 +2444,21 @@ $v_header['filename'] = $p_path.'/'.$v_header['filename']; } if (file_exists($v_header['filename'])) { - if ((@is_dir($v_header['filename'])) && ($v_header['typeflag'] == '')) { - $this->_error('File '.$v_header['filename'].' already exists as a directory'); + if ( (@is_dir($v_header['filename'])) + && ($v_header['typeflag'] == '')) { + $this->_error('File '.$v_header['filename'] + .' already exists as a directory'); return false; } - if ((is_file($v_header['filename'])) && ($v_header['typeflag'] == "5")) { - $this->_error('Directory '.$v_header['filename'].' already exists as a file'); + if ( ($this->_isArchive($v_header['filename'])) + && ($v_header['typeflag'] == "5")) { + $this->_error('Directory '.$v_header['filename'] + .' already exists as a file'); return false; } if (!is_writeable($v_header['filename'])) { - $this->_error('File '.$v_header['filename'].' already exists and is write protected'); + $this->_error('File '.$v_header['filename'] + .' already exists and is write protected'); return false; } if (filemtime($v_header['filename']) > $v_header['mtime']) { @@ -2326,7 +2467,10 @@ } // ----- Check the directory availability and create it if necessary - elseif (($v_result = $this->_dirCheck(($v_header['typeflag'] == "5"?$v_header['filename']:dirname($v_header['filename'])))) != 1) { + elseif (($v_result + = $this->_dirCheck(($v_header['typeflag'] == "5" + ?$v_header['filename'] + :dirname($v_header['filename'])))) != 1) { $this->_error('Unable to create path for '.$v_header['filename']); return false; } @@ -2335,13 +2479,15 @@ if ($v_header['typeflag'] == "5") { if (!@file_exists($v_header['filename'])) { if (!@mkdir($v_header['filename'], 0777)) { - $this->_error('Unable to create directory {'.$v_header['filename'].'}'); + $this->_error('Unable to create directory {' + .$v_header['filename'].'}'); return false; } } } else { if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { - $this->_error('Error while opening {'.$v_header['filename'].'} in write binary mode'); + $this->_error('Error while opening {'.$v_header['filename'] + .'} in write binary mode'); return false; } else { $n = floor($v_header['size']/512); @@ -2358,17 +2504,18 @@ // ----- Change the file mode, mtime @touch($v_header['filename'], $v_header['mtime']); - if ($v_header['mode'] & 0111) { - // make file executable, obey umask - $mode = fileperms($v_header['filename']) | (~umask() & 0111); - @chmod($v_header['filename'], $mode); - } + // To be completed + //chmod($v_header[filename], DecOct($v_header[mode])); } // ----- Check the file size clearstatcache(); if (filesize($v_header['filename']) != $v_header['size']) { - $this->_error('Extracted file '.$v_header['filename'].' does not have the correct file size \''.filesize($v_filename).'\' ('.$v_header['size'].' expected). Archive may be corrupted.'); + $this->_error('Extracted file '.$v_header['filename'] + .' does not have the correct file size \'' + .filesize($v_header['filename']) + .'\' ('.$v_header['size'] + .' expected). Archive may be corrupted.'); return false; } } @@ -2388,7 +2535,8 @@ if ($v_listing || $v_extract_file || $v_extraction_stopped) { // ----- Log extracted files - if (($v_file_dir = dirname($v_header['filename'])) == $v_header['filename']) + if (($v_file_dir = dirname($v_header['filename'])) + == $v_header['filename']) $v_file_dir = ''; if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) $v_file_dir = '/'; @@ -2411,7 +2559,9 @@ $this->_close(); if (!@rename($this->_tarname, $this->_tarname.".tmp")) { - $this->_error('Error while renaming \''.$this->_tarname.'\' to temporary file \''.$this->_tarname.'.tmp\''); + $this->_error('Error while renaming \''.$this->_tarname + .'\' to temporary file \''.$this->_tarname + .'.tmp\''); return false; } @@ -2421,7 +2571,8 @@ $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb"); if ($v_temp_tar == 0) { - $this->_error('Unable to open file \''.$this->_tarname.'.tmp\' in binary read mode'); + $this->_error('Unable to open file \''.$this->_tarname + .'.tmp\' in binary read mode'); @rename($this->_tarname.".tmp", $this->_tarname); return false; } @@ -2451,8 +2602,10 @@ $v_buffered_lines[] = @bzread($v_temp_tar, 512); // ----- Read the following blocks but not the last one - while (strlen($v_buffered_lines[] = @bzread($v_temp_tar, 512)) > 0) { - $v_binary_data = pack("a512", array_shift($v_buffered_lines)); + while (strlen($v_buffered_lines[] + = @bzread($v_temp_tar, 512)) > 0) { + $v_binary_data = pack("a512", + array_shift($v_buffered_lines)); $this->_writeBlock($v_binary_data); } @@ -2460,11 +2613,13 @@ } if (!@unlink($this->_tarname.".tmp")) { - $this->_error('Error while deleting temporary file \''.$this->_tarname.'.tmp\''); + $this->_error('Error while deleting temporary file \'' + .$this->_tarname.'.tmp\''); } } else { - // ----- For not compressed tar, just add files before the last 512 bytes block + // ----- For not compressed tar, just add files before the last + // 512 bytes block if (!$this->_openReadWrite()) return false; @@ -2527,8 +2682,8 @@ // {{{ _pathReduction() /** - * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", and - * remove double slashes. + * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", + * rand emove double slashes. * * @param string $p_dir path to reduce * @@ -2557,11 +2712,14 @@ // ----- Ignore it and ignore the $i-1 $i--; } - else if (($v_list[$i] == '') && ($i!=(sizeof($v_list)-1)) && ($i!=0)) { + else if ( ($v_list[$i] == '') + && ($i!=(sizeof($v_list)-1)) + && ($i!=0)) { // ----- Ignore only the double '//' in path, // but not the first and last / } else { - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'.$v_result:''); + $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/' + .$v_result:''); } } } @@ -2576,7 +2734,8 @@ { if (OS_WINDOWS) { // ----- Look for potential disk letter - if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + if ( ($p_remove_disk_letter) + && (($v_position = strpos($p_path, ':')) != false)) { $p_path = substr($p_path, $v_position+1); } // ----- Change potential windows directory separator |
From: Sebastien D. <sde...@us...> - 2005-03-14 14:14:47
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26735 Modified Files: HISTORY Log Message: Update Tar support Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- HISTORY 7 Feb 2005 15:31:54 -0000 1.21 +++ HISTORY 14 Mar 2005 14:14:38 -0000 1.22 @@ -1,3 +1,6 @@ +2005-03-14: +- update tar.inc.php to match Tar 1.3.0 from PEAR. + 2005-02-07: - Add MIME message description in admin/index.php on upload failure. - Add application/x-tar in authorized formats. |
From: Sebastien D. <sde...@us...> - 2005-02-09 10:24:01
|
Update of /cvsroot/tslogparser/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25317 Modified Files: downloads.php features.php Log Message: Update website to v05 Index: downloads.php =================================================================== RCS file: /cvsroot/tslogparser/web/downloads.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- downloads.php 12 Jan 2005 15:49:02 -0000 1.3 +++ downloads.php 9 Feb 2005 10:23:52 -0000 1.4 @@ -11,7 +11,7 @@ <tr><td> </td></tr> <tr> <td> - <p>The latest stable release is <b>0.3</b> (Jan 11, 2005).</p> + <p>The latest stable release is <b>0.5</b> (Jan 27, 2005).</p> <p>It can be downloaded from <a href="http://sourceforge.net/project/showfiles.php?group_id=124567"> this place (SourceForge.net)</a>.</p> Index: features.php =================================================================== RCS file: /cvsroot/tslogparser/web/features.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- features.php 12 Jan 2005 15:49:02 -0000 1.3 +++ features.php 9 Feb 2005 10:23:52 -0000 1.4 @@ -5,7 +5,7 @@ <table border='0' width='100%'> <tr> <td bgcolor="#90ACC8"> - <h2><font color="#fffffe"> Version 0.3</font></h2> + <h2><font color="#fffffe"> Version 0.5</font></h2> </td> </tr> <tr><td> </td></tr> @@ -14,8 +14,34 @@ <p>Some screenshots of the main features are available <a href="http://sourceforge.net/project/screenshots.php?group_id=124567"> <i>here</i></a>.</p> - <p>Here is a list of new features from this release. + <p>Here is a list of new features from this release. See below for older features.</p> + <h3>Testsuite upload facility</h3> + <p>It is no more mandatory to have the testsuite files + available from the webserver filesystem.</p> + <p>The new upload facility allows the administrator to + supply the test suite release as a tar.gz file which + will be handled on the server.</p> + <p>In the current release, the archive must contain a + 'ts' directory, but in later releases more flexibility will + be added.</p> + <p> </p> + <h3>Easier Installation Procedure</h3> + <p>Since release 0.4, the <code>tslogparser</code> package + is also available as an installable RPM.</p> + <p>See INSTALL file for more information about the new + installation process.</p> + </td> + </tr> + <tr><td> </td></tr> + <tr> + <td bgcolor="#90ACC8"> + <h2><font color="#fffffe"> Version 0.3</font></h2> + </td> + </tr> + <tr><td> </td></tr> + <tr> + <td> <h3>Administration Interface</h3> <p>All database management tasks are now centralized in an administration page. From this page, you can add |
From: Sebastien D. <sde...@us...> - 2005-02-07 15:35:43
|
Update of /cvsroot/tslogparser/tslogparser/package In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9656/package Modified Files: tslogparser.spec Log Message: Fix rpm 'ts' directory rights Index: tslogparser.spec =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/package/tslogparser.spec,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- tslogparser.spec 27 Jan 2005 09:06:43 -0000 1.7 +++ tslogparser.spec 7 Feb 2005 15:35:13 -0000 1.8 @@ -8,7 +8,7 @@ %define name tslogparser %define version 0.5 -%define release 2 +%define release 4 %define filename tslogparser-v05 %define tslp_user tslogparser @@ -87,10 +87,13 @@ %config %{path_conf}/tslogparser.conf.php %{path_tslp} -%attr(0755,%{tslp_user},%{tslp_group}) %dir %{path_tslp}/ts +%attr(0777,%{tslp_user},%{tslp_group}) %dir %{path_tslp}/ts # The version changes do not appear here %changelog +* Mon Feb 07 2005 Sebastien Decugis <seb...@ex...> +- Changed 'ts' directory rights to '0777' to allow upload in this directory. + * Wed Jan 26 2005 Sebastien Decugis <seb...@ex...> - Added 'ts' directory and appropriate rights. |
From: Sebastien D. <sde...@us...> - 2005-02-07 15:32:04
|
Update of /cvsroot/tslogparser/tslogparser/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8824/admin Modified Files: index.php Log Message: Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/admin/index.php,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- index.php 26 Jan 2005 17:48:52 -0000 1.8 +++ index.php 7 Feb 2005 15:31:54 -0000 1.9 @@ -179,9 +179,10 @@ die(); } if (( $_FILES['tsarchive']['type'] != "application/x-gzip-compressed") + && ($_FILES['tsarchive']['type'] != "application/x-tar") && ($_FILES['tsarchive']['type'] != "application/x-gzip")) { - echo "<b>You have to supply the testsuite in a tar gzip'd format.</b>\n"; + echo "<b>You have to supply the testsuite in a tar gzip'd format (got '".htmlentities($_FILES['tsarchive']['type'])."').</b>\n"; db_fini(); require($root."footer.inc.php"); die(); |
From: Sebastien D. <sde...@us...> - 2005-02-07 15:32:04
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8824 Modified Files: HISTORY Log Message: Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- HISTORY 2 Feb 2005 10:13:35 -0000 1.20 +++ HISTORY 7 Feb 2005 15:31:54 -0000 1.21 @@ -1,3 +1,7 @@ +2005-02-07: +- Add MIME message description in admin/index.php on upload failure. +- Add application/x-tar in authorized formats. + 2005-01-27: tag v05 - Fix in tslogparser.spec file. |
From: Sebastien D. <sde...@us...> - 2005-02-02 10:13:46
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21300 Modified Files: HISTORY Log Message: fix Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- HISTORY 2 Feb 2005 01:20:24 -0000 1.19 +++ HISTORY 2 Feb 2005 10:13:35 -0000 1.20 @@ -13,7 +13,7 @@ (must find a better random name generator for the directory). - Modified the tslogparser.spec file to install a writtable 'ts' directory. -2005-02-25: Bryce Harrington <br...@os...> +2005-01-25: Bryce Harrington <br...@os...> - Fix typo in FAQ 2005-01-21: tag v04b |
From: Bryce H. <br...@us...> - 2005-02-02 01:21:07
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3634 Modified Files: HISTORY INSTALL Added Files: PACKAGING Log Message: Adding some documentation and making a couple fixes in others --- NEW FILE: PACKAGING --- This file describes how to create packages for TsLogParser. RPM Packaging ============= These directions may require some adaptation to your distro. They were written assuming RedHat, and tested on a RedHat 8.0 system. 1. Create a tarball dist package, if one is not already provided, and copy it to the RPM SOURCES directory: # cp tslogparser-v05.tar.gz /usr/src/redhat/SOURCES 2. The tslogparser spec file is in the package/ directory. Rename the spec file to: %{name}-%{version}-%{release}.spec # cp package/tslogparser.spec /usr/src/redhat/SPECS/tslogparser-0.5-3.spec 3. Customize this spec file for your settings: * Alter version/release number if needed * Verify user/group names match what you wish to use (these will be created if they do not already exist) * Verify other paths for placement of web, etc. and conf files 4. To regenerate an rpm, just issue: # rpmbuild --target noarch-redhat-linux -ta /usr/src/redhat/tslogparser-0.5-3.tar.gz Index: INSTALL =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/INSTALL,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- INSTALL 26 Jan 2005 17:48:51 -0000 1.8 +++ INSTALL 2 Feb 2005 01:20:31 -0000 1.9 @@ -7,7 +7,7 @@ 4. Initial database creation In case you're using the RPM file, you have to: --> Install the rpm +-> Install the rpm (or see PACKAGING for creating an RPM) rpm -i tslogparser-*.rpm -> Set up the database server (see step 2. below) -> Configure the /etc/tslogparser.conf.php file (see step 3.) Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- HISTORY 27 Jan 2005 09:45:53 -0000 1.18 +++ HISTORY 2 Feb 2005 01:20:24 -0000 1.19 @@ -13,6 +13,9 @@ (must find a better random name generator for the directory). - Modified the tslogparser.spec file to install a writtable 'ts' directory. +2005-02-25: Bryce Harrington <br...@os...> +- Fix typo in FAQ + 2005-01-21: tag v04b - Fix in link from database.inc.php |
From: Sebastien D. <sde...@us...> - 2005-02-01 13:40:41
|
Update of /cvsroot/tslogparser/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2306 Modified Files: foot.inc.php Log Message: Update from SourceForge.net staff Index: foot.inc.php =================================================================== RCS file: /cvsroot/tslogparser/web/foot.inc.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- foot.inc.php 12 Jan 2005 15:49:02 -0000 1.1 +++ foot.inc.php 1 Feb 2005 13:40:30 -0000 1.2 @@ -35,7 +35,7 @@ <p>Page hosted by : <br> <a href="http://sourceforge.net"> - <img src="http://sourceforge.net/sflogo.php?group_id=124567&type=5" + <img src="http://sflogo.sourceforge.net/sflogo.php?group_id=124567&type=5" width="210" height="62" border="0" alt="SourceForge.net Logo"> </a> </p> |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:48:16
|
Update of /cvsroot/tslogparser/web/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2930/admin Modified Files: index.php Log Message: Fix for sf.net config Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/web/admin/index.php,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- index.php 27 Jan 2005 10:37:52 -0000 1.2 +++ index.php 27 Jan 2005 10:47:56 -0000 1.3 @@ -179,6 +179,7 @@ die(); } if (( $_FILES['tsarchive']['type'] != "application/x-gzip-compressed") + && ($_FILES['tsarchive']['type'] != "application/x-tar") && ($_FILES['tsarchive']['type'] != "application/x-gzip")) { echo "<b>You have to supply the testsuite in a tar gzip'd format.</b>\n"; |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:38:09
|
Update of /cvsroot/tslogparser/web/admin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv955/admin Modified Files: index.php Added Files: tar.inc.php Log Message: Update demo to v05 source --- NEW FILE: tar.inc.php --- <?php /* This file is copied from the PEAR package, so PEAR installation is not required on server. We try at first to include the real PEAR file, and if this fails we then define our version. */ $ok= @include("Archive/Tar.php"); if (!$ok) { /* We did not find the file, so we define the class here */ /* The rest of this file is copied from the PEAR package */ /* PEAR.php file content */ // // +----------------------------------------------------------------------+ [...2556 lines suppressed...] { if (OS_WINDOWS) { // ----- Look for potential disk letter if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { $p_path = substr($p_path, $v_position+1); } // ----- Change potential windows directory separator if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { $p_path = strtr($p_path, '\\', '/'); } } return $p_path; } // }}} } /* Done */ } ?> Index: index.php =================================================================== RCS file: /cvsroot/tslogparser/web/admin/index.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- index.php 12 Jan 2005 15:49:03 -0000 1.1 +++ index.php 27 Jan 2005 10:37:52 -0000 1.2 @@ -53,6 +53,7 @@ /* We'll need functions defined in other files */ require($root."database.inc.php"); require($root."functions.inc.php"); +require($root."admin/tar.inc.php"); /* Handle tar files */ /* We'll need the database connexion */ db_init(); @@ -66,6 +67,7 @@ $modules=$tslp->list_modules(); +/* We copy some variables from the POST array to the GET array */ if (isset($_POST["action"])) { $_GET["action"]=$_POST["action"]; @@ -79,6 +81,13 @@ $_GET["run_name"] = $_POST["run_name"]; if (isset($_POST["run_descr"])) $_GET["run_descr"] = $_POST["run_descr"]; + + if (isset($_POST["add_ts"])) + $_GET["add_ts"] = $_POST["add_ts"]; + if (isset($_POST["ts_name"])) + $_GET["ts_name"] = $_POST["ts_name"]; + if (isset($_POST["ts_descr"])) + $_GET["ts_descr"] = $_POST["ts_descr"]; } /* Parse the GET parameters if any */ @@ -143,18 +152,17 @@ *****************************/ if (isset($_GET["add_ts"])) { - /* Check Step 3 parameters and eventually fall back to step 2 */ if (!isset($_GET["ts_name"])) $_GET["ts_name"]=""; if (!isset($_GET["ts_descr"])) $_GET["ts_descr"]=""; - if (!isset($_GET["ts_root"])) - $_GET["ts_root"]=""; +// if (!isset($_GET["ts_root"])) +// $_GET["ts_root"]=""; if (($_GET["action"] == 2) - && ( !trim($_GET["ts_name"]) - || !trim($_GET["ts_root"]))) + && ( !trim($_GET["ts_name"]) + || !isset($_FILES['tsarchive']))) { echo "<p>Please fill all <b>(*) fields.</b></p>\n"; $_GET["action"] = 1; @@ -162,22 +170,76 @@ if ($_GET["action"] == 2) { + /* Check the uploaded file type */ + if (!isset($_FILES['tsarchive'])) + { + echo "<b>Invalid parameters</b>\n"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + if (( $_FILES['tsarchive']['type'] != "application/x-gzip-compressed") + && ($_FILES['tsarchive']['type'] != "application/x-gzip")) + { + echo "<b>You have to supply the testsuite in a tar gzip'd format.</b>\n"; + db_fini(); + require($root."footer.inc.php"); + die(); + } + + /* Try expanding the archive */ + $tar = new Archive_Tar($_FILES['tsarchive']['tmp_name']); + $tar->setErrorHandling(PEAR_ERROR_PRINT); + + $tmpdir = $root."ts/".time(); + + if (!$tar->extractModify($tmpdir, "ts")) + { + echo "<b>Archive extraction failed.</b>\n"; + + db_fini(); + require($root."footer.inc.php"); + die(); + } + /* Here we're in step 2 in process: ready to proceed */ echo "<pre>\n"; - $tmp = $tslp->TS_parse($_GET["ts_name"], $_GET["ts_descr"], $_GET["ts_root"]); + $tmp = $tslp->TS_parse($_GET["ts_name"], $_GET["ts_descr"], $tmpdir); echo "</pre>\n"; if (!$tmp) { $_GET["action"] = 1; echo "<p><b>Error:</b> <i>".$tslp->last_error."</i>.</p>\n"; } + + /* In any case, remove the extracted archive now. */ + function deldir($dir) { + $dh=opendir($dir); + while ($file=readdir($dh)) { + if($file!="." && $file!="..") { + $fullpath=$dir."/".$file; + if(!is_dir($fullpath)) { + unlink($fullpath); + } else { + deldir($fullpath); + } + } + } + + closedir($dh); + + rmdir($dir); + } + + deldir($tmpdir); } if ($_GET["action"] < 2) { /* Output the new testsuite form */ - echo "<form method=\"GET\">\n"; + echo "<form enctype=\"multipart/form-data\" method=\"POST\">\n"; + echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"2097152\">"; echo " <input type=\"hidden\" name=\"action\" value=\"2\">\n"; echo " <input type=\"hidden\" name=\"add_ts\" value=\"add\">\n"; echo " <input type=\"hidden\" name=\"module\" value=\"".$_GET["module"]."\">\n"; @@ -201,8 +263,8 @@ <td><textarea name="ts_descr" rows="3" cols="79"><?php echo $_GET["ts_descr"]; ?></textarea></td> </tr> <tr> - <td>Path to new release(*):</td> - <td><input type="text" name="ts_root" size="80" value=<?php echo "\"".$_GET["ts_root"]."\""; ?>></td> + <td>New release archive (tar.gz expanding in 'ts' directory):</td> + <td><input name="tsarchive" type="file"></td> </tr> <tr> <td colspan=2 align=center><input type="submit" name="send" value="Send"></td> @@ -216,11 +278,6 @@ die(); } - /* Here we're in step 2 in process: ready to proceed */ - - $tslp->select_module($_GET["module"]) or die("Invalid plugin"); - - $tmp = $tslp->TS_parse($_GET["ts_name"], $_GET["ts_descr"], $_GET["ts_root"]); } |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:38:08
|
Update of /cvsroot/tslogparser/web/admin/modules In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv955/admin/modules Modified Files: opts.mod.php Log Message: Update demo to v05 source Index: opts.mod.php =================================================================== RCS file: /cvsroot/tslogparser/web/admin/modules/opts.mod.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- opts.mod.php 12 Jan 2005 15:49:04 -0000 1.1 +++ opts.mod.php 27 Jan 2005 10:37:52 -0000 1.2 @@ -139,7 +139,7 @@ /* Check the directory contains a coherent structure */ if ((!is_dir($path)) || (!is_dir($path."/conformance"))) { - $parent->last_error="Directory '$path' does not contain a valid source tree.\n"; + $parent->last_error="Directory '$path' does not contain a valid source tree -- check your archive format.\n"; return FALSE; } |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:38:06
|
Update of /cvsroot/tslogparser/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv955 Modified Files: database.inc.php Log Message: Update demo to v05 source Index: database.inc.php =================================================================== RCS file: /cvsroot/tslogparser/web/database.inc.php,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- database.inc.php 12 Jan 2005 15:49:02 -0000 1.1 +++ database.inc.php 27 Jan 2005 10:37:52 -0000 1.2 @@ -63,7 +63,7 @@ if ((!isset($CONFIG["version"])) || ($CONFIG["version"] < LATEST_VERSION)) { - die("<b>You need to update your database schema.</b>\n <a href='$root/admin/upgrade.php'>Click here</a>.\n"); + die("<b>You need to update your database schema.</b>\n <a href='".$root."admin/upgrade.php'>Click here</a>.\n"); } } |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:38:02
|
Update of /cvsroot/tslogparser/web/ts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv955/ts Added Files: README Log Message: Update demo to v05 source --- NEW FILE: README --- This directory will be used when uploaded testsuites are expanded. Make sure the user running the web server has enough privilege to create and delete entries in this directory (execute bit). |
From: Sebastien D. <sde...@us...> - 2005-01-27 10:36:25
|
Update of /cvsroot/tslogparser/web/ts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv621/ts Log Message: Directory /cvsroot/tslogparser/web/ts added to the repository |
From: Sebastien D. <sde...@us...> - 2005-01-27 09:46:03
|
Update of /cvsroot/tslogparser/tslogparser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21823 Modified Files: HISTORY Log Message: release v05 Index: HISTORY =================================================================== RCS file: /cvsroot/tslogparser/tslogparser/HISTORY,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- HISTORY 26 Jan 2005 17:48:51 -0000 1.17 +++ HISTORY 27 Jan 2005 09:45:53 -0000 1.18 @@ -1,3 +1,6 @@ +2005-01-27: tag v05 +- Fix in tslogparser.spec file. + 2005-01-26: - New directory: ts New file: admin/tar.inc.php |