/[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.1 by dpavlin, Fri May 12 12:01:08 2000 UTC revision 1.10 by dpavlin, Fri Aug 4 11:23:07 2000 UTC
# Line 34  Line 34 
34  /*             PHP3. Fixed bug which would send you to a non-   */  /*             PHP3. Fixed bug which would send you to a non-   */
35  /*             existent address after file modifications.       */  /*             existent address after file modifications.       */
36    
37    /*
38            2000-07-25 Dobrica Pavlinusic <dpavlin@rot13.org>
39    
40            nuked exec calls (unsecure)
41            nuked writeable function (replaced by php is_writeable)
42            added support for https (tested with apache+mod_ssl)
43            added users file
44            date format user-selectable
45            cycle backup files in bak directory
46            support links as directoryes (for now)
47            support of file history logging
48            undelete capabilities (delete moves to .del directory)
49    
50            2000-07-26 DbP
51    
52            added more checking on entered filename (when creating file/dir)
53            added rename option
54    
55    
56    IMPORTANT INSTALLATION NOTE:
57            deny serving of .* (dot-something) files in web server!
58            Otherwise, uses can access your log files, users and/or
59            deleted files!
60    
61            .htusers is in form:
62            login:Real Name:md5(loginpassword)
63    
64    
65    TODO:
66            mixed file/directory output (add type to each entry,
67                    real support for links)
68            retrieve old versions of files (overwritten)
69    */
70    
71  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
72    
73  // TODO : Don't let the file be modified itself. Create a hash of  // TODO : Don't let the file be modified itself. Create a hash of
# Line 51  Line 85 
85          // username/password should not be system          // username/password should not be system
86          // usernames/passwords !!          // usernames/passwords !!
87    
88          // your (hashed) username/password here  //      $gblPw    = "hash_of_your_username_and_password" ;
89          $gblPw    = "hash_of_your_username_and_password" ;                
90            //      $gblAuth  = false ;             // use builtin authentication
91          $gblAuth  = false ;             // use builtin authentication          $gblAuth  = true ;             // use builtin authentication
92          $gblHash  = "md5" ;             // hash function to use          $gblHash  = "md5" ;             // hash function to use
93    
94            $gblPw    = "";
95    
96            if ($gblAuth) {
97                    $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
98                    if (! file_exists($htusers_file)) {
99                            $htusers=fopen($htusers_file,"a+");
100                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
101                            fputs($htusers,"demo:full name:md5_hash\n");
102                            fclose($htusers);
103                    }
104                    $htusers=fopen($htusers_file,"r");
105                    while($user = fgetcsv($htusers,255,":")) {
106                            if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
107                                    $gblUserName=$user[1];
108                                    $gblPw=$user[2];
109                                    continue ;
110                            }
111                    }
112                    fclose($htusers);
113            }
114    
115    //      $gblDateFmt="D, F d, Y";
116    //      $gblTimeFmt="g:i:sA";
117    
118            $gblDateFmt="Y-m-d";
119            $gblTimeFmt="H:i:s";
120    
121    // Number of backup files to keep
122            $gblNumBackups=5;
123    
124          // choose GifIcon below unless you have the M$          // choose GifIcon below unless you have the M$
125          // WingDings font installed on your system          // WingDings font installed on your system
126    
# Line 65  Line 129 
129          // the directory below should be /icons/ or /icons/small/          // the directory below should be /icons/ or /icons/small/
130          // on Apache; a set of icons is included in the distribution          // on Apache; a set of icons is included in the distribution
131    
132          $gblIconLocation = "icons/" ;          $gblIconLocation = "/icons/" ;
133    
134          // files you want to be able to edit in text mode          // files you want to be able to edit in text mode
135          // and view with (primitive) syntax highlighting          // and view with (primitive) syntax highlighting
# Line 91  function StartHTML($title,$text="") { Line 155  function StartHTML($title,$text="") {
155    
156  <HTML>  <HTML>
157  <HEAD>  <HEAD>
158   <TITLE><?php echo $host . " " . $title ?></TITLE>   <TITLE><?= $host . " " . $title ?></TITLE>
159   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">
160   <META NAME="keywords" CONTENT="site manager, web site maintenance">   <META NAME="keywords" CONTENT="site manager, web site maintenance">
161   <META NAME="robots" CONTENT="noindex">   <META NAME="robots" CONTENT="noindex">
162   <META HTTP-EQUIV="expires" CONTENT="0">   <META HTTP-EQUIV="expires" CONTENT="0">
163   <LINK REL="stylesheet" TYPE="text/css"   <LINK REL="stylesheet" TYPE="text/css"
164          HREF="<?php echo $self ?>?STYLE=get">          HREF="<?= $self ?>?STYLE=get">
165  </HEAD>  </HEAD>
166  <BODY BGCOLOR="#FFFFFF">  <BODY BGCOLOR="#FFFFFF">
167   <H3 ALIGN="RIGHT"><?php echo $host ?></H3>   <H3 ALIGN="RIGHT"><?= $host ?></H3>
168  <TABLE BORDER=0 WIDTH="100%"><TR>  <TABLE BORDER=0 WIDTH="100%"><TR>
169   <TD CLASS=INV><?php echo $title ?></TD></TR></TABLE>   <TD CLASS=INV><?= $title ?></TD></TR></TABLE>
170   <P><?php echo $text ?></P>   <P><?= $text ?></P>
171    
172  <?php  <?php
173  } // end function StartHTML  } // end function StartHTML
# Line 115  function EndHTML() { Line 179  function EndHTML() {
179    
180  <HR>  <HR>
181  <P CLASS=FTR>  <P CLASS=FTR>
182  <B><?php echo date("D, F d, Y") ?> -  <B><?= date($GLOBALS[gblDateFmt]) ?> -
183  <?php echo date("g:i:sA") ?></B><BR>ANYPORTAL(php) Site Manager  <?= date($GLOBALS[gblTimeFmt]) ?> -
184  - &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>  <?= $GLOBALS[gblUserName] ?>
185  - &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>  <small> [<a href="<?= $GLOBALS["PHP_SELF"] ?>?relogin=<?= $GLOBALS[gblPw] ?>">logout</a>]</small>
186    </B>
187    <BR>ANYPORTAL(php) Site Manager
188    <br><small>
189    &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,
190    &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>,
191    &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>
192    </small>
193  </P>  </P>
194  <BR><BR><BR></BODY></HTML>  <BR>
195    <? //include(".debug.inc") ?>
196    <BR><BR></BODY></HTML>
197    
198  <?php  <?php
199  } // end function EndHTML  } // end function EndHTML
# Line 130  function EndHTML() { Line 203  function EndHTML() {
203  function CSS() {  function CSS() {
204  ?>  ?>
205    
206  BODY,TD,P,H1,H2,H3 { font-family:Helvetica,Arial,sans-serif; }  BODY,TD,P,H1,H2,H3 { font-family:Verdana,Helvetica,Arial,sans-serif; }
207  .BLK { color:black; }  .BLK { color:black; }
208  .RED { color:red; }  .RED { color:red; }
209  .TOP { color:red; font-size:70%; } /* table headings */  .TOP { color:red; font-size:70%; } /* table headings */
# Line 164  function DetailPage($fsRoot,$relDir,$fn) Line 237  function DetailPage($fsRoot,$relDir,$fn)
237          $exists   = file_exists($fsPath) ;          $exists   = file_exists($fsPath) ;
238          $ext      = strtolower(strrchr($relPath,".")) ;          $ext      = strtolower(strrchr($relPath,".")) ;
239          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;
240          $writable = Writeable($fsPath) ;          $writable = is_writeable($fsPath) ;
241            $file_lock = CheckLock($fsPath);
242    
243          if (!$editable && !$exists)          if (!$editable && !$exists)
244                  Error("Creation unsupported for type",$relPath) ;                  Error("Creation unsupported for type",$relPath) ;
245          if (!exists && !Writeable($fsDir) )          if (!exists && !is_writeable($fsDir) )
246                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
247    
248          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
# Line 179  function DetailPage($fsRoot,$relDir,$fn) Line 253  function DetailPage($fsRoot,$relDir,$fn)
253    
254          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;
255          if ($exists) {  // get file info          if ($exists) {  // get file info
256            $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
257            $fmodified = date("d/M/y G:i:s", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
258            $faccessed = date("d/M/y G:i:s", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
259            echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;
260            echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
261            echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
262            echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;
263            echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;
264            echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
265            echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
266            echo "</PRE>" ;                  echo "</PRE>" ;
267    
268          }          }
269    
270          if ( $editable && ($writable || !$exists) ) {          if ( $editable && ($writable || !$exists) && !$file_lock ) {
271                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
272                  rewind($fh) ;                  rewind($fh) ;
273                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 200  function DetailPage($fsRoot,$relDir,$fn) Line 275  function DetailPage($fsRoot,$relDir,$fn)
275                  $fstr = htmlentities( $fstr ) ;                  $fstr = htmlentities( $fstr ) ;
276  ?>  ?>
277    
278  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
279  <SPAN TITLE="Click [SAVE] to store updated contents.">  <SPAN TITLE="Click [SAVE] to store updated contents.">
280          <B>DOCUMENT CONTENTS</B>          <B>DOCUMENT CONTENTS</B>
281  </SPAN><BR>  </SPAN><BR>
282  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php
283  echo($fstr) ; ?></TEXTAREA>  echo($fstr) ; ?></TEXTAREA>
284  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
285  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
286  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">
287  <INPUT TYPE="TEXT" SIZE=48 MAXLENGTH=255 NAME="RELPATH"  <INPUT TYPE="HIDDEN" SIZE=48 MAXLENGTH=255 NAME="RELPATH"
288          VALUE="<?php echo $relPath ; ?>">          VALUE="<?= $relPath ; ?>">
289  <INPUT TYPE="RESET" VALUE="RESET">  <br>
290    <INPUT TYPE="RESET" VALUE="UNDO ALL CHANGES">
291  <INPUT TYPE="SUBMIT" VALUE="SAVE">  <INPUT TYPE="SUBMIT" VALUE="SAVE">
292  </FORM>  </FORM>
293    
294  <?php  <?php
295          }          }
296          else if ( strstr( join(" ",$gblImages), $ext ) ) {            if ( !$file_lock && strstr(join(" ",$gblImages),$ext) ) {  
297            $info  = getimagesize($fsPath) ;                  $info  = getimagesize($fsPath) ;
298            $tstr  = "<IMG SRC=\"". $relPath . "\" BORDER=0 " ;                  $tstr = "<IMG SRC=\"".urlpath($relPath)."\" BORDER=0 " ;
299            $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
300            $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
301            echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
302                    echo $tstr ;
303          }          }
304    
305  ?>  ?>
306    
307  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
308  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
309  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
310  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>
311    
312  <?php  <?php
313    
314            if ($file_lock) {
315    ?>
316    <hr>
317    <SPAN TITLE="Check OK and click UNLOCK to remove lock on file.">
318    <B>OK TO FORCE LOCK REMOVAL ON "<?= $fn ; ?>" HELD BY <?= $file_lock ?>? </B></SPAN>
319    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
320    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="UNLOCK">
321    <?
322            } // file_lock
323    
324            if (substr($fn,0,4) == ".del") {
325                    $action="UNDELETE";
326                    $desc="undelete previously deleted file";
327            } else {
328                    $action="DELETE";
329                    $desc="delete";
330            }
331    
332          if ($exists && $writable) {          if ($exists && $writable) {
333  ?>  ?>
334    
335  <HR><SPAN TITLE="Check OK and click [DELETE] to delete.">  <HR>
336  <B>OK TO DELETE "<?php echo $fn ; ?>"? </B></SPAN>  <a name="undelete">
337    <SPAN TITLE="Check OK and click [<?= $action ?>] to <?= $desc ?>.">
338    <B>OK TO <?= $action ?> "<?= $fn ; ?>"? </B></SPAN>
339  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
340  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="<?= $action ?>">
341    
342    <HR>
343    <a name="rename">
344    <SPAN TITLE="Check OK and click [RENAME] to rename.">
345    <B>OK TO RENAME "<?= $fn ; ?>" TO
346    <INPUT TYPE="TEXT" SIZE=24 MAXLENGTH=255 NAME="NEWNAME" VALUE="<?= $fn ?>">
347    ? </B></SPAN>
348    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
349    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="RENAME">
350    
351    <?php
352            }       // exists && writable
353    ?>
354    <HR>
355    <a name="note">
356    <B>NOTE FOR "<?= $fn ; ?>":
357    <INPUT TYPE="TEXT" SIZE=50 MAXLENGTH=255 NAME="NOTE" VALUE="<?= ReadNote($fsPath) ?>">
358    </B></SPAN>
359    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="NOTE">
360    
361    </FORM>
362    
363  <?php  <?php
364            
365            $name=basename("$fsDir/$fn");
366            $logname=dirname("$fsDir/$fn")."/.log/$name";
367            $bakdir=dirname("$fsDir/$fn")."/.bak";
368            if (file_exists($logname)) {
369                    $log=fopen($logname,"r");
370                    $cl1=" class=lst"; $cl2="";
371                    $logarr = array();
372                    while($line = fgetcsv($log,255,"\t")) {
373                            $cl=$cl1; $cl1=$cl2; $cl2=$cl;
374                            array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));
375                    }
376                    fclose($log);
377                    print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";
378                    $bakcount = 0;  // start from 0, skip fist backup (it's current)
379                    while ($e = array_shift($logarr)) {
380                            if (strstr($e[4],"upload")) {
381                                    if (file_exists("$bakdir/$bakcount/$name")) {
382                                            $e[4]="<a href=\"".dirname($relPath)."/.bak/$bakcount/$name\">$e[4]</a>";
383                                    }
384                                    $bakcount++;
385                            }
386                            print "<tr><td$e[0]>$e[1]</td><td$e[0]>$e[2]</td><td$e[0]>$e[3]</td><td$e[0]>$e[4]</td></tr>\n";
387                    }
388                    print "</table>";
389          }          }
390          echo "</FORM>" ;  
391          EndHTML() ;          EndHTML() ;
392    
393  } // end function DetailPage  } // end function DetailPage
# Line 472  function GifIcon($txt) { Line 617  function GifIcon($txt) {
617          case "blank" :          case "blank" :
618                  $d = "blank.gif" ;                  $d = "blank.gif" ;
619                  break ;                  break ;
620            case "checkout":
621                    $d = "box2.gif";
622                    break;
623            case "checkin":
624                    $d = "hand.up.gif";
625                    break;
626            case "locked":
627                    $d = "screw2.gif";
628                    break;
629            case "note":
630                    $d = "quill.gif";
631                    break;
632          default :          default :
633                  $d = "generic.gif" ;                  $d = "generic.gif" ;
634          }          }
# Line 486  function Navigate($fsRoot,$relDir) { Line 643  function Navigate($fsRoot,$relDir) {
643          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon ;
644    
645          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
646          $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
647                    $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;
648            } else {
649                    $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;
650            }
651          $fsDir    = $fsRoot . $relDir . "/" ; // current directory          $fsDir    = $fsRoot . $relDir . "/" ; // current directory
652    
653          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;          if (!is_dir($fsDir)) Error("Dir not found",$relDir) ;
# Line 495  function Navigate($fsRoot,$relDir) { Line 656  function Navigate($fsRoot,$relDir) {
656          if ( !($dir = @opendir($fsDir)) )          if ( !($dir = @opendir($fsDir)) )
657                  Error("Read Access denied",$relDir) ;                  Error("Read Access denied",$relDir) ;
658          while ($item = readdir($dir)) {          while ($item = readdir($dir)) {
659                  if ( $item == ".." || $item == "." ) continue ;                  if ( $item == ".." || $item == "." || substr($item,0,1) == "." ) continue ;
660                  if ( is_dir($fsDir . $item) ) {                  if ( is_dir($fsDir . $item) ) {
661                          $dirList[] = $item ;                          $dirList[] = $item ;
662                  }                  } else if ( is_file($fsDir . $item) ) {
                 else if ( is_file($fsDir . $item) ) {  
663                          $fileList[] = $item ;                                    $fileList[] = $item ;          
664                  }                  } else if ( is_link($fsDir . $item) ) {
665                  else {                          $dirList[] = $item ;
666                    } else {
667                    // unknown file type                    // unknown file type
668                    // $text = "Could not determine file type of " ;                    // $text = "Could not determine file type of " ;
669                    // Error("File Error", $text.$relDir."/".$item) ;                    // Error("File Error", $text.$relDir."/".$item) ;
# Line 510  function Navigate($fsRoot,$relDir) { Line 671  function Navigate($fsRoot,$relDir) {
671                  }                  }
672          }          }
673          closedir($dir) ;          closedir($dir) ;
674    
675            // scan deleted files
676            if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {
677                    while ($item = readdir($dir)) {
678                            if ( substr($item,0,1) == "." ) continue ;
679                            $fileList[] = ".del/$item" ;            
680                    }
681                    closedir($dir) ;
682            }
683    
684          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;
685    
686          // start navigation page          // start navigation page
687          $text  = "Use this page to add, delete or " ;          $text  = "Use this page to add, delete";
688          $text .= "revise files on this web site." ;          if (! isset($show_deleted)) {
689                    $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
690            }
691            $text .= " or revise files on this web site." ;
692          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
693    
694          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
# Line 527  function Navigate($fsRoot,$relDir) { Line 700  function Navigate($fsRoot,$relDir) {
700                  if ($parent == "") $parent = "/" ;                  if ($parent == "") $parent = "/" ;
701  ?>  ?>
702    
703  <TR><TD><?php echo $gblIcon("up") ?></TD><TD COLSPAN=4 CLASS=LST>  <TR><TD><?= $gblIcon("up") ?></TD><TD COLSPAN=5 CLASS=LST>
704  <A HREF="<?php echo $self ?>?D=<?php echo urlencode($parent) ?>">  <A HREF="<?= $self ?>?D=<?= urlencode($parent) ?>">
705  <B><?php echo $parent ?></B></A></TD></TR>  <B><?= $parent ?></B></A></TD></TR>
706    
707  <?php  <?php
708          }          }
# Line 539  function Navigate($fsRoot,$relDir) { Line 712  function Navigate($fsRoot,$relDir) {
712                  sort($dirList) ;                  sort($dirList) ;
713  ?>  ?>
714    
715  <TR><TD></TD><TD COLSPAN=4 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>  <TR><TD></TD><TD COLSPAN=5 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>
716    
717  <?php  <?php
718                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
# Line 549  function Navigate($fsRoot,$relDir) { Line 722  function Navigate($fsRoot,$relDir) {
722                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
723  ?>  ?>
724    
725  <TR><TD><?php echo $gblIcon("fldr") ?></TD>  <TR><TD><?= $gblIcon("fldr") ?></TD>
726  <TD COLSPAN=4 CLASS=LST><?php echo $tstr ?></TD></TR>  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>
727    
728  <?php  <?php
729                  }  // iterate over dirs                  }  // iterate over dirs
730          }  // end if no dirs          }  // end if no dirs
731  ?>  ?>
732    
733  <TR><TD></TD><TD COLSPAN=4><HR><B><?php echo $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</TD>
736  <TD><?php echo $gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
737    <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>
739    
740  <?php  <?php
741          if (sizeof($fileList) > 0) {          if (sizeof($fileList) > 0) {
742            sort($fileList) ;            sort($fileList) ;
743            while (list($key,$file) = each($fileList)) {              while (list($key,$file) = each($fileList)) {  
744              $path = $fsDir."/".$file ;                  $path = $fsDir."/".$file ;
745              $mod  = filemtime($path) ;                  $mod  = filemtime($path) ;
746              $sz   = filesize($path) ;                  $sz   = filesize($path) ;
747    
748              if ($sz >= 10240) {                  if ($sz >= 10240) {
749                $sz = (int)(($sz+1023)/1024) . " k" ;                          $sz = (int)(($sz+1023)/1024) . " k" ;
750              }                  } else {
751              else {                          $sz .= " " ;
752                $sz .= " " ;                  } // end size
753              } // end size  
754                    $a = $b = "" ;
755              $a = $b = "" ;  
756                    $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);
757              if ( ($mod + 30*86400) > time() ) {  
758                $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;                  if ( ($mod + 30*86400) > time() ) {
759                $a .= " than 30 days\"> * </SPAN>" ;                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
760              }                          $a .= " than 30 days\"> * </SPAN>" ;
761                    }
762              $tstr = $webRoot . $relDir . "/" . $file ;  
763              $tstr  = "<A HREF=\"" . $tstr . "\">" ;                  $file_lock=CheckLock($path);
764              $tstr .= $file . "</A>" . $a ;  
765                    $file_url_html="<A HREF=\"$self?A=V&F=".urlencode($file);
766              $ext = strtolower(strrchr($file,".")) ;                  $file_url_html.="&D=".urlencode($relDir);
767              if ( $ext=="" ||                  $file_url_html.="\" TITLE=\"View file\">" ;
768                   strstr(join(" ",$gblEditable),$ext) )  
769              {                    if (substr($file,0,5) != ".del/") {
770                $b  = "<A HREF=\"" . $self . "?A=C&F=" ;                          $file_url_html .= $file . "</A>" . $a ;
771                $b .= urlencode($file) . "&D=" . urlencode($relDir) ;                  } else {
772                $b .= "\" TITLE=\"List contents\">" ;                          $file_url_html .= substr($file,5,strlen($file)-5) . "</a> <SPAN CLASS=RED TITLE=\"deleted\"> <a href=\"$info_url#undelete\">deleted</a> </span>";
773                $b .= $gblIcon("view") . "</A>" ;                  }
774              }  
775                    $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($path);
776    
777                    $ext = strtolower(strrchr($file,".")) ;
778    
779                    if ($file_lock) {
780                            if ($file_lock == $GLOBALS[gblUserName]) {
781                                    $b.="<A HREF=\"$self?A=Ci&F=".urlencode($file);
782                                    $b.="&D=".urlencode($relDir);
783                                    $b.="\" TITLE=\"Checkin (update) file on server\">" ;
784                                    $file_url_html=$b;
785                                    $b.=$gblIcon("checkin")."</A>" ;
786                                    $b.= $gblIcon("blank");
787                                    $file_url_html.="$file</a> $a";
788                                    $note_html = $gblIcon("blank")."<b>Please check-in (update) this file</b>";
789                            } else {
790                                    $b = $gblIcon("locked");
791                                    $b.= $gblIcon("blank");
792                                    $note_html = $gblIcon("blank")."<b>File locked by $file_lock</b>";
793                                    $file_url_html = "$file $a";
794                            }
795                    } else {
796                            $b.="<A HREF=\"$self?A=Co&F=".urlencode($file);
797                            $b.="&D=".urlencode($relDir);
798                            $b.="\" TITLE=\"Checkout file for edit\">" ;
799                            $b.=$gblIcon("checkout")."</A>" ;
800    
801                            if ( $ext=="" || strstr(join(" ",$gblEditable),$ext) ) {  
802                                    $b.="<A HREF=\"$self?A=C&F=".urlencode($file);
803                                    $b.="&D=".urlencode($relDir);
804                                    $b.="\" TITLE=\"List contents\">" ;
805                                    $b.=$gblIcon("view")."</A>" ;
806                            } else {
807                                    $b.= $gblIcon("blank");
808                            }
809                    }
810    
811    
812  ?>  ?>
813    
814  <TR><TD>  <TR><TD>
815  <A HREF="<?php echo $self ?>?A=E&F=<?php echo urlencode($file)  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
816  ?>&D=<?php echo urlencode($relDir) ?>" TITLE="View/Edit">  <?= $gblIcon($ext) ?></A></TD>
817  <?php echo $gblIcon($ext) ?></A></TD>  <TD CLASS=LST><?= $file_url_html ?></TD>
818  <TD CLASS=LST><?php echo $tstr ?></TD>  <TD CLASS=LST ALIGN=center><?= $b ?></TD>
819  <TD CLASS=LST ALIGN=center><?php echo $b ?></TD>  <TD CLASS=LST ALIGN=left><?= $note_html ?></TD>
820  <TD CLASS=LST><?php echo date("d/M/y G:i:s",$mod) ?></TD>  <TD CLASS=LST><?= date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]",$mod) ?></TD>
821  <TD CLASS=LST><?php echo $sz ?>Bytes</TD></TR>  <TD CLASS=LST><?= $sz ?>Bytes</TD></TR>
822    
823  <?php  <?php
824            }  // iterate over files            }  // iterate over files
# Line 617  function Navigate($fsRoot,$relDir) { Line 827  function Navigate($fsRoot,$relDir) {
827          if ($emptyDir) {          if ($emptyDir) {
828  ?>  ?>
829    
830  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
831   <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>   <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>
832    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
833    OK TO DELETE THIS EMPTY FOLDER?    OK TO DELETE THIS EMPTY FOLDER?
834    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
835    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">
# Line 630  function Navigate($fsRoot,$relDir) { Line 840  function Navigate($fsRoot,$relDir) {
840          } // end if emptyDir          } // end if emptyDir
841  ?>  ?>
842    
843  <TR><TD></TD><TD COLSPAN=4><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
844    
845    <TR><TD></TD><TD COLSPAN=5>
846    To just view file without editing, select it's filename (<b>don't edit files which are opened this way!</b>)<br>
847    To <b>edit</b> file select <?= $gblIcon("checkout") ?> to check-out
848    and edit it locally. After editing is over, select filename or <?= $gblIcon("checkin") ?> to check-in (update copy of file on server).<br>
849    <by>If you select icon left from filename, you will get detailed information
850    about file, as well as delete, rename and annotation options.
851    </TD></TR>
852    
853    <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
854    
855  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
856  <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>CREATE NEW  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
857   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-
858   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;
859   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
860   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
861   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
862   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>
863   <NOBR>OR <A HREF="<?php echo $self   <NOBR>OR <A HREF="<?= $self ?>?A=U&D=<?= urlencode($relDir) ?>">UPLOAD</A> A FILE
         ?>?A=U&D=<?php echo urlencode($relDir) ?>">UPLOAD</A> A FILE  
864   </NOBR>   </NOBR>
865  </TD></TR>  </TD></TR>
866  </FORM>  </FORM>
# Line 653  function Navigate($fsRoot,$relDir) { Line 872  function Navigate($fsRoot,$relDir) {
872    
873  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
874    
875  function UploadPage($fsRoot, $relDir) {  function UploadPage($fsRoot, $relDir, $filename) {
876    
877          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
878          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 661  function UploadPage($fsRoot, $relDir) { Line 880  function UploadPage($fsRoot, $relDir) {
880    
881  <P><TABLE BORDER=0 CELLPADDING=5><TR><TD WIDTH=5></TD><TD CLASS=BAR>  <P><TABLE BORDER=0 CELLPADDING=5><TR><TD WIDTH=5></TD><TD CLASS=BAR>
882  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
883   ACTION="<?php echo $self ?>">   ACTION="<?= $self ?>">
884  DESTINATION DIRECTORY:<B><?php echo " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
885    <? if (isset($filename)) { ?>
886    <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
887    <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
888    <? } ?>
889  <P>PATHNAME OF LOCAL FILE<BR>  <P>PATHNAME OF LOCAL FILE<BR>
890  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
891  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">
892  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>
893  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>
894  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>
895  you must upgrade to an RFC1867-compliant browser.</P>  you must upgrade to an RFC1867-compliant browser.</P>
896  <P>Your browser:<BR><?php echo $GLOBALS["HTTP_USER_AGENT"] ?></P>  <P>Your browser:<BR><?= $GLOBALS["HTTP_USER_AGENT"] ?></P>
897  </FORM>  </FORM>
898  </TD></TR>  </TD></TR>
899  <TR><TD></TD><TD>  <TR><TD></TD><TD>
900  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
901  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>"><BR>  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>"><BR>
902  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">
903  </FORM>  </FORM>
904  </TD></TR></TABLE></P>  </TD></TR></TABLE></P>
# Line 694  function Error($title,$text="") { Line 917  function Error($title,$text="") {
917    
918  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
919    
 function Writeable($path) {  
         // fix by -mat- filid brandy, brandy@ecrc.de, 07/JUL/99  
   
         clearstatcache ;  
         $perms = @fileperms($path) ;  
         $owner = @fileowner($path) ;  
         exec("id",$id) ;  
         eregi( "^uid=([0-9]*)",$id[0], $regs) ;  
         $apacheuid = $regs[1] ;  
         $perms = 0777 & $perms ;  
         if ( $apacheuid != $owner ) {  
                 return (06 == (06 & $perms)) ?  1 : 0 ;  
         }  
         else {  
                 return (0600 == (0600 & $perms)) ? 1 : 0 ;  
         }  
   
 } // end function Writable  
   
 //////////////////////////////////////////////////////////////////  
   
920  function CreateHash($user, $pw) {  function CreateHash($user, $pw) {
921    
922          global $gblHash ;  // hash function to use          global $gblHash ;  // hash function to use
# Line 749  function NoEntry() { Line 951  function NoEntry() {
951          StartHTML($title,$text) ;          StartHTML($title,$text) ;
952  ?>  ?>
953    
954  <FORM ACTION="<?php echo $self ?>?HASH=create" METHOD="POST">  <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">
955  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?php echo $user ?>">  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">
956  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?php echo $pw ?>">  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">
957    
958  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>
959  Click below to <B>generate a password hash</B><BR>from  Click below to <B>generate a password hash</B><BR>from
# Line 767  the source<BR>of this file.<BR><BR> Line 969  the source<BR>of this file.<BR><BR>
969    
970  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
971    
972    function Logit($target,$msg) {
973    
974            $dir=dirname($target);
975            if (! file_exists($dir."/.log")) {
976                    mkdir($dir."/.log",0700);
977            }
978            $file=basename($target);
979    
980            $log=fopen("$dir/.log/$file","a+");
981            fputs($log,date("$GLOBALS[gblDateFmt]\t$GLOBALS[gblTimeFmt]").
982                    "\t$GLOBALS[gblUserName]\t$msg\n");
983            fclose($log);
984    
985    }
986    
987    
988    //////////////////////////////////////////////////////////////////
989    
990    function WriteNote($target,$msg) {
991    
992            $dir=dirname($target);
993            if (! file_exists($dir."/.note")) {
994                    mkdir($dir."/.note",0700);
995            }
996            $file=basename($target);
997    
998            $note=fopen("$dir/.note/$file","w");
999            fputs($note,"$msg\n");
1000            fclose($note);
1001    
1002            Logit($target,"added note $msg");
1003    
1004    }
1005    
1006    function ReadNote($target) {
1007    
1008            $dir=dirname($target);
1009            $file=basename($target);
1010            $msg="";
1011            if (file_exists($dir."/.note/$file")) {
1012                    $note=fopen("$dir/.note/$file","r");
1013                    $msg=fgets($note,4096);
1014                    fclose($note);
1015            }
1016            return StripSlashes($msg);
1017    
1018    }
1019    
1020    //////////////////////////////////////////////////////////////////
1021    
1022    function MoveTo($source,$folder) {
1023    
1024            $file=basename($source);
1025            if (! file_exists($folder)) {
1026                    mkdir($folder,0700);
1027            }
1028            if (file_exists($source)) {
1029                    rename($source,"$folder/$file");
1030            }
1031    }
1032    
1033    //////////////////////////////////////////////////////////////////
1034    
1035    function Lock($target) {
1036    
1037            $dir=dirname($target);
1038            if (! file_exists($dir."/.lock")) {
1039                    mkdir($dir."/.lock",0700);
1040            }
1041            $file=basename($target);
1042    
1043            if (file_exists("$dir/.lock/$file")) {
1044                    Logit($target,"attempt to locked allready locked file!");
1045            } else {
1046                    $lock=fopen("$dir/.lock/$file","w");
1047                    fputs($lock,"$GLOBALS[gblUserName]\n");
1048                    fclose($lock);
1049    
1050                    Logit($target,"file locked");
1051            }
1052    
1053    }
1054    
1055    function CheckLock($target) {
1056    
1057            $dir=dirname($target);
1058            $file=basename($target);
1059            $msg=0;
1060            if (file_exists($dir."/.lock/$file")) {
1061                    $lock=fopen("$dir/.lock/$file","r");
1062                    $msg=fgets($lock,4096);
1063                    fclose($lock);
1064            }
1065            return chop($msg);
1066    
1067    }
1068    
1069    function Unlock($target) {
1070    
1071            $dir=dirname($target);
1072            $file=basename($target);
1073            if (file_exists($dir."/.lock/$file")) {
1074                    unlink("$dir/.lock/$file");
1075                    Logit($target,"file unlocked");
1076            } else {
1077                    Logit($target,"attempt to unlocked non-locked file!");
1078            }
1079    
1080    }
1081    
1082    //////////////////////////////////////////////////////////////////
1083    
1084    function urlpath($url) {
1085            $url=urlencode(StripSlashes("$url"));
1086            $url=str_replace("%2F","/",$url);
1087            $url=str_replace("+","%20",$url);
1088            return($url);
1089    }
1090    
1091    //////////////////////////////////////////////////////////////////
1092    
1093    function safe_rename($from,$to) {
1094            if (file_exists($from) && is_writable(dirname($to))) {
1095                    rename($from,$to);
1096            }
1097    }
1098    
1099    //////////////////////////////////////////////////////////////////
1100    
1101  // MAIN PROGRAM  // MAIN PROGRAM
1102  // ============  // ============
1103  // query parameters: capital letters  // query parameters: capital letters
1104  // local functions : begin with capital letters  // local functions : begin with capital letters
1105  // global constants: begin with gbl  // global constants: begin with gbl
1106    
1107          $gblFilePerms = "644" ;         // default for new files          $gblFilePerms = 0640 ;         // default for new files
1108          $gblDirPerms  = 0755 ;          // default for new dirs          $gblDirPerms  = 0750 ;          // default for new dirs
1109    
1110          // phpinfo() ;          // phpinfo() ;
1111          // exit ;          // exit ;
# Line 788  the source<BR>of this file.<BR><BR> Line 1119  the source<BR>of this file.<BR><BR>
1119          }          }
1120    
1121          // authentication if $gblAuth == true          // authentication if $gblAuth == true
1122          if ( $gblAuth &&          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1123               $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ) {                  isset($relogin) && $gblPw == $relogin ) {
1124                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;
1125                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1126                  NoEntry() ;                  NoEntry() ;
# Line 827  the source<BR>of this file.<BR><BR> Line 1158  the source<BR>of this file.<BR><BR>
1158                    
1159          switch ($POSTACTION) {          switch ($POSTACTION) {
1160          case "UPLOAD" :          case "UPLOAD" :
1161                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1162                  if (strstr($FN_name,"/"))                  if (strstr($FN_name,"/"))
1163                          Error("Non-conforming filename") ;                          Error("Non-conforming filename") ;
1164                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1165                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1166                  $source = $FN ;                  $source = $FN ;
1167                  $target = $fsDir . "/" . $FN_name ;                  if (! isset($FILENAME)) {       // from update file
1168                  exec("cp $source $target") ;                          $target = "$fsDir/$FN_name" ;
1169                  exec("chmod $gblFilePerms $target") ;                  } else {
1170                            $target = "$fsDir/$FILENAME";
1171                    }
1172    
1173                    // backup old files first
1174                    $dir=dirname($target);
1175                    if (! file_exists($dir."/.bak")) {
1176                            mkdir($dir."/.bak",0700);
1177                    }
1178                    if (! file_exists($dir."/.bak/$GLOBALS[gblNumBackups]")) {
1179                            mkdir($dir."/.bak/$GLOBALS[gblNumBackups]",0700);
1180                    }
1181                    $file=basename($target);
1182                    for($i=$GLOBALS[gblNumBackups]-1;$i>0;$i--) {
1183                            MoveTo("$dir/.bak/$i/$file","$dir/.bak/".($i+1)."/");
1184                    }
1185                    MoveTo($target,$dir."/.bak/1/");
1186    
1187                    copy($source,$target) ;
1188                    chmod($target,$gblFilePerms) ;
1189                  clearstatcache() ;                  clearstatcache() ;
1190                    Logit($target,"uploaded");
1191                    if (isset($FILENAME)) {
1192                            Unlock($target);
1193                    }
1194                  break ;                  break ;
1195    
1196          case "SAVE" :          case "SAVE" :
1197                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;
1198                  $writable = Writeable($path) ;                  $writable = is_writeable($path) ;
1199                  $legaldir = Writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1200                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
1201  // check for legal extension here as well  // check for legal extension here as well
1202                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
# Line 851  the source<BR>of this file.<BR><BR> Line 1205  the source<BR>of this file.<BR><BR>
1205                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1206                  fclose($fh) ;                  fclose($fh) ;
1207                  clearstatcache() ;                  clearstatcache() ;
1208                    Logit($path,"saved changes");
1209                  break ;                  break ;
1210    
1211          case "CREATE" :          case "CREATE" :
1212                  // we know $fsDir exists                  // we know $fsDir exists
1213                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if ($FN == "") break;           // no filename!
1214                    if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1215                  $path = $fsDir . "/" . $FN ;  // file or dir to create                  $path = $fsDir . "/" . $FN ;  // file or dir to create
1216                  $relPath = $relDir . "/" . $FN ;                  $relPath = $relDir . "/" . $FN ;
1217                  switch ( $T ) {                  switch ( $T ) {
1218                  case "D" :  // create a directory                  case "D" :  // create a directory
1219                    if ( ! @mkdir($path,$gblDirPerms) )                          if ( ! @mkdir($path,$gblDirPerms) )
1220                      Error("Mkdir failed",$relPath) ; // eg. if it exists                                  Error("Mkdir failed",$relPath) ; // eg. if it exists
1221                    clearstatcache() ;                          clearstatcache() ;
1222                    break ;                          break ;
1223                  case "F" :  // create a new file                  case "F" :  // create a new file
1224  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1225  // better keep it here altogether  // better keep it here altogether
1226  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1227                    if ( file_exists($path) && !Writable($path) )                          if ( file_exists($path) && !is_writable($path) )
1228                      Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1229                    $tstr = $PHP_SELF . "?A=E&D=" . $relDir . "&F=" . $FN ;                          $fh = fopen($path, "w+") ;
1230                    header("Location: " . $tstr) ;                          if ($fh) {
1231                    exit ;                                  fputs($fh,"\n");
1232                                    fclose($fh) ;
1233                                    LogIt($path,"file created");
1234                            } else {
1235                                    Error("Creation of file $relPath failed -- $path");
1236                            }
1237                            $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1238                            header("Location: " . $tstr) ;
1239                            exit ;
1240                  }                  }
1241                  break ;                  break ;
1242    
# Line 883  the source<BR>of this file.<BR><BR> Line 1247  the source<BR>of this file.<BR><BR>
1247                  $tstr .= "insufficient privileges: " ;                  $tstr .= "insufficient privileges: " ;
1248    
1249                  if ( $FN != "") {  // delete file                  if ( $FN != "") {  // delete file
1250                    $path =  $fsDir . "/" . $FN ;                          $path =  $fsDir . "/" . $FN ;
1251                    if ( ! @unlink($path) ) {                  
1252                      Error("File delete failed", $tstr . $path) ;                          $dir=dirname($path);
1253                      exit ;                          $file=basename($path);
1254                    }                                              if (! file_exists("$dir/.del")) {
1255                                    mkdir("$dir/.del",0700);
1256                            }
1257    
1258    //                      if ( ! @unlink($path) ) {
1259                            if ( ! rename($path,"$dir/.del/$file") ) {
1260                                    Error("File delete failed", $tstr . $path) ;
1261                                    Logit($path,"file delete failed");
1262                                    exit ;
1263                            } else {
1264                                    Logit($path,"file deleted");
1265                                    MoveTo("$dir/.log/$file","$dir/.del/.log/");
1266                                    MoveTo("$dir/.note/$file","$dir/.del/.note/");
1267                                    MoveTo("$dir/.lock/$file","$dir/.del/.lock/");
1268                            }
1269                  }                  }
1270                  else {  // delete directory                  else {  // delete directory
1271                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rmdir($fsDir) ) {
# Line 899  the source<BR>of this file.<BR><BR> Line 1277  the source<BR>of this file.<BR><BR>
1277                  }                  }
1278                  break ;                  break ;
1279    
1280            case "UNDELETE" :  
1281                    if ( $CONFIRM != "on" ) break ;
1282    
1283                    if (substr($FN,0,4) != ".del") break ;
1284                    $file=substr($FN,4,strlen($FN)-4);
1285    
1286                    Logit("$fsDir/.del/$file","undeleted");
1287                    MoveTo("$fsDir/.del/$file","$fsDir/");
1288                    MoveTo("$fsDir/.del/.log/$file","$fsDir/.log/");
1289                    MoveTo("$fsDir/.del/.note/$file","$fsDir/.note/");
1290                    MoveTo("$fsDir/.del/.lock/$file","$fsDir/.lock/");
1291    
1292                    break ;
1293    
1294            case "RENAME" :  
1295                    if ( $CONFIRM != "on" ) break ;
1296    
1297                    Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1298                    safe_rename("$fsDir/$FN","$fsDir/$NEWNAME");
1299                    safe_rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");
1300                    safe_rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");
1301                    safe_rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");
1302    
1303                    break ;
1304    
1305            case "NOTE" :  
1306                    WriteNote("$fsDir/$FN","$NOTE");
1307                    break ;
1308    
1309            case "UNLOCK" :  
1310                    if ( $CONFIRM != "on" ) break ;
1311                    Unlock("$fsDir/$FN");
1312                    break ;
1313    
1314          default :          default :
1315                  // user hit "CANCEL" or undefined action                  // user hit "CANCEL" or undefined action
1316          }          }
# Line 914  the source<BR>of this file.<BR><BR> Line 1326  the source<BR>of this file.<BR><BR>
1326          // $A=U : upload to path given in $D          // $A=U : upload to path given in $D
1327          // $A=E : display detail of file $D/$F and edit          // $A=E : display detail of file $D/$F and edit
1328          // $A=C : display code in file $D/$F          // $A=C : display code in file $D/$F
1329            // $A=Co : checkout file $D/$F
1330            // $A=Ci : checkin file $D/$F
1331            // $A=V : view file (do nothing except log)
1332          // default : display directory $D          // default : display directory $D
1333                    
1334          switch ($A) {          switch ($A) {
1335          case "U" :          case "U" :
1336                  // upload to $relDir                  // upload to $relDir
1337                  if (!Writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1338                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1339                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1340                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$SERVER_NAME</B>." ;
# Line 929  the source<BR>of this file.<BR><BR> Line 1344  the source<BR>of this file.<BR><BR>
1344                  exit ;                  exit ;
1345          case "E" :          case "E" :
1346                  // detail of $relDir/$F                  // detail of $relDir/$F
1347                  DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1348                  exit ;                  exit ;
1349          case "C" :          case "C" :
1350                  // listing of $relDir/$F                  // listing of $relDir/$F
1351                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1352                  exit ;                  exit ;
1353            case "Co" :
1354                    // checkout
1355                    Lock("$gblFsRoot/$relDir/$F");
1356                    Header("Location: ".urlpath("$relDir/$F"));
1357                    exit;
1358            case "Ci" :
1359                    // upload && update to $relDir
1360                    if (!is_writeable($gblFsRoot . $relDir))
1361                            Error("Write access denied",$relDir) ;
1362                    $text  = "Use this page to update a single " ;
1363                    $text .= "file to <B>$SERVER_NAME</B>." ;
1364                    StartHTML("(Update file Page)", $text) ;
1365                    UploadPage($gblFsRoot, $relDir, $F) ;
1366                    EndHTML() ;
1367                    exit ;
1368            case "V" :
1369                    // view
1370                    LogIt("$gblFsRoot/$relDir/$F","viewed");
1371                    Header("Location: ".urlpath("$relDir/$F"));
1372                    exit;
1373          }          }
1374    
1375          // default: display directory $relDir          // default: display directory $relDir

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.26