/[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.19 by dpavlin, Thu Sep 7 10:19:34 2000 UTC revision 1.36 by dpavlin, Sun Mar 11 15:42:51 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 719  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 829  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 849  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 879  if (file_exists(".info.inc")) { Line 869  if (file_exists(".info.inc")) {
869    
870  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
871    
872  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
873    
874          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
875          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 889  function UploadPage($fsRoot, $relDir, $f Line 879  function UploadPage($fsRoot, $relDir, $f
879  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
880   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
881  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
882  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
883  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
884  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
885  <? } ?>  <? } ?>
# Line 924  function Error($title,$text="") { Line 914  function Error($title,$text="") {
914    
915  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
916    
 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  
   
 //////////////////////////////////////////////////////////////////  
   
917  function NoEntry() {  function NoEntry() {
918    
919          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 956  function NoEntry() { Line 923  function NoEntry() {
923          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
924          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
925          StartHTML($title,$text) ;          StartHTML($title,$text) ;
 ?>  
   
 <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>  
926    
 <?php  
927          EndHTML() ;          EndHTML() ;
928          exit ;          exit ;
929  }  }
930    
931  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
932    
933  function Logit($target,$msg) {  function LogIt($target,$msg) {
934    
935          $dir=dirname($target);          $dir=dirname($target);
936          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
# Line 996  function Logit($target,$msg) { Line 950  function Logit($target,$msg) {
950    
951  function WriteNote($target,$msg) {  function WriteNote($target,$msg) {
952    
953            $target=stripSlashes($target);
954          $dir=dirname($target);          $dir=dirname($target);
955          if (! file_exists($dir."/.note")) {          if (! file_exists($dir."/.note")) {
956                  mkdir($dir."/.note",0700);                  mkdir($dir."/.note",0700);
# Line 1012  function WriteNote($target,$msg) { Line 967  function WriteNote($target,$msg) {
967    
968  function ReadNote($target) {  function ReadNote($target) {
969    
970            $target=stripSlashes($target);
971          $dir=dirname($target);          $dir=dirname($target);
972          $file=basename($target);          $file=basename($target);
973          $msg="";          $msg="";
# Line 1028  function ReadNote($target) { Line 984  function ReadNote($target) {
984    
985  function MoveTo($source,$folder) {  function MoveTo($source,$folder) {
986    
987            $source=stripSlashes($source);
988          $file=basename($source);          $file=basename($source);
989          if (! file_exists($folder)) {          if (! file_exists($folder)) {
990                  mkdir($folder,0700);                  mkdir($folder,0700);
# Line 1041  function MoveTo($source,$folder) { Line 998  function MoveTo($source,$folder) {
998    
999  function Lock($target) {  function Lock($target) {
1000    
1001            $target=stripSlashes($target);
1002          $dir=dirname($target);          $dir=dirname($target);
1003          if (! file_exists($dir."/.lock")) {          if (! file_exists($dir."/.lock")) {
1004                  mkdir($dir."/.lock",0700);                  mkdir($dir."/.lock",0700);
# Line 1061  function Lock($target) { Line 1019  function Lock($target) {
1019    
1020  function CheckLock($target) {  function CheckLock($target) {
1021    
1022            $target=stripSlashes($target);
1023          $dir=dirname($target);          $dir=dirname($target);
1024          $file=basename($target);          $file=basename($target);
1025          $msg=0;          $msg=0;
# Line 1075  function CheckLock($target) { Line 1034  function CheckLock($target) {
1034    
1035  function Unlock($target) {  function Unlock($target) {
1036    
1037            $target=stripSlashes($target);
1038          $dir=dirname($target);          $dir=dirname($target);
1039          $file=basename($target);          $file=basename($target);
1040          if (file_exists($dir."/.lock/$file")) {          if (file_exists($dir."/.lock/$file")) {
# Line 1097  function urlpath($url) { Line 1057  function urlpath($url) {
1057    
1058  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1059    
1060  function safe_rename($from,$to) {  function safe_rename($fromdir,$fromfile,$tofile) {
1061          if (file_exists($from) && is_writable(dirname($to))) {          function try_rename($from,$to) {
1062                  rename($from,$to);                  print "$from -> $to\n";
1063                    if (file_exists($from) && is_writeable(dirname($to))) {
1064                            rename($from,$to);
1065                    }
1066            }
1067    
1068            function try_dir($todir) {
1069                    if (! file_exists($todir)) {
1070                            mkdir($todir,0700);
1071                    }
1072            }
1073    
1074            $to="$fromdir/$tofile";
1075            $todir=dirname($to);
1076            $tofile=basename($to);
1077    
1078            print "<pre>$fromdir / $fromfile -> $todir / $tofile\n\n";
1079    
1080            try_rename("$fromdir/$fromfile","$todir/$tofile");
1081            try_dir("$todir/.log");
1082            try_rename("$fromdir/.log/$fromfile","$todir/.log/$tofile");
1083            try_dir("$todir/.note");
1084            try_rename("$fromdir/.note/$fromfile","$todir/.note/$tofile");
1085            try_dir("$todir/.lock");
1086            try_rename("$fromdir/.lock/$fromfile","$todir/.lock/$tofile");
1087            try_dir("$todir/.bak");
1088            for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1089                    try_rename("$fromdir/.bak/$i/$fromfile","$todir/.bak/$i/$tofile");
1090          }          }
1091  }  }
1092    
1093    
1094  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
1095    
1096  // recursivly delete directory  // recursivly delete directory
# Line 1137  function ChangeLog($target,$msg) { Line 1125  function ChangeLog($target,$msg) {
1125  function DisplayChangeLog($day) {  function DisplayChangeLog($day) {
1126    
1127          global $gblFsRoot;          global $gblFsRoot;
1128          if (!file_exists("gblFsRoot/.changelog")) return;          if (!file_exists("$gblFsRoot/.changelog")) return;
1129          $log=fopen("$gblFsRoot/.changelog","r");          $log=fopen("$gblFsRoot/.changelog","r");
1130          $logarr = array();          $logarr = array();
1131          while($line = fgetcsv($log,255,"\t")) {          while($line = fgetcsv($log,255,"\t")) {
1132                  if ($day!=1 || $day==1 && $line[0]-time() < 24*60) {                  if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1133                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1134                  }                  }
1135          }          }
1136          fclose($log);          fclose($log);
1137          $cl1=" class=lst"; $cl2="";          $cl1=" class=LST"; $cl2="";
1138          print "<table border=0 width=100%>\n";          print "<table border=0 width=100%>\n";
1139          while ($e = array_shift($logarr)) {          while ($e = array_shift($logarr)) {
1140                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;
# Line 1157  function DisplayChangeLog($day) { Line 1145  function DisplayChangeLog($day) {
1145                  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";                  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";
1146          }          }
1147          print "</table>";          print "</table>";
1148            print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1149  }  }
1150    
1151  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
# Line 1176  function DisplayChangeLog($day) { Line 1165  function DisplayChangeLog($day) {
1165          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1166          // creation if password not yet set.          // creation if password not yet set.
1167          if ($STYLE == "get") { CSS() ; exit ; }          if ($STYLE == "get") { CSS() ; exit ; }
1168          if ($HASH != "") {  
1169                  CreateHash($USER, $PW) ;          $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
1170                  exit ;          if (! file_exists($htusers_file)) {
1171                    if (is_writeable(dirname($SCRIPT_FILENAME))) {
1172                            $htusers=fopen($htusers_file,"a+");
1173                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
1174                            fputs($htusers,"demo:full name:[md5_hash|auth_*]:e-mail\n");
1175                            fclose($htusers);
1176                            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!");
1177                            exit;
1178                    } else {
1179                            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!");
1180                            exit;
1181                    }
1182          }          }
1183            $htusers=fopen($htusers_file,"r");
1184            while($user = fgetcsv($htusers,255,":")) {
1185                    if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
1186                            $gblUserName=$user[1];
1187                            $gblPw=$user[2];
1188                            if (substr($gblPw,0,5) == "auth_" && file_exists("$gblIncDir/$gblPw.php")) {
1189                                    require("$gblIncDir/$gblPw.php");
1190                                    if ($gblPw($user)) {
1191                                            $gblPw=md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1192                                    } else {
1193                                            $gblPw="error".md5($PHP_AUTH_USER.$PHP_AUTH_PW);
1194                                    }
1195                            }
1196                            $gblEmail=$user[3];
1197                            continue ;
1198                    }
1199            }
1200            fclose($htusers);
1201    
1202          // authentication if $gblAuth == true          // authentication failure
1203          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1204                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin ) {
1205                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$HTTP_HOST\"") ;
1206                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1207                  NoEntry() ;                  NoEntry() ;
1208                  exit ;                  exit ;
# Line 1207  function DisplayChangeLog($day) { Line 1225  function DisplayChangeLog($day) {
1225          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1226    
1227          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1228          // i.e. /siteman          // i.e. /docman
1229    
1230          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;              $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1231          // i.e. /home/httpd/html/siteman          // i.e. /home/httpd/html/docman
1232    
1233          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1234            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1235            // or on script root
1236            $gblFsRoot = $fsScriptDir;
1237          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1238    
1239          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1240          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1241            
1242            if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
1243                    $webRoot  = "https://";
1244            } else {
1245                    $webRoot  = "http://";
1246            }
1247            $webRoot .= $GLOBALS["HTTP_HOST"] . $relScriptDir;
1248    
1249            $FN=stripSlashes($FN);
1250    
1251          switch ($POSTACTION) {          switch ($POSTACTION) {
1252          case "UPLOAD" :          case "UPLOAD" :
1253                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1227  function DisplayChangeLog($day) { Line 1256  function DisplayChangeLog($day) {
1256                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1257                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1258                  $source = $FN ;                  $source = $FN ;
1259                    if (! file_exists($source)) {
1260                            Error("You must select file with browse to upload it!");
1261                    }
1262                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1263                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1264                  } else {                  } else {
# Line 1259  function DisplayChangeLog($day) { Line 1291  function DisplayChangeLog($day) {
1291    
1292          case "SAVE" :          case "SAVE" :
1293                  $path = $gblFsRoot . $RELPATH ;                  $path = $gblFsRoot . $RELPATH ;
1294                    $path=stripSlashes($path);
1295                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1296                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1297                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1266  function DisplayChangeLog($day) { Line 1299  function DisplayChangeLog($day) {
1299                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1300                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1301                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1302                    $FILEDATA=stripSlashes($FILEDATA);
1303                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1304                  fclose($fh) ;                  fclose($fh) ;
1305                  clearstatcache() ;                  clearstatcache() ;
# Line 1289  function DisplayChangeLog($day) { Line 1323  function DisplayChangeLog($day) {
1323  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1324  // better keep it here altogether  // better keep it here altogether
1325  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1326                          if ( file_exists($path) && !is_writable($path) )                          if ( file_exists($path) && !is_writeable($path) )
1327                                  Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1328                          $fh = fopen($path, "w+") ;                          $fh = fopen($path, "w+") ;
1329                          if ($fh) {                          if ($fh) {
# Line 1361  function DisplayChangeLog($day) { Line 1395  function DisplayChangeLog($day) {
1395                  if ( $CONFIRM != "on" ) break ;                  if ( $CONFIRM != "on" ) break ;
1396    
1397                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");                  Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1398                  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");  
                 }  
   
1399                  break ;                  break ;
1400    
1401          case "NOTE" :            case "NOTE" :  
# Line 1399  function DisplayChangeLog($day) { Line 1426  function DisplayChangeLog($day) {
1426          // $A=Ci : checkin file $D/$F          // $A=Ci : checkin file $D/$F
1427          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1428          // default : display directory $D          // default : display directory $D
1429            
1430          switch ($A) {          switch ($A) {
1431          case "U" :          case "U" :
1432                  // upload to $relDir                  // upload to $relDir
1433                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1434                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1435                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1436                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1437                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1438                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1439                  EndHTML() ;                  EndHTML() ;
1440                  exit ;                  exit ;
1441          case "E" :          case "E" :
1442                    $F=stripSlashes($F);
1443                  // detail of $relDir/$F                  // detail of $relDir/$F
1444                  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) ;
1445                  exit ;                  exit ;
1446          case "C" :          case "C" :
1447                    $F=stripSlashes($F);
1448                  // listing of $relDir/$F                  // listing of $relDir/$F
1449                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1450                  exit ;                  exit ;
# Line 1423  function DisplayChangeLog($day) { Line 1452  function DisplayChangeLog($day) {
1452                  // checkout                  // checkout
1453                  Lock("$gblFsRoot/$relDir/$F");                  Lock("$gblFsRoot/$relDir/$F");
1454                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1455                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1456                  exit;                  exit;
1457          case "Ci" :          case "Ci" :
1458                    $F=stripSlashes($F);
1459                  // upload && update to $relDir                  // upload && update to $relDir
1460                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1461                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1462                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1463                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1464                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1465                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1466                  EndHTML() ;                  EndHTML() ;
# Line 1439  function DisplayChangeLog($day) { Line 1469  function DisplayChangeLog($day) {
1469                  // view                  // view
1470                  LogIt("$gblFsRoot/$relDir/$F","viewed");                  LogIt("$gblFsRoot/$relDir/$F","viewed");
1471                  header("Content-Disposition: attachment; filename=$F" );                  header("Content-Disposition: attachment; filename=$F" );
1472                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: $webRoot".urlpath("$relDir/$F"));
1473                  exit;                  exit;
1474          case "Ch" :          case "Ch" :
1475                  StartHTML("(File changes)","All changes chronologicaly...");                  StartHTML("(File changes)","All changes chronologicaly...");

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.36

  ViewVC Help
Powered by ViewVC 1.1.26