--- docman.php 2002/07/29 09:36:22 1.24 +++ docman.php 2002/07/29 10:17:53 1.25 @@ -188,7 +188,8 @@ $title = "("._("Detail Page").")" ; StartHTML($title, $text) ; - echo "

" . $relDir . "/" . $fn . "

" ; + print "

".$relDir.$fn."

"; + if ($exists) { // get file info $fsize = filesize($fsPath) ; $fmodified = date("$gblDateFmt $gblTimeFmt", filemtime($fsPath)) ; @@ -632,10 +633,15 @@ if ( HTTP_GET_VAR("show_deleted") == 1 && ($dir = @opendir("$fsDir/.del")) ) { while ($item = readdir($dir)) { if ( substr($item,0,1) == "." || strstr($hide_items,",$item,") || !check_perm($relDir.$item,trperm_w) ) continue ; - $fileList[$item] = ".del/$item" ; - $fileDate[$item] = filemtime($fsDir.".del/$path") ; - $fileSize[$item] = filesize($fsDir.".del/$path") ; - $fileNote[$item] = ReadNote($fsDir.".del/$item"); + if (is_file($fsDir.".del/$item")) { + $fileList[$item] = ".del/$item" ; + $fileDate[$item] = filemtime($fsDir.".del/$item") ; + $fileSize[$item] = filesize($fsDir.".del/$item") ; + $fileNote[$item] = ReadNote($fsDir.".del/$item"); + } else { + $dirList[$item] = ".del/$item" ; + $dirNote[$item] = ReadNote($fsDir.".del/$item"); + } } closedir($dir) ; } @@ -733,6 +739,13 @@ $dir = $dirList[$key]; $info_url=self_args(array("A"=>"A=E", "F"=>"F=".urlencode($dir), "D"=>$D)); + if (substr($dir,0,5) == ".del/") { + $dir = substr($dir,5,strlen($dir)-5); + $deleted = " deleted"; + } else { + $deleted = ""; + } + $dir_url=$self."?D=".urlencode(chopsl($relDir)."/".$dir); include("$html/Navigate-dirEntry.html"); @@ -811,7 +824,7 @@ if (substr($file,0,5) != ".del/") { $file_url_html .= $file . "" . $a ; } else { - $file_url_html .= substr($file,5,strlen($file)-5) . " deleted "; + $file_url_html .= substr($file,5,strlen($file)-5) . " deleted"; } $note_html="".$gblIcon("note")."".ReadNote($path); @@ -1536,6 +1549,8 @@ function check_filename($file) { if (strstr($file,"..")) Error("Security violation","No parent dir .. allowed in file name $file",1); + // remove deleted directory (for undelete to work) + $file = str_replace(".del/","",$file); if (strstr($file,"/")) Error("Security violation","No slashes / allowed in file name $file",1); } @@ -1824,14 +1839,22 @@ break ; case "DELETE" : - if ( $CONFIRM != "on" ) break ; + if ( $CONFIRM != "on" ) break; - $tstr = "Attempt to delete non-existing object or " ; - $tstr .= "insufficient privileges: " ; + if ( isset($FN) && $FN != "") { + $path=$fsDir."/".$FN; + + $what = "file"; + if (is_dir($path)) { + $what = "dir"; + } + + if (! check_perm($relDir."/".$FN, trperm_w)) + Error("Access denied","User $gblLogin tried to erase $what $relDir/$FN without valid trustee.",1); + + $tstr = "Attempt to delete non-existing object or " ; + $tstr .= "insufficient privileges: " ; - if ( $FN != "") { // delete file - $path = $fsDir . "/" . $FN ; - $dir=dirname($path); $file=basename($path); if (! file_exists("$dir/.del")) { @@ -1839,22 +1862,17 @@ } // if ( ! @unlink($path) ) { - if ( ! rename($path,"$dir/.del/$file") ) { - LogIt($path,"file delete failed"); - Error("File delete failed", $tstr . $path) ; + if ( ! @rename($path,"$dir/.del/$file") ) { + LogIt($path,"$what delete failed"); + Error("Can't delete $what",$tstr.$relDir."/".$FN) ; } else { - LogIt($path,"file deleted",trperm_w); + LogIt($path,"$what deleted",trperm_w); MoveTo("$dir/.log/$file","$dir/.del/.log/"); MoveTo("$dir/.note/$file","$dir/.del/.note/"); MoveTo("$dir/.lock/$file","$dir/.del/.lock/"); } - } else { // delete directory - if ( ! @rrmdir($fsDir) ) { - Error("Rmdir failed", $tstr . $fsDir) ; - } else { - LogIt($path,"dir deleted",trperm_w); - $relDir = dirname($relDir) ; // move up - } + } else { + Error("Rmdir failed", $tstr . $fsDir) ; } break ;