/[docman]/docman.php
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /docman.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.14 by dpavlin, Wed Sep 6 11:00:14 2000 UTC revision 1.40 by dpavlin, Fri Apr 6 08:46:42 2001 UTC
# Line 35  Line 35 
35  /*             existent address after file modifications.       */  /*             existent address after file modifications.       */
36    
37  /*  /*
         2000-07-25 Dobrica Pavlinusic <dpavlin@rot13.org>  
38    
39          nuked exec calls (unsecure)          This project is now called Directory Manager.
         nuked writeable function (replaced by php is_writeable)  
         added support for https (tested with apache+mod_ssl)  
         added users file  
         date format user-selectable  
         cycle backup files in bak directory  
         support links as directoryes (for now)  
         support of file history logging  
         undelete capabilities (delete moves to .del directory)  
40    
41          2000-07-26 DbP          For more info, please see web pages at
42            http://www.rot13.org/~dpavlin/docman.html
43    
44          added more checking on entered filename (when creating file/dir)          It's relased under GPL by
45          added rename option          Dobrica Pavlinusic <dpavlin@rot13.org>
46    
47    
48  IMPORTANT INSTALLATION NOTE:  IMPORTANT INSTALLATION NOTE:
# Line 59  IMPORTANT INSTALLATION NOTE: Line 51  IMPORTANT INSTALLATION NOTE:
51          deleted files!          deleted files!
52    
53          .htusers is in form:          .htusers is in form:
54          login:Real Name:md5(loginpassword)          login:Real Name:[md5(loginpassword)|auth_*]:email@host.dom
55    
56    
57  TODO:  TODO:
58          mixed file/directory output (add type to each entry,          mixed file/directory output (add type to each entry,
59                  real support for links)                  real support for links)
60          retrieve old versions of files (overwritten)          access controll
61          show last lock date  
           
62  */  */
63    
64  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
# Line 80  TODO: Line 71  TODO:
71    
72  // GLOBAL PARAMETERS  // GLOBAL PARAMETERS
73  // =================  // =================
74  // Make modifications here to suit siteman to your needs  // Make modifications here to suit docman to your needs
75    
76  //      error_reporting(4) ;            // how verbose ?  //      error_reporting(4) ;            // how verbose ?
77    
78            // from where to include auth_*.php modules?
79            $gblIncDir = "/home/httpd/docman";
80    
81          // username/password should not be system          // username/password should not be system
82          // usernames/passwords !!          // usernames/passwords !!
83    
 //      $gblPw    = "hash_of_your_username_and_password" ;  
   
 //      $gblAuth  = false ;             // use builtin authentication  
         $gblAuth  = true ;             // use builtin authentication  
         $gblHash  = "md5" ;             // hash function to use  
   
84          $gblPw    = "";          $gblPw    = "";
85    
86          if ($gblAuth) {          // date format
                 $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";  
                 if (! file_exists($htusers_file)) {  
                         $htusers=fopen($htusers_file,"a+");  
                         fputs($htusers,"# Change owner of $htusers_file to root !!\n");  
                         fputs($htusers,"demo:full name:md5_hash\n");  
                         fclose($htusers);  
                 }  
                 $htusers=fopen($htusers_file,"r");  
                 while($user = fgetcsv($htusers,255,":")) {  
                         if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {  
                                 $gblUserName=$user[1];  
                                 $gblPw=$user[2];  
                                 $gblEmail=$user[3];  
                                 continue ;  
                         }  
                 }  
                 fclose($htusers);  
         }  
   
87  //      $gblDateFmt="D, F d, Y";  //      $gblDateFmt="D, F d, Y";
 //      $gblTimeFmt="g:i:sA";  
   
88          $gblDateFmt="Y-m-d";          $gblDateFmt="Y-m-d";
89    
90            // time format
91    //      $gblTimeFmt="g:i:sA";
92          $gblTimeFmt="H:i:s";          $gblTimeFmt="H:i:s";
93    
94          // Number of backup files to keep          // Number of backup files to keep
# Line 130  TODO: Line 100  TODO:
100          // choose GifIcon below unless you have the M$          // choose GifIcon below unless you have the M$
101          // WingDings font installed on your system          // WingDings font installed on your system
102    
103          $gblIcon = "GifIcon" ;          // MockIcon or GifIcon          $gblIcon="GifIcon";             // MockIcon or GifIcon
104    
105          // the directory below should be /icons/ or /icons/small/          // the directory below should be /icons/ or /icons/small/
106          // on Apache; a set of icons is included in the distribution          // on Apache; a set of icons is included in the distribution
107    
108          $gblIconLocation = "/icons/" ;          $gblIconLocation="/icons/";
109    
110          // files you want to be able to edit in text mode          // files you want to be able to edit in text mode
111          // and view with (primitive) syntax highlighting          // and view with (primitive) syntax highlighting
# Line 154  TODO: Line 124  TODO:
124    
125  function StartHTML($title,$text="") {  function StartHTML($title,$text="") {
126    
127          $title = "Site Manager " . $title ;          $title = "Document Manager " . $title ;
128          $host  = $GLOBALS["HTTP_HOST"] ;          $host  = $GLOBALS["HTTP_HOST"] ;
129          $self  = $GLOBALS["PHP_SELF"] ;          $self  = $GLOBALS["PHP_SELF"] ;
130  ?>  ?>
# Line 233  A:HOVER { color:red; } Line 203  A:HOVER { color:red; }
203    
204  function DetailPage($fsRoot,$relDir,$fn) {  function DetailPage($fsRoot,$relDir,$fn) {
205                    
206          global $gblEditable, $gblImages ;          global $gblEditable, $gblImages, $webRoot ;
207          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
208    
209          $relPath  = $relDir . "/" . $fn ;          $relPath  = $relDir . "/" . $fn ;
# Line 252  function DetailPage($fsRoot,$relDir,$fn) Line 222  function DetailPage($fsRoot,$relDir,$fn)
222                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
223    
224          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
225          $text .= "delete a single document on this " ;          if (is_dir($fsPath)) {
226                    $text .="delete a directory on this " ;
227            } else {
228                    $text .= "delete a single document on this " ;
229            };
230          $text .= "web site." ;            $text .= "web site." ;  
231          $title = "(Detail Page)" ;          $title = "(Detail Page)" ;
232          StartHTML($title, $text) ;          StartHTML($title, $text) ;
# Line 262  function DetailPage($fsRoot,$relDir,$fn) Line 236  function DetailPage($fsRoot,$relDir,$fn)
236                  $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
237                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
238                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
239                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  $fuid=fileowner($fsPath);
240                    $fgid=filegroup($fsPath);
241                    $userinfo = posix_getpwuid($fuid);
242                    $grpinfo = posix_getgrgid($fgid);
243                    echo "<PRE>";
244                    if (!is_dir($fsPath)) echo "    file size: " . $fsize . " Bytes<BR>" ;
245                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
246                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
247                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . $userinfo["name"] . " [$fuid]</B><BR>" ;
248                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . $grpinfo["name"] . " [$fgid]</B><BR>" ;
249                  echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
250                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
251                  echo "</PRE>" ;                  echo "</PRE>" ;
252    
253          }          }
254    
255          if ( $editable && ($writable || !$exists) && !$file_lock ) {          if ( !is_dir($fsPath) && $editable && ($writable || !$exists) && !$file_lock ) {
256                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
257                  rewind($fh) ;                  rewind($fh) ;
258                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 301  echo($fstr) ; ?></TEXTAREA> Line 280  echo($fstr) ; ?></TEXTAREA>
280          }          }
281          if ( !$file_lock && $ext!="" && strstr(join(' ',$gblImages),$ext) ) {            if ( !$file_lock && $ext!="" && strstr(join(' ',$gblImages),$ext) ) {  
282                  $info  = getimagesize($fsPath) ;                  $info  = getimagesize($fsPath) ;
283                  $tstr = "<IMG SRC=\"".urlpath($relPath)."\" BORDER=0 " ;                  $tstr = "<IMG SRC=\"$webRoot".urlpath($relPath)."\" BORDER=0 " ;
284                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
285                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
286  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
# Line 367  echo($fstr) ; ?></TEXTAREA> Line 346  echo($fstr) ; ?></TEXTAREA>
346  </FORM>  </FORM>
347    
348  <?php  <?php
349            
350          $name=basename("$fsDir/$fn");          $name=basename("$fsDir/$fn");
351          $logname=dirname("$fsDir/$fn")."/.log/$name";          $logname=dirname("$fsDir/$fn")."/.log/$name";
352          $bakdir=dirname("$fsDir/$fn")."/.bak";          $bakdir=dirname("$fsDir/$fn")."/.bak";
353          if (file_exists($logname)) {          if (file_exists($logname)) {
354                  $log=fopen($logname,"r");                  $log=fopen($logname,"r");
355                  $cl1=" class=lst"; $cl2="";                  $cl1=" class=LST"; $cl2="";
356                  $logarr = array();                  $logarr = array();
357                  while($line = fgetcsv($log,255,"\t")) {                  while($line = fgetcsv($log,255,"\t")) {
358                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;
359                          array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));                          array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));
360                  }                  }
361                  fclose($log);                  fclose($log);
362                  print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";                  if (is_dir("$fsDir/$fn")) {
363                            $whatis="DIRECTORY";
364                    } else {
365                            $whatis="FILE";
366                    }
367                    print "<hr><br><b>CHANGES TO THIS $whatis</b><br><table border=0 width=100%>\n";
368                  $bakcount = 0;  // start from 0, skip fist backup (it's current)                  $bakcount = 0;  // start from 0, skip fist backup (it's current)
369                  while ($e = array_shift($logarr)) {                  while ($e = array_shift($logarr)) {
370                          if (strstr($e[4],"upload")) {                          if (strstr($e[4],"upload")) {
371                                  if (file_exists("$bakdir/$bakcount/$name")) {                                  if (file_exists("$bakdir/$bakcount/$name")) {
372                                          $e[4]="<a href=\"".dirname($relPath)."/.bak/$bakcount/$name\">$e[4]</a>";                                          $e[4]="<a href=\"$webRoot".urlpath(dirname($relPath)."/.bak/$bakcount/$name")."\">$e[4]</a>";
373                                  }                                  }
374                                  $bakcount++;                                  $bakcount++;
375                          }                          }
# Line 646  function GifIcon($txt) { Line 630  function GifIcon($txt) {
630    
631  function Navigate($fsRoot,$relDir) {  function Navigate($fsRoot,$relDir) {
632    
633          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon, $gblModDays, $webRoot ;
634    
635          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
636          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {  
637                  $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;          $fsDir = $fsRoot . $relDir . "/" ; // current directory
         } else {  
                 $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;  
         }  
         $fsDir    = $fsRoot . $relDir . "/" ; // current directory  
638    
639          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;
640    
# Line 695  function Navigate($fsRoot,$relDir) { Line 675  function Navigate($fsRoot,$relDir) {
675                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";                  $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
676          }          }
677          $text .= " or revise files on this web site." ;          $text .= " or revise files on this web site." ;
678            $text .= "<br>Examine list of files <a href=\"$self?A=Ch1\">changed in last day</a> or <a href=\"$self?A=Ch\">all changes</a>.";
679          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
680    
681          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
# Line 718  function Navigate($fsRoot,$relDir) { Line 699  function Navigate($fsRoot,$relDir) {
699                  sort($dirList) ;                  sort($dirList) ;
700  ?>  ?>
701    
702  <TR><TD></TD><TD COLSPAN=5 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>  <TR><TD></TD><TD COLSPAN=2 CLASS=TOP>DIRECTORY NAME</TD><TD COLSPAN=3 CLASS=TOP>DIRECTORY NOTE</TR>
703    
704  <?php  <?php
705                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
706    
707                            $info_url=$self."?A=E&F=".urlencode($dir)."&D=".urlencode($relDir);
708                          $tstr = "<A HREF=\"" . $self . "?D=" ;                          $tstr = "<A HREF=\"" . $self . "?D=" ;
709                          $tstr .= urlencode($relDir."/".$dir) ;                          $tstr .= urlencode($relDir."/".$dir) ;
710                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
711                            $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($fsDir.$dir);
712  ?>  ?>
713    
714  <TR><TD><?= $gblIcon("fldr") ?></TD>  <TR><TD>
715  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
716    <?= $gblIcon("fldr") ?></A></TD>
717    <TD COLSPAN=2 CLASS=LST><?= $tstr ?></TD>
718    <TD COLSPAN=3 CLASS=LST><?= $note_html ?></TD></TR>
719    
720  <?php  <?php
721                  }  // iterate over dirs                  }  // iterate over dirs
# Line 828  function Navigate($fsRoot,$relDir) { Line 814  function Navigate($fsRoot,$relDir) {
814    
815  <?php  <?php
816            }  // iterate over files            }  // iterate over files
817          }  // end if no files          } else {  // end if no files
818    ?>
819     <TR><TD></TD><TD COLSPAN=5 CLASS=LST>
820      No files in this directory
821     </TD></TR>
822    <?
823            }
824    
825          if ($emptyDir) {          if ($emptyDir) {
826  ?>  ?>
# Line 848  function Navigate($fsRoot,$relDir) { Line 840  function Navigate($fsRoot,$relDir) {
840    
841  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
842    
 <TR><TD></TD><TD COLSPAN=5>  
843  <?  <?
844  if (file_exists(".info.inc")) {  if (file_exists(".info.inc")) {
845            print "<TR><TD></TD><TD COLSPAN=5>";
846          include(".info.inc");          include(".info.inc");
847            print "</TD></TR>
848            <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>";
849  }  }
850  ?>  ?>
 </TD></TR>  
   
 <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  
851    
852  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
853  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
# Line 865  if (file_exists(".info.inc")) { Line 856  if (file_exists(".info.inc")) {
856   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
857   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
858   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
859   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE" NAME="CREATE">
860     </NOBR>
861   <NOBR>OR <A HREF="<?= $self ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE   <NOBR>OR <A HREF="<?= $self ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE
862   </NOBR>   </NOBR>
863  </TD></TR>  </TD></TR>
# Line 878  if (file_exists(".info.inc")) { Line 870  if (file_exists(".info.inc")) {
870    
871  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
872    
873  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
874    
875          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
876          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 888  function UploadPage($fsRoot, $relDir, $f Line 880  function UploadPage($fsRoot, $relDir, $f
880  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
881   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
882  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
883  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
884  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
885  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
886  <? } ?>  <? } ?>
# Line 923  function Error($title,$text="") { Line 915  function Error($title,$text="") {
915    
916  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
917    
 function CreateHash($user, $pw) {  
   
         global $gblHash ;  // hash function to use  
   
         if ($user == "" || $pw == "") {  
                 $text = "either no password or no username supplied" ;  
                 Error("Create Hash",$text) ;  
         }  
         $title = "(Create Hash)" ;  
         StartHTML($title) ;  
         echo "<P ALIGN=center>" ;  
         echo "<BLOCKQUOTE>Copy the value below and paste it " ;  
         echo "into the<BR>value for \$gblPw in the source of " ;  
         echo "this file<BR><BR><B>" . $gblHash($user.$pw) ;  
         echo "</B><BR><BR>Hash function: " . $gblHash ;  
         echo "</BLOCKQUOTE></P>" ;  
         EndHTML() ;  
         exit ;  
   
 } // end function CreateHash  
   
 //////////////////////////////////////////////////////////////////  
   
918  function NoEntry() {  function NoEntry() {
919    
920          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 955  function NoEntry() { Line 924  function NoEntry() {
924          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
925          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
926          StartHTML($title,$text) ;          StartHTML($title,$text) ;
 ?>  
927    
 <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">  
 <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">  
 <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">  
   
 <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  
 Click below to <B>generate a password hash</B><BR>from  
 the username-password pair you just<BR>entered. Then include the hash in  
 the source<BR>of this file.<BR><BR>  
 <INPUT TYPE="SUBMIT" VALUE="CREATE HASH">  
 </BLOCKQUOTE></FORM>  
   
 <?php  
928          EndHTML() ;          EndHTML() ;
929          exit ;          exit ;
930  }  }
931    
932  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
933    
934  function Logit($target,$msg) {  function LogIt($target,$msg) {
935    
936          $dir=dirname($target);          $dir=dirname($target);
937          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
# Line 995  function Logit($target,$msg) { Line 951  function Logit($target,$msg) {
951    
952  function WriteNote($target,$msg) {  function WriteNote($target,$msg) {
953    
954            $target=stripSlashes($target);
955          $dir=dirname($target);          $dir=dirname($target);
956          if (! file_exists($dir."/.note")) {          if (! file_exists($dir."/.note")) {
957                  mkdir($dir."/.note",0700);                  mkdir($dir."/.note",0700);
# Line 1011  function WriteNote($target,$msg) { Line 968  function WriteNote($target,$msg) {
968    
969  function ReadNote($target) {  function ReadNote($target) {
970    
971            $target=stripSlashes($target);
972          $dir=dirname($target);          $dir=dirname($target);
973          $file=basename($target);          $file=basename($target);
974          $msg="";          $msg="";
# Line 1027  function ReadNote($target) { Line 985  function ReadNote($target) {
985    
986  function MoveTo($source,$folder) {  function MoveTo($source,$folder) {
987    
988            $source=stripSlashes($source);
989          $file=basename($source);          $file=basename($source);
990          if (! file_exists($folder)) {          if (! file_exists($folder)) {
991                  mkdir($folder,0700);                  mkdir($folder,0700);
# Line 1040  function MoveTo($source,$folder) { Line 999  function MoveTo($source,$folder) {
999    
1000  function Lock($target) {  function Lock($target) {
1001    
1002            $target=stripSlashes($target);
1003          $dir=dirname($target);          $dir=dirname($target);
1004          if (! file_exists($dir."/.lock")) {          if (! file_exists($dir."/.lock")) {
1005                  mkdir($dir."/.lock",0700);                  mkdir($dir."/.lock",0700);
# Line 1060  function Lock($target) { Line 1020  function Lock($target) {
1020    
1021  function CheckLock($target) {  function CheckLock($target) {
1022    
1023            $target=stripSlashes($target);
1024          $dir=dirname($target);          $dir=dirname($target);
1025          $file=basename($target);          $file=basename($target);
1026          $msg=0;          $msg=0;
# Line 1074  function CheckLock($target) { Line 1035  function CheckLock($target) {
1035    
1036  function Unlock($target) {  function Unlock($target) {
1037    
1038            $target=stripSlashes($target);
1039          $dir=dirname($target);          $dir=dirname($target);
1040          $file=basename($target);          $file=basename($target);
1041          if (file_exists($dir."/.lock/$file")) {          if (file_exists($dir."/.lock/$file")) {
# Line 1096  function urlpath($url) { Line 1058  function urlpath($url) {
1058    
1059  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1060    
1061  function safe_rename($from,$to) {  function safe_rename($fromdir,$fromfile,$tofile) {
1062          if (file_exists($from) && is_writable(dirname($to))) {          function try_rename($from,$to) {
1063                  rename($from,$to);  #               print "$from -> $to\n";
1064                    if (file_exists($from) && is_writeable(dirname($to))) {
1065                            rename($from,$to);
1066                    }
1067            }
1068    
1069            function try_dir($todir) {
1070                    if (! file_exists($todir)) {
1071                            mkdir($todir,0700);
1072                    }
1073            }
1074    
1075            $to="$fromdir/$tofile";
1076            $todir=dirname($to);
1077            $tofile=basename($to);
1078    
1079    #       print "<pre>$fromdir / $fromfile -> $todir / $tofile\n\n";
1080    
1081            try_rename("$fromdir/$fromfile","$todir/$tofile");
1082            try_dir("$todir/.log");
1083            try_rename("$fromdir/.log/$fromfile","$todir/.log/$tofile");
1084            try_dir("$todir/.note");
1085            try_rename("$fromdir/.note/$fromfile","$todir/.note/$tofile");
1086            try_dir("$todir/.lock");
1087            try_rename("$fromdir/.lock/$fromfile","$todir/.lock/$tofile");
1088            try_dir("$todir/.bak");
1089            for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1090                    try_rename("$fromdir/.bak/$i/$fromfile","$todir/.bak/$i/$tofile");
1091            }
1092    }
1093    
1094    
1095    //////////////////////////////////////////////////////////////////
1096    
1097    // recursivly delete directory
1098    
1099    function rrmdir($dir) {
1100            $handle=opendir($dir);
1101            while ($file = readdir($handle)) {
1102                    if ($file != "." && $file != "..") {
1103                            if (is_dir("$dir/$file"))
1104                                    rrmdir("$dir/$file");
1105                            else
1106                                    if (! @unlink("$dir/$file")) return(0);
1107                    }
1108          }          }
1109            closedir($handle);
1110            return @rmdir($dir);
1111    }
1112    
1113    //////////////////////////////////////////////////////////////////
1114    
1115    function ChangeLog($target,$msg) {
1116    
1117            global $gblFsRoot;
1118            $log=fopen("$gblFsRoot/.changelog","a+");
1119            if (substr($target,0,strlen($gblFsRoot)) == $gblFsRoot)
1120                    $target=substr($target,strlen($gblFsRoot),strlen($target)-strlen($gblFsRoot));
1121            fputs($log,time()."\t$target\t$GLOBALS[gblUserName]\t$msg\n");
1122            fclose($log);
1123    
1124    }
1125    
1126    function DisplayChangeLog($day) {
1127    
1128            global $gblFsRoot;
1129            if (!file_exists("$gblFsRoot/.changelog")) return;
1130            $log=fopen("$gblFsRoot/.changelog","r");
1131            $logarr = array();
1132            while($line = fgetcsv($log,255,"\t")) {
1133                    if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1134                            array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1135                    }
1136            }
1137            fclose($log);
1138            $cl1=" class=LST"; $cl2="";
1139            print "<table border=0 width=100%>\n";
1140            while ($e = array_shift($logarr)) {
1141                    $cl=$cl1; $cl1=$cl2; $cl2=$cl;
1142                    $date = date("$GLOBALS[gblDateFmt]", $e[0]);
1143                    $time = date("$GLOBALS[gblTimeFmt]", $e[0]);
1144                    $dir = dirname($e[1]);
1145                    $file = basename($e[1]);
1146                    print "<tr><td$cl>$date</td><td$cl>$time</td><td$cl><a href=\"$GLOBALS[PHP_SELF]?D=".urlencode($dir)."\">$dir</a>/$file</td><td$cl>$e[2]</td><td$cl>$e[3]</td></tr>\n";
1147            }
1148            print "</table>";
1149            print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1150  }  }
1151    
1152  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
# Line 1119  function safe_rename($from,$to) { Line 1166  function safe_rename($from,$to) {
1166          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1167          // creation if password not yet set.          // creation if password not yet set.
1168          if ($STYLE == "get") { CSS() ; exit ; }          if ($STYLE == "get") { CSS() ; exit ; }
1169          if ($HASH != "") {  
1170                  CreateHash($USER, $PW) ;          $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
1171                  exit ;          if (! file_exists($htusers_file)) {
1172                    if (is_writeable(dirname($SCRIPT_FILENAME))) {
1173                            $htusers=fopen($htusers_file,"a+");
1174                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
1175                            fputs($htusers,"demo:full name:[md5_hash|auth_*]:e-mail\n");
1176                            fclose($htusers);
1177                            Error("Proto user file created!","Please edit <tt>$htusers_file</tt> and set it correct permissions (<B>not writable by web server as it is now!</b>). You can add users using <tt>adduser.pl</tt> script!");
1178                            exit;
1179                    } else {
1180                            Error("Can't create proto user file!","Please make directory <tt>".dirname($htusers_file)."</tt> writable or create <tt>.htusers</tt> file by hand using <tt>adduser.pl</tt> script!");
1181                            exit;
1182                    }
1183          }          }
1184            $htusers=fopen($htusers_file,"r");
1185            while($user = fgetcsv($htusers,255,":")) {
1186                    if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
1187                            $gblUserName=$user[1];
1188                            $gblPw=$user[2];
1189                            if (substr($gblPw,0,5) == "auth_" && file_exists("$gblIncDir/$gblPw.php")) {
1190                                    require("$gblIncDir/$gblPw.php");
1191                                    if ($gblPw($user)) {
1192                                            $gblPw=md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1193                                    } else {
1194                                            $gblPw="error".md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1195                                    }
1196                            }
1197                            $gblEmail=$user[3];
1198                            continue ;
1199                    }
1200            }
1201            fclose($htusers);
1202    
1203          // authentication if $gblAuth == true          // authentication failure
1204          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1205                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin ) {
1206                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$HTTP_HOST\"") ;
1207                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1208                  NoEntry() ;                  NoEntry() ;
1209                  exit ;                  exit ;
# Line 1139  function safe_rename($from,$to) { Line 1215  function safe_rename($from,$to) {
1215                  $relDir = urldecode($D) ;  // then use GET                  $relDir = urldecode($D) ;  // then use GET
1216          }                }      
1217    
1218            $relDir=stripSlashes($relDir);
1219    
1220          if ($relDir == "/") $relDir = "" ;                if ($relDir == "/") $relDir = "" ;      
1221          // default : website root = ""          // default : website root = ""
1222    
# Line 1150  function safe_rename($from,$to) { Line 1228  function safe_rename($from,$to) {
1228          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1229    
1230          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1231          // i.e. /siteman          // i.e. /docman
1232    
1233          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;              $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1234          // i.e. /home/httpd/html/siteman          // i.e. /home/httpd/html/docman
1235    
1236          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1237            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1238            // or on script root
1239            $gblFsRoot = $fsScriptDir;
1240          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1241    
1242          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1243          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1244            
1245            if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
1246                    $webRoot  = "https://";
1247            } else {
1248                    $webRoot  = "http://";
1249            }
1250            $webRoot .= $GLOBALS["HTTP_HOST"] . $relScriptDir;
1251    
1252            $FN=stripSlashes($FN);
1253    
1254            if (file_exists("$fsScriptDir/.docman.conf")) {
1255                    include("$fsScriptDir/.docman.conf");
1256            }
1257    
1258          switch ($POSTACTION) {          switch ($POSTACTION) {
1259          case "UPLOAD" :          case "UPLOAD" :
1260                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1170  function safe_rename($from,$to) { Line 1263  function safe_rename($from,$to) {
1263                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1264                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1265                  $source = $FN ;                  $source = $FN ;
1266                    if (! file_exists($source)) {
1267                            Error("You must select file with browse to upload it!");
1268                    }
1269                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1270                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1271                  } else {                  } else {
# Line 1197  function safe_rename($from,$to) { Line 1293  function safe_rename($from,$to) {
1293                  if (isset($FILENAME)) {                  if (isset($FILENAME)) {
1294                          Unlock($target);                          Unlock($target);
1295                  }                  }
1296                    ChangeLog($target,"updated");
1297                  break ;                  break ;
1298    
1299          case "SAVE" :          case "SAVE" :
1300                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . $RELPATH ;
1301                    $path=stripSlashes($path);
1302                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1303                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1304                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1208  function safe_rename($from,$to) { Line 1306  function safe_rename($from,$to) {
1306                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1307                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1308                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1309                    $FILEDATA=stripSlashes($FILEDATA);
1310                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1311                  fclose($fh) ;                  fclose($fh) ;
1312                  clearstatcache() ;                  clearstatcache() ;
1313                  Logit($path,"saved changes");                  Logit($path,"saved changes");
1314                    ChangeLog($path,"saved changes");
1315                  break ;                  break ;
1316    
1317          case "CREATE" :          case "CREATE" :
# Line 1230  function safe_rename($from,$to) { Line 1330  function safe_rename($from,$to) {
1330  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1331  // better keep it here altogether  // better keep it here altogether
1332  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1333                          if ( file_exists($path) && !is_writable($path) )                          if ( file_exists($path) && !is_writeable($path) )
1334                                  Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1335                          $fh = fopen($path, "w+") ;                          $fh = fopen($path, "w+") ;
1336                          if ($fh) {                          if ($fh) {
# Line 1242  function safe_rename($from,$to) { Line 1342  function safe_rename($from,$to) {
1342                          }                          }
1343                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;                          $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1344                          header("Location: " . $tstr) ;                          header("Location: " . $tstr) ;
1345                            ChangeLog($target,"created");
1346                          exit ;                          exit ;
1347                  }                  }
1348                  break ;                  break ;
# Line 1274  function safe_rename($from,$to) { Line 1375  function safe_rename($from,$to) {
1375                          }                          }
1376                  }                  }
1377                  else {  // delete directory                  else {  // delete directory
1378                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rrmdir($fsDir) ) {
1379                      Error("Rmdir failed", $tstr . $fsDir) ;                      Error("Rmdir failed", $tstr . $fsDir) ;
1380                    }                    }
1381                    else {                    else {
# Line 1301  function safe_rename($from,$to) { Line 1402  function safe_rename($from,$to) {
1402                  if ( $CONFIRM != "on" ) break ;                  if ( $CONFIRM != "on" ) break ;
1403    
1404                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1405                  safe_rename("$fsDir/$FN","$fsDir/$NEWNAME");                  safe_rename($fsDir,$FN,$NEWNAME);
                 safe_rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");  
                 safe_rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");  
                 safe_rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");  
                 for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {  
                         safe_rename("$fsDir/.bak/$i/$FN","$fsDir/.bak/$i/$NEWNAME");  
                 }  
   
1406                  break ;                  break ;
1407    
1408          case "NOTE" :            case "NOTE" :  
# Line 1339  function safe_rename($from,$to) { Line 1433  function safe_rename($from,$to) {
1433          // $A=Ci : checkin file $D/$F          // $A=Ci : checkin file $D/$F
1434          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1435          // default : display directory $D          // default : display directory $D
1436            
1437          switch ($A) {          switch ($A) {
1438          case "U" :          case "U" :
1439                  // upload to $relDir                  // upload to $relDir
1440                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1441                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1442                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1443                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1444                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1445                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1446                  EndHTML() ;                  EndHTML() ;
1447                  exit ;                  exit ;
1448          case "E" :          case "E" :
1449                    $F=stripSlashes($F);
1450                  // detail of $relDir/$F                  // detail of $relDir/$F
1451                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F") || is_dir("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1452                  exit ;                  exit ;
1453          case "C" :          case "C" :
1454                    $F=stripSlashes($F);
1455                  // listing of $relDir/$F                  // listing of $relDir/$F
1456                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1457                  exit ;                  exit ;
# Line 1363  function safe_rename($from,$to) { Line 1459  function safe_rename($from,$to) {
1459                  // checkout                  // checkout
1460                  Lock("$gblFsRoot/$relDir/$F");                  Lock("$gblFsRoot/$relDir/$F");
1461                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1462                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1463                  exit;                  exit;
1464          case "Ci" :          case "Ci" :
1465                    $F=stripSlashes($F);
1466                  // upload && update to $relDir                  // upload && update to $relDir
1467                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1468                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1469                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1470                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1471                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1472                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1473                  EndHTML() ;                  EndHTML() ;
# Line 1379  function safe_rename($from,$to) { Line 1476  function safe_rename($from,$to) {
1476                  // view                  // view
1477                  LogIt("$gblFsRoot/$relDir/$F","viewed");                  LogIt("$gblFsRoot/$relDir/$F","viewed");
1478                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1479                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1480                    exit;
1481            case "Ch" :
1482                    StartHTML("(File changes)","All changes chronologicaly...");
1483                    DisplayChangeLog(0);    // all
1484                    EndHTML() ;
1485                    exit;
1486            case "Ch1" :
1487                    StartHTML("(File changes)","Changes to files in last day...");
1488                    DisplayChangeLog(1);
1489                    EndHTML() ;
1490                  exit;                  exit;
1491          }          }
1492    

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.40

  ViewVC Help
Powered by ViewVC 1.1.26