/[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.21 by dpavlin, Wed Sep 13 08:27:43 2000 UTC revision 1.41 by dpavlin, Mon Jun 4 08:20:55 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, $gblModDays ;          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 714  function Navigate($fsRoot,$relDir) { Line 694  function Navigate($fsRoot,$relDir) {
694  <?php  <?php
695          }          }
696    
697    function plural($name,$count) {
698            $out="$count $name";
699            if ($count > 1) {
700                    $out.="s";
701            }
702            return $out;
703    }
704    
705          // output subdirs          // output subdirs
706          if (sizeof($dirList) > 0) {          if (sizeof($dirList) > 0) {
707                  sort($dirList) ;                  sort($dirList) ;
708  ?>  ?>
709    
710  <TR><TD></TD><TD COLSPAN=5 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>  <TR><TD></TD><TD COLSPAN=2 CLASS=TOP>DIRECTORY NAME (<?= plural("dir",sizeof($dirList)) ?>)</TD><TD COLSPAN=3 CLASS=TOP>DIRECTORY NOTE</TR>
711    
712  <?php  <?php
713                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
714    
715                            $info_url=$self."?A=E&F=".urlencode($dir)."&D=".urlencode($relDir);
716                          $tstr = "<A HREF=\"" . $self . "?D=" ;                          $tstr = "<A HREF=\"" . $self . "?D=" ;
717                          $tstr .= urlencode($relDir."/".$dir) ;                          $tstr .= urlencode($relDir."/".$dir) ;
718                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
719                            $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($fsDir.$dir);
720  ?>  ?>
721    
722  <TR><TD><?= $gblIcon("fldr") ?></TD>  <TR><TD>
723  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
724    <?= $gblIcon("fldr") ?></A></TD>
725    <TD COLSPAN=2 CLASS=LST><?= $tstr ?></TD>
726    <TD COLSPAN=3 CLASS=LST><?= $note_html ?></TD></TR>
727    
728  <?php  <?php
729                  }  // iterate over dirs                  }  // iterate over dirs
# Line 739  function Navigate($fsRoot,$relDir) { Line 732  function Navigate($fsRoot,$relDir) {
732    
733  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>
734  </B></TD></TR>  </B></TD></TR>
735  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME (<?= plural("file",sizeof($fileList)) ?>)</TD>
736  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
737  <TD CLASS=TOP>NOTE</TD>  <TD CLASS=TOP>NOTE</TD>
738  <TD CLASS=TOP>LAST UPDATE</TD><TD CLASS=TOP>FILE SIZE</TD></TR>  <TD CLASS=TOP>LAST UPDATE</TD><TD CLASS=TOP>FILE SIZE</TD></TR>
# Line 829  function Navigate($fsRoot,$relDir) { Line 822  function Navigate($fsRoot,$relDir) {
822    
823  <?php  <?php
824            }  // iterate over files            }  // iterate over files
825          }  // end if no files          } else {  // end if no files
826    ?>
827     <TR><TD></TD><TD COLSPAN=5 CLASS=LST>
828      No files in this directory
829     </TD></TR>
830    <?
831            }
832    
833          if ($emptyDir) {          if ($emptyDir) {
834  ?>  ?>
# Line 849  function Navigate($fsRoot,$relDir) { Line 848  function Navigate($fsRoot,$relDir) {
848    
849  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
850    
 <TR><TD></TD><TD COLSPAN=5>  
851  <?  <?
852  if (file_exists(".info.inc")) {  if (file_exists(".info.inc")) {
853            print "<TR><TD></TD><TD COLSPAN=5>";
854          include(".info.inc");          include(".info.inc");
855            print "</TD></TR>
856            <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>";
857  }  }
858  ?>  ?>
 </TD></TR>  
   
 <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  
859    
860  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
861  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
# Line 866  if (file_exists(".info.inc")) { Line 864  if (file_exists(".info.inc")) {
864   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
865   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
866   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
867   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE" NAME="CREATE">
868     </NOBR>
869   <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
870   </NOBR>   </NOBR>
871  </TD></TR>  </TD></TR>
# Line 879  if (file_exists(".info.inc")) { Line 878  if (file_exists(".info.inc")) {
878    
879  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
880    
881  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
882    
883          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
884          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 889  function UploadPage($fsRoot, $relDir, $f Line 888  function UploadPage($fsRoot, $relDir, $f
888  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
889   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
890  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
891  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
892  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
893  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
894  <? } ?>  <? } ?>
# Line 924  function Error($title,$text="") { Line 923  function Error($title,$text="") {
923    
924  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
925    
 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  
   
 //////////////////////////////////////////////////////////////////  
   
926  function NoEntry() {  function NoEntry() {
927    
928          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 956  function NoEntry() { Line 932  function NoEntry() {
932          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
933          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
934          StartHTML($title,$text) ;          StartHTML($title,$text) ;
 ?>  
935    
 <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  
936          EndHTML() ;          EndHTML() ;
937          exit ;          exit ;
938  }  }
# Line 978  the source<BR>of this file.<BR><BR> Line 941  the source<BR>of this file.<BR><BR>
941    
942  function LogIt($target,$msg) {  function LogIt($target,$msg) {
943    
         $target=stripSlashes($target);  
944          $dir=dirname($target);          $dir=dirname($target);
945          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
946                  mkdir($dir."/.log",0700);                  mkdir($dir."/.log",0700);
# Line 1104  function urlpath($url) { Line 1066  function urlpath($url) {
1066    
1067  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1068    
1069  function safe_rename($from,$to) {  function safe_rename($fromdir,$fromfile,$tofile) {
1070          if (file_exists($from) && is_writable(dirname($to))) {          function try_rename($from,$to) {
1071                  rename($from,$to);  #               print "$from -> $to\n";
1072                    if (file_exists($from) && is_writeable(dirname($to))) {
1073                            rename($from,$to);
1074                    }
1075            }
1076    
1077            function try_dir($todir) {
1078                    if (! file_exists($todir)) {
1079                            mkdir($todir,0700);
1080                    }
1081            }
1082    
1083            $to="$fromdir/$tofile";
1084            $todir=dirname($to);
1085            $tofile=basename($to);
1086    
1087    #       print "<pre>$fromdir / $fromfile -> $todir / $tofile\n\n";
1088    
1089            try_rename("$fromdir/$fromfile","$todir/$tofile");
1090            try_dir("$todir/.log");
1091            try_rename("$fromdir/.log/$fromfile","$todir/.log/$tofile");
1092            try_dir("$todir/.note");
1093            try_rename("$fromdir/.note/$fromfile","$todir/.note/$tofile");
1094            try_dir("$todir/.lock");
1095            try_rename("$fromdir/.lock/$fromfile","$todir/.lock/$tofile");
1096            try_dir("$todir/.bak");
1097            for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1098                    try_rename("$fromdir/.bak/$i/$fromfile","$todir/.bak/$i/$tofile");
1099          }          }
1100  }  }
1101    
1102    
1103  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1104    
1105  // recursivly delete directory  // recursivly delete directory
# Line 1148  function DisplayChangeLog($day) { Line 1138  function DisplayChangeLog($day) {
1138          $log=fopen("$gblFsRoot/.changelog","r");          $log=fopen("$gblFsRoot/.changelog","r");
1139          $logarr = array();          $logarr = array();
1140          while($line = fgetcsv($log,255,"\t")) {          while($line = fgetcsv($log,255,"\t")) {
1141                  if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60))) {                  if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1142                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1143                  }                  }
1144          }          }
1145          fclose($log);          fclose($log);
1146          $cl1=" class=lst"; $cl2="";          $cl1=" class=LST"; $cl2="";
1147          print "<table border=0 width=100%>\n";          print "<table border=0 width=100%>\n";
1148          while ($e = array_shift($logarr)) {          while ($e = array_shift($logarr)) {
1149                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;
# Line 1184  function DisplayChangeLog($day) { Line 1174  function DisplayChangeLog($day) {
1174          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1175          // creation if password not yet set.          // creation if password not yet set.
1176          if ($STYLE == "get") { CSS() ; exit ; }          if ($STYLE == "get") { CSS() ; exit ; }
1177          if ($HASH != "") {  
1178                  CreateHash($USER, $PW) ;          $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
1179                  exit ;          if (! file_exists($htusers_file)) {
1180                    if (is_writeable(dirname($SCRIPT_FILENAME))) {
1181                            $htusers=fopen($htusers_file,"a+");
1182                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
1183                            fputs($htusers,"demo:full name:[md5_hash|auth_*]:e-mail\n");
1184                            fclose($htusers);
1185                            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!");
1186                            exit;
1187                    } else {
1188                            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!");
1189                            exit;
1190                    }
1191            }
1192            $htusers=fopen($htusers_file,"r");
1193            while($user = fgetcsv($htusers,255,":")) {
1194                    if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
1195                            $gblUserName=$user[1];
1196                            $gblPw=$user[2];
1197                            if (substr($gblPw,0,5) == "auth_" && file_exists("$gblIncDir/$gblPw.php")) {
1198                                    require("$gblIncDir/$gblPw.php");
1199                                    if ($gblPw($user)) {
1200                                            $gblPw=md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1201                                    } else {
1202                                            $gblPw="error".md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1203                                    }
1204                            }
1205                            $gblEmail=$user[3];
1206                            continue ;
1207                    }
1208          }          }
1209            fclose($htusers);
1210    
1211          // authentication if $gblAuth == true          // authentication failure
1212          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1213                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin ) {
1214                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$HTTP_HOST\"") ;
1215                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1216                  NoEntry() ;                  NoEntry() ;
1217                  exit ;                  exit ;
# Line 1204  function DisplayChangeLog($day) { Line 1223  function DisplayChangeLog($day) {
1223                  $relDir = urldecode($D) ;  // then use GET                  $relDir = urldecode($D) ;  // then use GET
1224          }                }      
1225    
1226            $relDir=stripSlashes($relDir);
1227    
1228          if ($relDir == "/") $relDir = "" ;                if ($relDir == "/") $relDir = "" ;      
1229          // default : website root = ""          // default : website root = ""
1230    
# Line 1215  function DisplayChangeLog($day) { Line 1236  function DisplayChangeLog($day) {
1236          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1237    
1238          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1239          // i.e. /siteman          // i.e. /docman
1240    
1241          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;              $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1242          // i.e. /home/httpd/html/siteman          // i.e. /home/httpd/html/docman
1243    
1244          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1245            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1246            // or on script root
1247            $gblFsRoot = $fsScriptDir;
1248          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1249    
1250          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1251          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1252            
1253            if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
1254                    $webRoot  = "https://";
1255            } else {
1256                    $webRoot  = "http://";
1257            }
1258            $webRoot .= $GLOBALS["HTTP_HOST"] . $relScriptDir;
1259    
1260            $FN=stripSlashes($FN);
1261    
1262            if (file_exists("$fsScriptDir/.docman.conf")) {
1263                    include("$fsScriptDir/.docman.conf");
1264            }
1265    
1266          switch ($POSTACTION) {          switch ($POSTACTION) {
1267          case "UPLOAD" :          case "UPLOAD" :
1268                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1235  function DisplayChangeLog($day) { Line 1271  function DisplayChangeLog($day) {
1271                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1272                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1273                  $source = $FN ;                  $source = $FN ;
1274                    if (! file_exists($source)) {
1275                            Error("You must select file with browse to upload it!");
1276                    }
1277                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1278                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1279                  } else {                  } else {
# Line 1267  function DisplayChangeLog($day) { Line 1306  function DisplayChangeLog($day) {
1306    
1307          case "SAVE" :          case "SAVE" :
1308                  $path = $gblFsRoot . $RELPATH ;                  $path = $gblFsRoot . $RELPATH ;
1309                    $path=stripSlashes($path);
1310                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1311                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1312                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1274  function DisplayChangeLog($day) { Line 1314  function DisplayChangeLog($day) {
1314                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1315                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1316                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1317                    $FILEDATA=stripSlashes($FILEDATA);
1318                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1319                  fclose($fh) ;                  fclose($fh) ;
1320                  clearstatcache() ;                  clearstatcache() ;
# Line 1297  function DisplayChangeLog($day) { Line 1338  function DisplayChangeLog($day) {
1338  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1339  // better keep it here altogether  // better keep it here altogether
1340  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1341                          if ( file_exists($path) && !is_writable($path) )                          if ( file_exists($path) && !is_writeable($path) )
1342                                  Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1343                          $fh = fopen($path, "w+") ;                          $fh = fopen($path, "w+") ;
1344                          if ($fh) {                          if ($fh) {
# Line 1369  function DisplayChangeLog($day) { Line 1410  function DisplayChangeLog($day) {
1410                  if ( $CONFIRM != "on" ) break ;                  if ( $CONFIRM != "on" ) break ;
1411    
1412                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1413                  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");  
                 }  
   
1414                  break ;                  break ;
1415    
1416          case "NOTE" :            case "NOTE" :  
# Line 1408  function DisplayChangeLog($day) { Line 1442  function DisplayChangeLog($day) {
1442          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1443          // default : display directory $D          // default : display directory $D
1444    
         $F=stripSlashes($F);  
   
1445          switch ($A) {          switch ($A) {
1446          case "U" :          case "U" :
1447                  // upload to $relDir                  // upload to $relDir
1448                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1449                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1450                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1451                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1452                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1453                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1454                  EndHTML() ;                  EndHTML() ;
1455                  exit ;                  exit ;
1456          case "E" :          case "E" :
1457                    $F=stripSlashes($F);
1458                  // detail of $relDir/$F                  // detail of $relDir/$F
1459                  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) ;
1460                  exit ;                  exit ;
1461          case "C" :          case "C" :
1462                    $F=stripSlashes($F);
1463                  // listing of $relDir/$F                  // listing of $relDir/$F
1464                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1465                  exit ;                  exit ;
# Line 1433  function DisplayChangeLog($day) { Line 1467  function DisplayChangeLog($day) {
1467                  // checkout                  // checkout
1468                  Lock("$gblFsRoot/$relDir/$F");                  Lock("$gblFsRoot/$relDir/$F");
1469                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1470                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1471                  exit;                  exit;
1472          case "Ci" :          case "Ci" :
1473                    $F=stripSlashes($F);
1474                  // upload && update to $relDir                  // upload && update to $relDir
1475                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1476                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1477                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1478                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1479                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1480                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1481                  EndHTML() ;                  EndHTML() ;
# Line 1449  function DisplayChangeLog($day) { Line 1484  function DisplayChangeLog($day) {
1484                  // view                  // view
1485                  LogIt("$gblFsRoot/$relDir/$F","viewed");                  LogIt("$gblFsRoot/$relDir/$F","viewed");
1486                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1487                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1488                  exit;                  exit;
1489          case "Ch" :          case "Ch" :
1490                  StartHTML("(File changes)","All changes chronologicaly...");                  StartHTML("(File changes)","All changes chronologicaly...");

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.41

  ViewVC Help
Powered by ViewVC 1.1.26