/[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.1.1 by dpavlin, Fri May 12 12:01:08 2000 UTC revision 1.22 by dpavlin, Wed Sep 13 09:59:16 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            show last lock date
70            
71    */
72    
73  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
74    
75  // 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 87 
87          // username/password should not be system          // username/password should not be system
88          // usernames/passwords !!          // usernames/passwords !!
89    
90          // your (hashed) username/password here  //      $gblPw    = "hash_of_your_username_and_password" ;
91          $gblPw    = "hash_of_your_username_and_password" ;                
92            //      $gblAuth  = false ;             // use builtin authentication
93          $gblAuth  = false ;             // use builtin authentication          $gblAuth  = true ;             // use builtin authentication
94          $gblHash  = "md5" ;             // hash function to use          $gblHash  = "md5" ;             // hash function to use
95    
96            $gblPw    = "";
97    
98            if ($gblAuth) {
99                    $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
100                    if (! file_exists($htusers_file)) {
101                            $htusers=fopen($htusers_file,"a+");
102                            fputs($htusers,"# Change owner of $htusers_file to root !!\n");
103                            fputs($htusers,"demo:full name:md5_hash\n");
104                            fclose($htusers);
105                    }
106                    $htusers=fopen($htusers_file,"r");
107                    while($user = fgetcsv($htusers,255,":")) {
108                            if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
109                                    $gblUserName=$user[1];
110                                    $gblPw=$user[2];
111                                    $gblEmail=$user[3];
112                                    continue ;
113                            }
114                    }
115                    fclose($htusers);
116            }
117    
118    //      $gblDateFmt="D, F d, Y";
119    //      $gblTimeFmt="g:i:sA";
120    
121            $gblDateFmt="Y-m-d";
122            $gblTimeFmt="H:i:s";
123    
124            // Number of backup files to keep
125            $gblNumBackups=3;
126    
127            // show red star if newer than ... days
128            $gblModDays=1;
129    
130          // choose GifIcon below unless you have the M$          // choose GifIcon below unless you have the M$
131          // WingDings font installed on your system          // WingDings font installed on your system
132    
# Line 65  Line 135 
135          // the directory below should be /icons/ or /icons/small/          // the directory below should be /icons/ or /icons/small/
136          // on Apache; a set of icons is included in the distribution          // on Apache; a set of icons is included in the distribution
137    
138          $gblIconLocation = "icons/" ;          $gblIconLocation = "/icons/" ;
139    
140          // files you want to be able to edit in text mode          // files you want to be able to edit in text mode
141          // and view with (primitive) syntax highlighting          // and view with (primitive) syntax highlighting
# Line 91  function StartHTML($title,$text="") { Line 161  function StartHTML($title,$text="") {
161    
162  <HTML>  <HTML>
163  <HEAD>  <HEAD>
164   <TITLE><?php echo $host . " " . $title ?></TITLE>   <TITLE><?= $host . " " . $title ?></TITLE>
165   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">   <META NAME="description" CONTENT="PHP port of AnyPortal Site Manager">
166   <META NAME="keywords" CONTENT="site manager, web site maintenance">   <META NAME="keywords" CONTENT="site manager, web site maintenance">
167   <META NAME="robots" CONTENT="noindex">   <META NAME="robots" CONTENT="noindex">
168   <META HTTP-EQUIV="expires" CONTENT="0">   <META HTTP-EQUIV="expires" CONTENT="0">
169   <LINK REL="stylesheet" TYPE="text/css"   <LINK REL="stylesheet" TYPE="text/css"
170          HREF="<?php echo $self ?>?STYLE=get">          HREF="<?= $self ?>?STYLE=get">
171  </HEAD>  </HEAD>
172  <BODY BGCOLOR="#FFFFFF">  <BODY BGCOLOR="#FFFFFF">
173   <H3 ALIGN="RIGHT"><?php echo $host ?></H3>   <H3 ALIGN="RIGHT"><?= $host ?></H3>
174  <TABLE BORDER=0 WIDTH="100%"><TR>  <TABLE BORDER=0 WIDTH="100%"><TR>
175   <TD CLASS=INV><?php echo $title ?></TD></TR></TABLE>   <TD CLASS=INV><?= $title ?></TD></TR></TABLE>
176   <P><?php echo $text ?></P>   <P><?= $text ?></P>
177    
178  <?php  <?php
179  } // end function StartHTML  } // end function StartHTML
# Line 115  function EndHTML() { Line 185  function EndHTML() {
185    
186  <HR>  <HR>
187  <P CLASS=FTR>  <P CLASS=FTR>
188  <B><?php echo date("D, F d, Y") ?> -  <B><?= date($GLOBALS[gblDateFmt]) ?> -
189  <?php echo date("g:i:sA") ?></B><BR>ANYPORTAL(php) Site Manager  <?= date($GLOBALS[gblTimeFmt]) ?> -
190  - &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>  <?= $GLOBALS[gblUserName] ?>
191  - &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>
192    </B>
193    <BR>ANYPORTAL(php) Site Manager
194    <br><small>
195    &copy; 1999 by <A HREF="http://www.anyportal.com">ANYPORTAL</A>,
196    &copy; 2000 by <A HREF="http://da.nger.org">d@nger.org</A>,
197    &copy; 2000 by <A HREF="http://www.rot13.org/~dpavlin/">DbP</A>
198    </small>
199  </P>  </P>
200  <BR><BR><BR></BODY></HTML>  <BR>
201    <? //include(".debug.inc") ?>
202    <BR><BR></BODY></HTML>
203    
204  <?php  <?php
205  } // end function EndHTML  } // end function EndHTML
# Line 130  function EndHTML() { Line 209  function EndHTML() {
209  function CSS() {  function CSS() {
210  ?>  ?>
211    
212  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; }
213  .BLK { color:black; }  .BLK { color:black; }
214  .RED { color:red; }  .RED { color:red; }
215  .TOP { color:red; font-size:70%; } /* table headings */  .TOP { color:red; font-size:70%; } /* table headings */
# Line 164  function DetailPage($fsRoot,$relDir,$fn) Line 243  function DetailPage($fsRoot,$relDir,$fn)
243          $exists   = file_exists($fsPath) ;          $exists   = file_exists($fsPath) ;
244          $ext      = strtolower(strrchr($relPath,".")) ;          $ext      = strtolower(strrchr($relPath,".")) ;
245          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;          $editable = ( $ext=="" || strstr(join(" ",$gblEditable),$ext)) ;
246          $writable = Writeable($fsPath) ;          $writable = is_writeable($fsPath) ;
247            $file_lock = CheckLock($fsPath);
248    
249          if (!$editable && !$exists)          if (!$editable && !$exists)
250                  Error("Creation unsupported for type",$relPath) ;                  Error("Creation unsupported for type",$relPath) ;
251          if (!exists && !Writeable($fsDir) )          if (!exists && !is_writeable($fsDir) )
252                  Error("Creation denied",$relDir) ;                  Error("Creation denied",$relDir) ;
253    
254          $text  = "Use this page to view, modify or " ;          $text  = "Use this page to view, modify or " ;
# Line 179  function DetailPage($fsRoot,$relDir,$fn) Line 259  function DetailPage($fsRoot,$relDir,$fn)
259    
260          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;          echo "<H3>" . $relDir . "/" . $fn . "</H3>" ;
261          if ($exists) {  // get file info          if ($exists) {  // get file info
262            $fsize = filesize($fsPath) ;                  $fsize = filesize($fsPath) ;
263            $fmodified = date("d/M/y G:i:s", filemtime($fsPath)) ;                  $fmodified = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", filemtime($fsPath)) ;
264            $faccessed = date("d/M/y G:i:s", fileatime($fsPath)) ;                  $faccessed = date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]", fileatime($fsPath)) ;
265            echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;                  echo "<PRE>    file size: " . $fsize . " Bytes<BR>" ;
266            echo "last modified: <B>" . $fmodified . "</B><BR>" ;                  echo "last modified: <B>" . $fmodified . "</B><BR>" ;
267            echo "last accessed: <B>" . $faccessed . "</B><BR>" ;                  echo "last accessed: <B>" . $faccessed . "</B><BR>" ;
268            echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;                  echo "        owner: <B>" . fileowner($fsPath) . "</B><BR>" ;
269            echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;                  echo "        group: <B>" . filegroup($fsPath) . "</B><BR>" ;
270            echo "  permissions: <B>" ;                  echo "  permissions: <B>" ;
271            echo printf( "%o", fileperms($fsPath) ) . "</B>" ;                  echo printf( "%o", fileperms($fsPath) ) . "</B>" ;
272            echo "</PRE>" ;                  echo "</PRE>" ;
273    
274          }          }
275    
276          if ( $editable && ($writable || !$exists) ) {          if ( $editable && ($writable || !$exists) && !$file_lock ) {
277                  $fh = fopen($fsPath,"a+") ;                  $fh = fopen($fsPath,"a+") ;
278                  rewind($fh) ;                  rewind($fh) ;
279                  $fstr = fread($fh,filesize($fsPath)) ;                  $fstr = fread($fh,filesize($fsPath)) ;
# Line 200  function DetailPage($fsRoot,$relDir,$fn) Line 281  function DetailPage($fsRoot,$relDir,$fn)
281                  $fstr = htmlentities( $fstr ) ;                  $fstr = htmlentities( $fstr ) ;
282  ?>  ?>
283    
284  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
285  <SPAN TITLE="Click [SAVE] to store updated contents.">  <SPAN TITLE="Click [SAVE] to store updated contents.">
286          <B>DOCUMENT CONTENTS</B>          <B>DOCUMENT CONTENTS</B>
287  </SPAN><BR>  </SPAN><BR>
288  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php  <TEXTAREA NAME="FILEDATA" ROWS=18 COLS=70 WRAP="OFF"><?php
289  echo($fstr) ; ?></TEXTAREA>  echo($fstr) ; ?></TEXTAREA>
290  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
291  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
292  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="SAVE">
293  <INPUT TYPE="TEXT" SIZE=48 MAXLENGTH=255 NAME="RELPATH"  <INPUT TYPE="HIDDEN" SIZE=48 MAXLENGTH=255 NAME="RELPATH"
294          VALUE="<?php echo $relPath ; ?>">          VALUE="<?= $relPath ; ?>">
295  <INPUT TYPE="RESET" VALUE="RESET">  <br>
296    <INPUT TYPE="RESET" VALUE="UNDO ALL CHANGES">
297  <INPUT TYPE="SUBMIT" VALUE="SAVE">  <INPUT TYPE="SUBMIT" VALUE="SAVE">
298  </FORM>  </FORM>
299    
300  <?php  <?php
301          }          }
302          else if ( strstr( join(" ",$gblImages), $ext ) ) {            if ( !$file_lock && $ext!="" && strstr(join(' ',$gblImages),$ext) ) {  
303            $info  = getimagesize($fsPath) ;                  $info  = getimagesize($fsPath) ;
304            $tstr  = "<IMG SRC=\"". $relPath . "\" BORDER=0 " ;                  $tstr = "<IMG SRC=\"".urlpath($relPath)."\" BORDER=0 " ;
305            $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;                  $tstr .= $info[3] . " ALT=\"" . $fn . " - " ;
306            $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;                  $tstr .= (int)(($fsize+1023)/1024) . "Kb\">" ;
307            echo htmlentities($tstr) . "<BR><BR>" . $tstr ;  //              echo htmlentities($tstr) . "<BR><BR>" . $tstr ;
308                    echo $tstr ;
309          }          }
310    
311  ?>  ?>
312    
313  <FORM ACTION="<?php echo $self ; ?>" METHOD="POST">  <FORM ACTION="<?= $self ; ?>" METHOD="POST">
314  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ; ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ; ?>">
315  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?php echo $fn ; ?>">  <INPUT TYPE="HIDDEN" NAME="FN" VALUE="<?= $fn ; ?>">
316  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL"><BR>
317    
318  <?php  <?php
319    
320            if ($file_lock) {
321    ?>
322    <hr>
323    <SPAN TITLE="Check OK and click UNLOCK to remove lock on file.">
324    <B>OK TO FORCE LOCK REMOVAL ON "<?= $fn ; ?>" HELD BY <?= $file_lock ?>? </B></SPAN>
325    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
326    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="UNLOCK">
327    <?
328            } // file_lock
329    
330            if (substr($fn,0,4) == ".del") {
331                    $action="UNDELETE";
332                    $desc="undelete previously deleted file";
333            } else {
334                    $action="DELETE";
335                    $desc="delete";
336            }
337    
338          if ($exists && $writable) {          if ($exists && $writable) {
339  ?>  ?>
340    
341  <HR><SPAN TITLE="Check OK and click [DELETE] to delete.">  <HR>
342  <B>OK TO DELETE "<?php echo $fn ; ?>"? </B></SPAN>  <a name="undelete">
343    <SPAN TITLE="Check OK and click [<?= $action ?>] to <?= $desc ?>.">
344    <B>OK TO <?= $action ?> "<?= $fn ; ?>"? </B></SPAN>
345    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
346    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="<?= $action ?>">
347    
348    <HR>
349    <a name="rename">
350    <SPAN TITLE="Check OK and click [RENAME] to rename.">
351    <B>OK TO RENAME "<?= $fn ; ?>" TO
352    <INPUT TYPE="TEXT" SIZE=24 MAXLENGTH=255 NAME="NEWNAME" VALUE="<?= $fn ?>">
353    ? </B></SPAN>
354  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">  <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
355  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="RENAME">
356    
357    <?php
358            }       // exists && writable
359    ?>
360    <HR>
361    <a name="note">
362    <B>NOTE FOR "<?= $fn ; ?>":
363    <INPUT TYPE="TEXT" SIZE=50 MAXLENGTH=255 NAME="NOTE" VALUE="<?= ReadNote($fsPath) ?>">
364    </B></SPAN>
365    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="NOTE">
366    
367    </FORM>
368    
369  <?php  <?php
370    
371            $name=basename("$fsDir/$fn");
372            $logname=dirname("$fsDir/$fn")."/.log/$name";
373            $bakdir=dirname("$fsDir/$fn")."/.bak";
374            if (file_exists($logname)) {
375                    $log=fopen($logname,"r");
376                    $cl1=" class=lst"; $cl2="";
377                    $logarr = array();
378                    while($line = fgetcsv($log,255,"\t")) {
379                            $cl=$cl1; $cl1=$cl2; $cl2=$cl;
380                            array_unshift($logarr,array($cl,$line[0],$line[1],$line[2],$line[3]));
381                    }
382                    fclose($log);
383                    print "<hr><br><b>CHANGES TO THIS FILE</b><br><table border=0 width=100%>\n";
384                    $bakcount = 0;  // start from 0, skip fist backup (it's current)
385                    while ($e = array_shift($logarr)) {
386                            if (strstr($e[4],"upload")) {
387                                    if (file_exists("$bakdir/$bakcount/$name")) {
388                                            $e[4]="<a href=\"".dirname($relPath)."/.bak/$bakcount/$name\">$e[4]</a>";
389                                    }
390                                    $bakcount++;
391                            }
392                            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";
393                    }
394                    print "</table>";
395          }          }
396          echo "</FORM>" ;  
397          EndHTML() ;          EndHTML() ;
398    
399  } // end function DetailPage  } // end function DetailPage
# Line 472  function GifIcon($txt) { Line 623  function GifIcon($txt) {
623          case "blank" :          case "blank" :
624                  $d = "blank.gif" ;                  $d = "blank.gif" ;
625                  break ;                  break ;
626            case "checkout":
627                    $d = "box2.gif";
628                    break;
629            case "checkin":
630                    $d = "hand.up.gif";
631                    break;
632            case "locked":
633                    $d = "screw2.gif";
634                    break;
635            case "note":
636                    $d = "quill.gif";
637                    break;
638          default :          default :
639                  $d = "generic.gif" ;                  $d = "generic.gif" ;
640          }          }
# Line 483  function GifIcon($txt) { Line 646  function GifIcon($txt) {
646    
647  function Navigate($fsRoot,$relDir) {  function Navigate($fsRoot,$relDir) {
648    
649          global $gblEditable, $gblIcon ;          global $gblEditable, $gblIcon, $gblModDays ;
650    
651          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
652          $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
653                    $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;
654            } else {
655                    $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;
656            }
657          $fsDir    = $fsRoot . $relDir . "/" ; // current directory          $fsDir    = $fsRoot . $relDir . "/" ; // current directory
658    
659          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 662  function Navigate($fsRoot,$relDir) {
662          if ( !($dir = @opendir($fsDir)) )          if ( !($dir = @opendir($fsDir)) )
663                  Error("Read Access denied",$relDir) ;                  Error("Read Access denied",$relDir) ;
664          while ($item = readdir($dir)) {          while ($item = readdir($dir)) {
665                  if ( $item == ".." || $item == "." ) continue ;                  if ( $item == ".." || $item == "." || substr($item,0,1) == "." ) continue ;
666                  if ( is_dir($fsDir . $item) ) {                  if ( is_dir($fsDir . $item) ) {
667                          $dirList[] = $item ;                          $dirList[] = $item ;
668                  }                  } else if ( is_file($fsDir . $item) ) {
                 else if ( is_file($fsDir . $item) ) {  
669                          $fileList[] = $item ;                                    $fileList[] = $item ;          
670                  }                  } else if ( is_link($fsDir . $item) ) {
671                  else {                          $dirList[] = $item ;
672                    } else {
673                    // unknown file type                    // unknown file type
674                    // $text = "Could not determine file type of " ;                    // $text = "Could not determine file type of " ;
675                    // Error("File Error", $text.$relDir."/".$item) ;                    // Error("File Error", $text.$relDir."/".$item) ;
# Line 510  function Navigate($fsRoot,$relDir) { Line 677  function Navigate($fsRoot,$relDir) {
677                  }                  }
678          }          }
679          closedir($dir) ;          closedir($dir) ;
680    
681            // scan deleted files
682            if ( $GLOBALS[show_deleted] == 1 && ($dir = @opendir("$fsDir/.del")) ) {
683                    while ($item = readdir($dir)) {
684                            if ( substr($item,0,1) == "." ) continue ;
685                            $fileList[] = ".del/$item" ;            
686                    }
687                    closedir($dir) ;
688            }
689    
690          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;          $emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;
691    
692          // start navigation page          // start navigation page
693          $text  = "Use this page to add, delete or " ;          $text  = "Use this page to add, delete";
694          $text .= "revise files on this web site." ;          if (! isset($show_deleted)) {
695                    $text .= ", <a href=$self?D=".urlencode($relDir)."&show_deleted=1>undelete</a>";
696            }
697            $text .= " or revise files on this web site." ;
698            $text .= "<br>Examine list of files <a href=\"$self?A=Ch1\">changed in last day</a> or <a href=\"$self?A=Ch\">all changes</a>.";
699          StartHTML("(Navigate)",$text) ;          StartHTML("(Navigate)",$text) ;
700    
701          echo "<TABLE BORDER=0 CELLPADDING=2          echo "<TABLE BORDER=0 CELLPADDING=2
# Line 527  function Navigate($fsRoot,$relDir) { Line 707  function Navigate($fsRoot,$relDir) {
707                  if ($parent == "") $parent = "/" ;                  if ($parent == "") $parent = "/" ;
708  ?>  ?>
709    
710  <TR><TD><?php echo $gblIcon("up") ?></TD><TD COLSPAN=4 CLASS=LST>  <TR><TD><?= $gblIcon("up") ?></TD><TD COLSPAN=5 CLASS=LST>
711  <A HREF="<?php echo $self ?>?D=<?php echo urlencode($parent) ?>">  <A HREF="<?= $self ?>?D=<?= urlencode($parent) ?>">
712  <B><?php echo $parent ?></B></A></TD></TR>  <B><?= $parent ?></B></A></TD></TR>
713    
714  <?php  <?php
715          }          }
# Line 539  function Navigate($fsRoot,$relDir) { Line 719  function Navigate($fsRoot,$relDir) {
719                  sort($dirList) ;                  sort($dirList) ;
720  ?>  ?>
721    
722  <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>
723    
724  <?php  <?php
725                  while (list($key,$dir) = each($dirList)) {                  while (list($key,$dir) = each($dirList)) {
# Line 549  function Navigate($fsRoot,$relDir) { Line 729  function Navigate($fsRoot,$relDir) {
729                          $tstr .= "\">" . $dir . "/</A>" ;                          $tstr .= "\">" . $dir . "/</A>" ;
730  ?>  ?>
731    
732  <TR><TD><?php echo $gblIcon("fldr") ?></TD>  <TR><TD><?= $gblIcon("fldr") ?></TD>
733  <TD COLSPAN=4 CLASS=LST><?php echo $tstr ?></TD></TR>  <TD COLSPAN=5 CLASS=LST><?= $tstr ?></TD></TR>
734    
735  <?php  <?php
736                  }  // iterate over dirs                  }  // iterate over dirs
737          }  // end if no dirs          }  // end if no dirs
738  ?>  ?>
739    
740  <TR><TD></TD><TD COLSPAN=4><HR><B><?php echo $webRoot . $relDir ?>  <TR><TD></TD><TD COLSPAN=5><HR><B><?= $webRoot . $relDir ?>
741  </B></TD></TR>  </B></TD></TR>
742  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>  <TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>
743  <TD><?php echo $gblIcon("blank") ?></TD>  <TD><?= $gblIcon("blank").$gblIcon("blank") ?></TD>
744    <TD CLASS=TOP>NOTE</TD>
745  <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>
746    
747  <?php  <?php
748          if (sizeof($fileList) > 0) {          if (sizeof($fileList) > 0) {
749            sort($fileList) ;            sort($fileList) ;
750            while (list($key,$file) = each($fileList)) {              while (list($key,$file) = each($fileList)) {  
751              $path = $fsDir."/".$file ;                  $path = $fsDir."/".$file ;
752              $mod  = filemtime($path) ;                  $mod  = filemtime($path) ;
753              $sz   = filesize($path) ;                  $sz   = filesize($path) ;
754    
755              if ($sz >= 10240) {                  if ($sz >= 10240) {
756                $sz = (int)(($sz+1023)/1024) . " k" ;                          $sz = (int)(($sz+1023)/1024) . " k" ;
757              }                  } else {
758              else {                          $sz .= " " ;
759                $sz .= " " ;                  } // end size
760              } // end size  
761                    $a = $b = "" ;
762              $a = $b = "" ;  
763                    $info_url=$self."?A=E&F=".urlencode($file)."&D=".urlencode($relDir);
764              if ( ($mod + 30*86400) > time() ) {  
765                $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;                  if ( ($mod + $gblModDays*86400) > time() ) {
766                $a .= " than 30 days\"> * </SPAN>" ;                          $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
767              }                          $a .= " than $gblModDays days\"> * </SPAN>" ;
768                    }
769              $tstr = $webRoot . $relDir . "/" . $file ;  
770              $tstr  = "<A HREF=\"" . $tstr . "\">" ;                  $file_lock=CheckLock($path);
771              $tstr .= $file . "</A>" . $a ;  
772                    $file_url_html="<A HREF=\"$self?A=V&F=".urlencode($file);
773              $ext = strtolower(strrchr($file,".")) ;                  $file_url_html.="&D=".urlencode($relDir);
774              if ( $ext=="" ||                  $file_url_html.="\" TITLE=\"View file\">" ;
775                   strstr(join(" ",$gblEditable),$ext) )  
776              {                    if (substr($file,0,5) != ".del/") {
777                $b  = "<A HREF=\"" . $self . "?A=C&F=" ;                          $file_url_html .= $file . "</A>" . $a ;
778                $b .= urlencode($file) . "&D=" . urlencode($relDir) ;                  } else {
779                $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>";
780                $b .= $gblIcon("view") . "</A>" ;                  }
781              }  
782                    $note_html="<a href=\"$info_url#note\">".$gblIcon("note")."</a>".ReadNote($path);
783    
784                    $ext = strtolower(strrchr($file,".")) ;
785    
786                    if ($file_lock) {
787                            if ($file_lock == $GLOBALS[gblUserName]) {
788                                    $b.="<A HREF=\"$self?A=Ci&F=".urlencode($file);
789                                    $b.="&D=".urlencode($relDir);
790                                    $b.="\" TITLE=\"Checkin (update) file on server\">" ;
791                                    $file_url_html=$b;
792                                    $b.=$gblIcon("checkin")."</A>" ;
793                                    $b.= $gblIcon("blank");
794                                    $file_url_html.="$file</a> $a";
795                                    $note_html = $gblIcon("blank")."<b>Please check-in (update) this file</b>";
796                            } else {
797                                    $b = $gblIcon("locked");
798                                    $b.= $gblIcon("blank");
799                                    $note_html = $gblIcon("blank")."<b>File locked by $file_lock</b>";
800                                    $file_url_html = "$file $a";
801                            }
802                    } else {
803                            $b.="<A HREF=\"$self?A=Co&F=".urlencode($file);
804                            $b.="&D=".urlencode($relDir);
805                            $b.="\" TITLE=\"Checkout file for edit\">" ;
806                            $b.=$gblIcon("checkout")."</A>" ;
807    
808                            if ( $ext=="" || strstr(join(" ",$gblEditable),$ext) ) {  
809                                    $b.="<A HREF=\"$self?A=C&F=".urlencode($file);
810                                    $b.="&D=".urlencode($relDir);
811                                    $b.="\" TITLE=\"List contents\">" ;
812                                    $b.=$gblIcon("view")."</A>" ;
813                            } else {
814                                    $b.= $gblIcon("blank");
815                            }
816                    }
817    
818    
819  ?>  ?>
820    
821  <TR><TD>  <TR><TD>
822  <A HREF="<?php echo $self ?>?A=E&F=<?php echo urlencode($file)  <A HREF="<?= $info_url ?>" TITLE="View/Edit">
823  ?>&D=<?php echo urlencode($relDir) ?>" TITLE="View/Edit">  <?= $gblIcon($ext) ?></A></TD>
824  <?php echo $gblIcon($ext) ?></A></TD>  <TD CLASS=LST><?= $file_url_html ?></TD>
825  <TD CLASS=LST><?php echo $tstr ?></TD>  <TD CLASS=LST ALIGN=center><?= $b ?></TD>
826  <TD CLASS=LST ALIGN=center><?php echo $b ?></TD>  <TD CLASS=LST ALIGN=left><?= $note_html ?></TD>
827  <TD CLASS=LST><?php echo date("d/M/y G:i:s",$mod) ?></TD>  <TD CLASS=LST><?= date("$GLOBALS[gblDateFmt] $GLOBALS[gblTimeFmt]",$mod) ?></TD>
828  <TD CLASS=LST><?php echo $sz ?>Bytes</TD></TR>  <TD CLASS=LST><?= $sz ?>Bytes</TD></TR>
829    
830  <?php  <?php
831            }  // iterate over files            }  // iterate over files
# Line 617  function Navigate($fsRoot,$relDir) { Line 834  function Navigate($fsRoot,$relDir) {
834          if ($emptyDir) {          if ($emptyDir) {
835  ?>  ?>
836    
837  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
838   <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>   <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>
839    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">    <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
840    OK TO DELETE THIS EMPTY FOLDER?    OK TO DELETE THIS EMPTY FOLDER?
841    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">    <INPUT TYPE="CHECKBOX" NAME="CONFIRM">
842    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">    <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">
# Line 630  function Navigate($fsRoot,$relDir) { Line 847  function Navigate($fsRoot,$relDir) {
847          } // end if emptyDir          } // end if emptyDir
848  ?>  ?>
849    
850  <TR><TD></TD><TD COLSPAN=4><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
851    
852  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <TR><TD></TD><TD COLSPAN=5>
853  <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>CREATE NEW  <?
854    if (file_exists(".info.inc")) {
855            include(".info.inc");
856    }
857    ?>
858    </TD></TR>
859    
860    <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
861    
862    <FORM METHOD="POST" ACTION="<?= $self ?>">
863    <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
864   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-   <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR-
865   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;   <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;
866   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>   <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
867   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">   <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
868   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">   <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
869   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>   <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR>
870   <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  
871   </NOBR>   </NOBR>
872  </TD></TR>  </TD></TR>
873  </FORM>  </FORM>
# Line 653  function Navigate($fsRoot,$relDir) { Line 879  function Navigate($fsRoot,$relDir) {
879    
880  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
881    
882  function UploadPage($fsRoot, $relDir) {  function UploadPage($fsRoot, $relDir, $filename) {
883    
884          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
885          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 661  function UploadPage($fsRoot, $relDir) { Line 887  function UploadPage($fsRoot, $relDir) {
887    
888  <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>
889  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
890   ACTION="<?php echo $self ?>">   ACTION="<?= $self ?>">
891  DESTINATION DIRECTORY:<B><?php echo " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
892    <? if (isset($filename)) { ?>
893    <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
894    <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
895    <? } ?>
896  <P>PATHNAME OF LOCAL FILE<BR>  <P>PATHNAME OF LOCAL FILE<BR>
897  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>">
898  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">  <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">
899  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>  <INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>
900  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>  <P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>
901  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>  <P>If the <B>[BROWSE...]</B> button is not displayed,<BR>
902  you must upgrade to an RFC1867-compliant browser.</P>  you must upgrade to an RFC1867-compliant browser.</P>
903  <P>Your browser:<BR><?php echo $GLOBALS["HTTP_USER_AGENT"] ?></P>  <P>Your browser:<BR><?= $GLOBALS["HTTP_USER_AGENT"] ?></P>
904  </FORM>  </FORM>
905  </TD></TR>  </TD></TR>
906  <TR><TD></TD><TD>  <TR><TD></TD><TD>
907  <FORM METHOD="POST" ACTION="<?php echo $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
908  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>"><BR>  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?= $relDir ?>"><BR>
909  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">
910  </FORM>  </FORM>
911  </TD></TR></TABLE></P>  </TD></TR></TABLE></P>
# Line 694  function Error($title,$text="") { Line 924  function Error($title,$text="") {
924    
925  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
926    
 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  
   
 //////////////////////////////////////////////////////////////////  
   
927  function CreateHash($user, $pw) {  function CreateHash($user, $pw) {
928    
929          global $gblHash ;  // hash function to use          global $gblHash ;  // hash function to use
# Line 749  function NoEntry() { Line 958  function NoEntry() {
958          StartHTML($title,$text) ;          StartHTML($title,$text) ;
959  ?>  ?>
960    
961  <FORM ACTION="<?php echo $self ?>?HASH=create" METHOD="POST">  <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">
962  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?php echo $user ?>">  <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">
963  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?php echo $pw ?>">  <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">
964    
965  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>
966  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 976  the source<BR>of this file.<BR><BR>
976    
977  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
978    
979    function LogIt($target,$msg) {
980    
981            $dir=dirname($target);
982            if (! file_exists($dir."/.log")) {
983                    mkdir($dir."/.log",0700);
984            }
985            $file=basename($target);
986    
987            $log=fopen("$dir/.log/$file","a+");
988            fputs($log,date("$GLOBALS[gblDateFmt]\t$GLOBALS[gblTimeFmt]").
989                    "\t$GLOBALS[gblUserName]\t$msg\n");
990            fclose($log);
991    
992    }
993    
994    
995    //////////////////////////////////////////////////////////////////
996    
997    function WriteNote($target,$msg) {
998    
999            $target=stripSlashes($target);
1000            $dir=dirname($target);
1001            if (! file_exists($dir."/.note")) {
1002                    mkdir($dir."/.note",0700);
1003            }
1004            $file=basename($target);
1005    
1006            $note=fopen("$dir/.note/$file","w");
1007            fputs($note,"$msg\n");
1008            fclose($note);
1009    
1010            Logit($target,"added note $msg");
1011    
1012    }
1013    
1014    function ReadNote($target) {
1015    
1016            $target=stripSlashes($target);
1017            $dir=dirname($target);
1018            $file=basename($target);
1019            $msg="";
1020            if (file_exists($dir."/.note/$file")) {
1021                    $note=fopen("$dir/.note/$file","r");
1022                    $msg=fgets($note,4096);
1023                    fclose($note);
1024            }
1025            return StripSlashes($msg);
1026    
1027    }
1028    
1029    //////////////////////////////////////////////////////////////////
1030    
1031    function MoveTo($source,$folder) {
1032    
1033            $source=stripSlashes($source);
1034            $file=basename($source);
1035            if (! file_exists($folder)) {
1036                    mkdir($folder,0700);
1037            }
1038            if (file_exists($source)) {
1039                    rename($source,"$folder/$file");
1040            }
1041    }
1042    
1043    //////////////////////////////////////////////////////////////////
1044    
1045    function Lock($target) {
1046    
1047            $target=stripSlashes($target);
1048            $dir=dirname($target);
1049            if (! file_exists($dir."/.lock")) {
1050                    mkdir($dir."/.lock",0700);
1051            }
1052            $file=basename($target);
1053    
1054            if (file_exists("$dir/.lock/$file")) {
1055                    Logit($target,"attempt to locked allready locked file!");
1056            } else {
1057                    $lock=fopen("$dir/.lock/$file","w");
1058                    fputs($lock,"$GLOBALS[gblUserName]\n");
1059                    fclose($lock);
1060    
1061                    Logit($target,"file locked");
1062            }
1063    
1064    }
1065    
1066    function CheckLock($target) {
1067    
1068            $target=stripSlashes($target);
1069            $dir=dirname($target);
1070            $file=basename($target);
1071            $msg=0;
1072            if (file_exists($dir."/.lock/$file")) {
1073                    $lock=fopen("$dir/.lock/$file","r");
1074                    $msg=fgets($lock,4096);
1075                    fclose($lock);
1076            }
1077            return chop($msg);
1078    
1079    }
1080    
1081    function Unlock($target) {
1082    
1083            $target=stripSlashes($target);
1084            $dir=dirname($target);
1085            $file=basename($target);
1086            if (file_exists($dir."/.lock/$file")) {
1087                    unlink("$dir/.lock/$file");
1088                    Logit($target,"file unlocked");
1089            } else {
1090                    Logit($target,"attempt to unlocked non-locked file!");
1091            }
1092    
1093    }
1094    
1095    //////////////////////////////////////////////////////////////////
1096    
1097    function urlpath($url) {
1098            $url=urlencode(StripSlashes("$url"));
1099            $url=str_replace("%2F","/",$url);
1100            $url=str_replace("+","%20",$url);
1101            return($url);
1102    }
1103    
1104    //////////////////////////////////////////////////////////////////
1105    
1106    function safe_rename($from,$to) {
1107            if (file_exists($from) && is_writable(dirname($to))) {
1108                    rename($from,$to);
1109            }
1110    }
1111    
1112    //////////////////////////////////////////////////////////////////
1113    
1114    // recursivly delete directory
1115    
1116    function rrmdir($dir) {
1117            $handle=opendir($dir);
1118            while ($file = readdir($handle)) {
1119                    if ($file != "." && $file != "..") {
1120                            if (is_dir("$dir/$file"))
1121                                    rrmdir("$dir/$file");
1122                            else
1123                                    if (! @unlink("$dir/$file")) return(0);
1124                    }
1125            }
1126            closedir($handle);
1127            return @rmdir($dir);
1128    }
1129    
1130    //////////////////////////////////////////////////////////////////
1131    
1132    function ChangeLog($target,$msg) {
1133    
1134            global $gblFsRoot;
1135            $log=fopen("$gblFsRoot/.changelog","a+");
1136            if (substr($target,0,strlen($gblFsRoot)) == $gblFsRoot)
1137                    $target=substr($target,strlen($gblFsRoot),strlen($target)-strlen($gblFsRoot));
1138            fputs($log,time()."\t$target\t$GLOBALS[gblUserName]\t$msg\n");
1139            fclose($log);
1140    
1141    }
1142    
1143    function DisplayChangeLog($day) {
1144    
1145            global $gblFsRoot;
1146            if (!file_exists("$gblFsRoot/.changelog")) return;
1147            $log=fopen("$gblFsRoot/.changelog","r");
1148            $logarr = array();
1149            while($line = fgetcsv($log,255,"\t")) {
1150                    if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60))) {
1151                            array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1152                    }
1153            }
1154            fclose($log);
1155            $cl1=" class=lst"; $cl2="";
1156            print "<table border=0 width=100%>\n";
1157            while ($e = array_shift($logarr)) {
1158                    $cl=$cl1; $cl1=$cl2; $cl2=$cl;
1159                    $date = date("$GLOBALS[gblDateFmt]", $e[0]);
1160                    $time = date("$GLOBALS[gblTimeFmt]", $e[0]);
1161                    $dir = dirname($e[1]);
1162                    $file = basename($e[1]);
1163                    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";
1164            }
1165            print "</table>";
1166            print "<p>".GifIcon(up)." Back to <a href=$GLOBALS[PHP_SELF]>front page</a>.</p>";
1167    }
1168    
1169    //////////////////////////////////////////////////////////////////
1170    
1171  // MAIN PROGRAM  // MAIN PROGRAM
1172  // ============  // ============
1173  // query parameters: capital letters  // query parameters: capital letters
1174  // local functions : begin with capital letters  // local functions : begin with capital letters
1175  // global constants: begin with gbl  // global constants: begin with gbl
1176    
1177          $gblFilePerms = "644" ;         // default for new files          $gblFilePerms = 0640 ;         // default for new files
1178          $gblDirPerms  = 0755 ;          // default for new dirs          $gblDirPerms  = 0750 ;          // default for new dirs
1179    
1180          // phpinfo() ;          // phpinfo() ;
1181          // exit ;          // exit ;
# Line 788  the source<BR>of this file.<BR><BR> Line 1189  the source<BR>of this file.<BR><BR>
1189          }          }
1190    
1191          // authentication if $gblAuth == true          // authentication if $gblAuth == true
1192          if ( $gblAuth &&          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1193               $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ) {                  isset($relogin) && $gblPw == $relogin ) {
1194                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;
1195                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1196                  NoEntry() ;                  NoEntry() ;
# Line 824  the source<BR>of this file.<BR><BR> Line 1225  the source<BR>of this file.<BR><BR>
1225    
1226          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1227          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1228            
1229            $FN=stripSlashes($FN);
1230    
1231          switch ($POSTACTION) {          switch ($POSTACTION) {
1232          case "UPLOAD" :          case "UPLOAD" :
1233                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1234                  if (strstr($FN_name,"/"))                  if (strstr($FN_name,"/"))
1235                          Error("Non-conforming filename") ;                          Error("Non-conforming filename") ;
1236                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1237                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1238                  $source = $FN ;                  $source = $FN ;
1239                  $target = $fsDir . "/" . $FN_name ;                  if (! isset($FILENAME)) {       // from update file
1240                  exec("cp $source $target") ;                          $target = "$fsDir/$FN_name" ;
1241                  exec("chmod $gblFilePerms $target") ;                  } else {
1242                            $target = "$fsDir/$FILENAME";
1243                    }
1244    
1245                    // backup old files first
1246                    $dir=dirname($target);
1247                    if (! file_exists($dir."/.bak")) {
1248                            mkdir($dir."/.bak",0700);
1249                    }
1250                    if (! file_exists($dir."/.bak/$GLOBALS[gblNumBackups]")) {
1251                            mkdir($dir."/.bak/$GLOBALS[gblNumBackups]",0700);
1252                    }
1253                    $file=basename($target);
1254                    for($i=$GLOBALS[gblNumBackups]-1;$i>0;$i--) {
1255                            MoveTo("$dir/.bak/$i/$file","$dir/.bak/".($i+1)."/");
1256                    }
1257                    MoveTo($target,$dir."/.bak/1/");
1258    
1259                    copy($source,$target) ;
1260                    chmod($target,$gblFilePerms) ;
1261                  clearstatcache() ;                  clearstatcache() ;
1262                    Logit($target,"uploaded");
1263                    if (isset($FILENAME)) {
1264                            Unlock($target);
1265                    }
1266                    ChangeLog($target,"updated");
1267                  break ;                  break ;
1268    
1269          case "SAVE" :          case "SAVE" :
1270                  $path = $gblFsRoot . escapeshellcmd($RELPATH) ;                  $path = $gblFsRoot . $RELPATH ;
1271                  $writable = Writeable($path) ;                  $path=stripSlashes($path);
1272                  $legaldir = Writeable(dirname($path)) ;                  $writable = is_writeable($path) ;
1273                    $legaldir = is_writeable(dirname($path)) ;
1274                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
1275  // check for legal extension here as well  // check for legal extension here as well
1276                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1277                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1278                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1279                    $FILEDATA=stripSlashes($FILEDATA);
1280                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1281                  fclose($fh) ;                  fclose($fh) ;
1282                  clearstatcache() ;                  clearstatcache() ;
1283                    Logit($path,"saved changes");
1284                    ChangeLog($path,"saved changes");
1285                  break ;                  break ;
1286    
1287          case "CREATE" :          case "CREATE" :
1288                  // we know $fsDir exists                  // we know $fsDir exists
1289                  if (!Writeable($fsDir)) Error("Write denied",$relDir) ;                  if ($FN == "") break;           // no filename!
1290                    if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
1291                  $path = $fsDir . "/" . $FN ;  // file or dir to create                  $path = $fsDir . "/" . $FN ;  // file or dir to create
1292                  $relPath = $relDir . "/" . $FN ;                  $relPath = $relDir . "/" . $FN ;
1293                  switch ( $T ) {                  switch ( $T ) {
1294                  case "D" :  // create a directory                  case "D" :  // create a directory
1295                    if ( ! @mkdir($path,$gblDirPerms) )                          if ( ! @mkdir($path,$gblDirPerms) )
1296                      Error("Mkdir failed",$relPath) ; // eg. if it exists                                  Error("Mkdir failed",$relPath) ; // eg. if it exists
1297                    clearstatcache() ;                          clearstatcache() ;
1298                    break ;                          break ;
1299                  case "F" :  // create a new file                  case "F" :  // create a new file
1300  // this functionality is doubled in DetailView().  // this functionality is doubled in DetailView().
1301  // better keep it here altogether  // better keep it here altogether
1302  // chmod perms to $gblFilePerms  // chmod perms to $gblFilePerms
1303                    if ( file_exists($path) && !Writable($path) )                          if ( file_exists($path) && !is_writable($path) )
1304                      Error("File not writable", $relPath) ;                                  Error("File not writable", $relPath) ;
1305                    $tstr = $PHP_SELF . "?A=E&D=" . $relDir . "&F=" . $FN ;                          $fh = fopen($path, "w+") ;
1306                    header("Location: " . $tstr) ;                          if ($fh) {
1307                    exit ;                                  fputs($fh,"\n");
1308                                    fclose($fh) ;
1309                                    LogIt($path,"file created");
1310                            } else {
1311                                    Error("Creation of file $relPath failed -- $path");
1312                            }
1313                            $tstr = "$PHP_SELF?A=E&D=".urlencode($relDir)."&F=".urlencode($FN) ;
1314                            header("Location: " . $tstr) ;
1315                            ChangeLog($target,"created");
1316                            exit ;
1317                  }                  }
1318                  break ;                  break ;
1319    
# Line 883  the source<BR>of this file.<BR><BR> Line 1324  the source<BR>of this file.<BR><BR>
1324                  $tstr .= "insufficient privileges: " ;                  $tstr .= "insufficient privileges: " ;
1325    
1326                  if ( $FN != "") {  // delete file                  if ( $FN != "") {  // delete file
1327                    $path =  $fsDir . "/" . $FN ;                          $path =  $fsDir . "/" . $FN ;
1328                    if ( ! @unlink($path) ) {                  
1329                      Error("File delete failed", $tstr . $path) ;                          $dir=dirname($path);
1330                      exit ;                          $file=basename($path);
1331                    }                                              if (! file_exists("$dir/.del")) {
1332                                    mkdir("$dir/.del",0700);
1333                            }
1334    
1335    //                      if ( ! @unlink($path) ) {
1336                            if ( ! rename($path,"$dir/.del/$file") ) {
1337                                    Error("File delete failed", $tstr . $path) ;
1338                                    Logit($path,"file delete failed");
1339                                    exit ;
1340                            } else {
1341                                    Logit($path,"file deleted");
1342                                    MoveTo("$dir/.log/$file","$dir/.del/.log/");
1343                                    MoveTo("$dir/.note/$file","$dir/.del/.note/");
1344                                    MoveTo("$dir/.lock/$file","$dir/.del/.lock/");
1345                            }
1346                  }                  }
1347                  else {  // delete directory                  else {  // delete directory
1348                    if ( ! @rmdir($fsDir) ) {                    if ( ! @rrmdir($fsDir) ) {
1349                      Error("Rmdir failed", $tstr . $fsDir) ;                      Error("Rmdir failed", $tstr . $fsDir) ;
1350                    }                    }
1351                    else {                    else {
# Line 899  the source<BR>of this file.<BR><BR> Line 1354  the source<BR>of this file.<BR><BR>
1354                  }                  }
1355                  break ;                  break ;
1356    
1357            case "UNDELETE" :  
1358                    if ( $CONFIRM != "on" ) break ;
1359    
1360                    if (substr($FN,0,4) != ".del") break ;
1361                    $file=substr($FN,4,strlen($FN)-4);
1362    
1363                    Logit("$fsDir/.del/$file","undeleted");
1364                    MoveTo("$fsDir/.del/$file","$fsDir/");
1365                    MoveTo("$fsDir/.del/.log/$file","$fsDir/.log/");
1366                    MoveTo("$fsDir/.del/.note/$file","$fsDir/.note/");
1367                    MoveTo("$fsDir/.del/.lock/$file","$fsDir/.lock/");
1368    
1369                    break ;
1370    
1371            case "RENAME" :  
1372                    if ( $CONFIRM != "on" ) break ;
1373    
1374                    Logit("$fsDir/$FN","renamed $FN to $NEWNAME");
1375                    safe_rename("$fsDir/$FN","$fsDir/$NEWNAME");
1376                    safe_rename("$fsDir/.log/$FN","$fsDir/.log/$NEWNAME");
1377                    safe_rename("$fsDir/.note/$FN","$fsDir/.note/$NEWNAME");
1378                    safe_rename("$fsDir/.lock/$FN","$fsDir/.lock/$NEWNAME");
1379                    for($i=0;$i<=$GLOBALS[gblNumBackups];$i++) {
1380                            safe_rename("$fsDir/.bak/$i/$FN","$fsDir/.bak/$i/$NEWNAME");
1381                    }
1382    
1383                    break ;
1384    
1385            case "NOTE" :  
1386                    WriteNote("$fsDir/$FN","$NOTE");
1387                    break ;
1388    
1389            case "UNLOCK" :  
1390                    if ( $CONFIRM != "on" ) break ;
1391                    Unlock("$fsDir/$FN");
1392                    break ;
1393    
1394          default :          default :
1395                  // user hit "CANCEL" or undefined action                  // user hit "CANCEL" or undefined action
1396          }          }
# Line 914  the source<BR>of this file.<BR><BR> Line 1406  the source<BR>of this file.<BR><BR>
1406          // $A=U : upload to path given in $D          // $A=U : upload to path given in $D
1407          // $A=E : display detail of file $D/$F and edit          // $A=E : display detail of file $D/$F and edit
1408          // $A=C : display code in file $D/$F          // $A=C : display code in file $D/$F
1409            // $A=Co : checkout file $D/$F
1410            // $A=Ci : checkin file $D/$F
1411            // $A=V : view file (do nothing except log)
1412          // default : display directory $D          // default : display directory $D
1413            
1414          switch ($A) {          switch ($A) {
1415          case "U" :          case "U" :
1416                  // upload to $relDir                  // upload to $relDir
1417                  if (!Writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1418                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1419                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1420                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$SERVER_NAME</B>." ;
# Line 928  the source<BR>of this file.<BR><BR> Line 1423  the source<BR>of this file.<BR><BR>
1423                  EndHTML() ;                  EndHTML() ;
1424                  exit ;                  exit ;
1425          case "E" :          case "E" :
1426                    $F=stripSlashes($F);
1427                  // detail of $relDir/$F                  // detail of $relDir/$F
1428                  DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1429                  exit ;                  exit ;
1430          case "C" :          case "C" :
1431                    $F=stripSlashes($F);
1432                  // listing of $relDir/$F                  // listing of $relDir/$F
1433                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1434                  exit ;                  exit ;
1435            case "Co" :
1436                    // checkout
1437                    Lock("$gblFsRoot/$relDir/$F");
1438                    header("Content-Disposition: attachment; filename=$F" );
1439                    Header("Location: ".urlpath("$relDir/$F"));
1440                    exit;
1441            case "Ci" :
1442                    $F=stripSlashes($F);
1443                    // upload && update to $relDir
1444                    if (!is_writeable($gblFsRoot . $relDir))
1445                            Error("Write access denied",$relDir) ;
1446                    $text  = "Use this page to update a single " ;
1447                    $text .= "file to <B>$SERVER_NAME</B>." ;
1448                    StartHTML("(Update file Page)", $text) ;
1449                    UploadPage($gblFsRoot, $relDir, $F) ;
1450                    EndHTML() ;
1451                    exit ;
1452            case "V" :
1453                    // view
1454                    LogIt("$gblFsRoot/$relDir/$F","viewed");
1455                    header("Content-Disposition: attachment; filename=$F" );
1456                    Header("Location: ".urlpath("$relDir/$F"));
1457                    exit;
1458            case "Ch" :
1459                    StartHTML("(File changes)","All changes chronologicaly...");
1460                    DisplayChangeLog(0);    // all
1461                    EndHTML() ;
1462                    exit;
1463            case "Ch1" :
1464                    StartHTML("(File changes)","Changes to files in last day...");
1465                    DisplayChangeLog(1);
1466                    EndHTML() ;
1467                    exit;
1468          }          }
1469    
1470          // default: display directory $relDir          // default: display directory $relDir

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.22

  ViewVC Help
Powered by ViewVC 1.1.26