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

Diff of /docman.php

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

revision 1.21 by dpavlin, Wed Sep 13 08:27:43 2000 UTC revision 1.29 by dpavlin, Fri Jan 26 09:32:48 2001 UTC
# Line 35  Line 35 
35  /*             existent address after file modifications.       */  /*             existent address after file modifications.       */
36    
37  /*  /*
         2000-07-25 Dobrica Pavlinusic <dpavlin@rot13.org>  
38    
39          nuked exec calls (unsecure)          This project is now called Directory Manager.
         nuked writeable function (replaced by php is_writeable)  
         added support for https (tested with apache+mod_ssl)  
         added users file  
         date format user-selectable  
         cycle backup files in bak directory  
         support links as directoryes (for now)  
         support of file history logging  
         undelete capabilities (delete moves to .del directory)  
40    
41          2000-07-26 DbP          For more info, please see web pages at
42            http://www.rot13.org/~dpavlin/docman.html
43    
44          added more checking on entered filename (when creating file/dir)          It's relased under GPL by
45          added rename option          Dobrica Pavlinusic <dpavlin@rot13.org>
46    
47    
48  IMPORTANT INSTALLATION NOTE:  IMPORTANT INSTALLATION NOTE:
# Line 59  IMPORTANT INSTALLATION NOTE: Line 51  IMPORTANT INSTALLATION NOTE:
51          deleted files!          deleted files!
52    
53          .htusers is in form:          .htusers is in form:
54          login:Real Name:md5(loginpassword)          login:Real Name:[md5(loginpassword)|auth_*]:email@host.dom
55    
56    
57  TODO:  TODO:
58          mixed file/directory output (add type to each entry,          mixed file/directory output (add type to each entry,
59                  real support for links)                  real support for links)
60          retrieve old versions of files (overwritten)          access controll
61          show last lock date  
           
62  */  */
63    
64  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
# Line 80  TODO: Line 71  TODO:
71    
72  // GLOBAL PARAMETERS  // GLOBAL PARAMETERS
73  // =================  // =================
74  // Make modifications here to suit siteman to your needs  // Make modifications here to suit docman to your needs
75    
76  //      error_reporting(4) ;            // how verbose ?  //      error_reporting(4) ;            // how verbose ?
77    
78            // from where to include auth_*.php modules?
79            $gblIncDir = "/data/docman";
80    
81          // username/password should not be system          // username/password should not be system
82          // usernames/passwords !!          // usernames/passwords !!
83    
 //      $gblPw    = "hash_of_your_username_and_password" ;  
   
 //      $gblAuth  = false ;             // use builtin authentication  
         $gblAuth  = true ;             // use builtin authentication  
         $gblHash  = "md5" ;             // hash function to use  
   
84          $gblPw    = "";          $gblPw    = "";
85    
86          if ($gblAuth) {          $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";
87                  $htusers_file=dirname($SCRIPT_FILENAME)."/.htusers";          if (! file_exists($htusers_file)) {
88                  if (! file_exists($htusers_file)) {                  $htusers=fopen($htusers_file,"a+");
89                          $htusers=fopen($htusers_file,"a+");                  fputs($htusers,"# Change owner of $htusers_file to root !!\n");
90                          fputs($htusers,"# Change owner of $htusers_file to root !!\n");                  fputs($htusers,"demo:full name:[md5_hash|auth_*]:e-mail\n");
91                          fputs($htusers,"demo:full name:md5_hash\n");                  fclose($htusers);
92                          fclose($htusers);          }
93                  }          $htusers=fopen($htusers_file,"r");
94                  $htusers=fopen($htusers_file,"r");          while($user = fgetcsv($htusers,255,":")) {
95                  while($user = fgetcsv($htusers,255,":")) {                  if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {
96                          if ($user[0] == $GLOBALS["PHP_AUTH_USER"]) {                          $gblUserName=$user[1];
97                                  $gblUserName=$user[1];                          $gblPw=$user[2];
98                                  $gblPw=$user[2];                          if (substr($gblPw,0,5) == "auth_" && file_exists("$gblIncDir/$gblPw.php")) {
99                                  $gblEmail=$user[3];                                  require("$gblIncDir/$gblPw.php");
100                                  continue ;                                  if ($gblPw($user)) {
101                                            $gblPw=md5($PHP_AUTH_USER.$PHP_AUTH_PW);
102                                    }
103                          }                          }
104                            $gblEmail=$user[3];
105                            continue ;
106                  }                  }
                 fclose($htusers);  
107          }          }
108            fclose($htusers);
109    
110            // date format
111  //      $gblDateFmt="D, F d, Y";  //      $gblDateFmt="D, F d, Y";
 //      $gblTimeFmt="g:i:sA";  
   
112          $gblDateFmt="Y-m-d";          $gblDateFmt="Y-m-d";
113    
114            // time format
115    //      $gblTimeFmt="g:i:sA";
116          $gblTimeFmt="H:i:s";          $gblTimeFmt="H:i:s";
117    
118          // Number of backup files to keep          // Number of backup files to keep
# Line 130  TODO: Line 124  TODO:
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    
127          $gblIcon = "GifIcon" ;          // MockIcon or GifIcon          $gblIcon="GifIcon";             // MockIcon or GifIcon
128    
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 154  TODO: Line 148  TODO:
148    
149  function StartHTML($title,$text="") {  function StartHTML($title,$text="") {
150    
151          $title = "Site Manager " . $title ;          $title = "Document Manager " . $title ;
152          $host  = $GLOBALS["HTTP_HOST"] ;          $host  = $GLOBALS["HTTP_HOST"] ;
153          $self  = $GLOBALS["PHP_SELF"] ;          $self  = $GLOBALS["PHP_SELF"] ;
154  ?>  ?>
# Line 367  echo($fstr) ; ?></TEXTAREA> Line 361  echo($fstr) ; ?></TEXTAREA>
361  </FORM>  </FORM>
362    
363  <?php  <?php
364            
365          $name=basename("$fsDir/$fn");          $name=basename("$fsDir/$fn");
366          $logname=dirname("$fsDir/$fn")."/.log/$name";          $logname=dirname("$fsDir/$fn")."/.log/$name";
367          $bakdir=dirname("$fsDir/$fn")."/.bak";          $bakdir=dirname("$fsDir/$fn")."/.bak";
368          if (file_exists($logname)) {          if (file_exists($logname)) {
369                  $log=fopen($logname,"r");                  $log=fopen($logname,"r");
370                  $cl1=" class=lst"; $cl2="";                  $cl1=" class=LST"; $cl2="";
371                  $logarr = array();                  $logarr = array();
372                  while($line = fgetcsv($log,255,"\t")) {                  while($line = fgetcsv($log,255,"\t")) {
373                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;                          $cl=$cl1; $cl1=$cl2; $cl2=$cl;
# Line 385  echo($fstr) ; ?></TEXTAREA> Line 379  echo($fstr) ; ?></TEXTAREA>
379                  while ($e = array_shift($logarr)) {                  while ($e = array_shift($logarr)) {
380                          if (strstr($e[4],"upload")) {                          if (strstr($e[4],"upload")) {
381                                  if (file_exists("$bakdir/$bakcount/$name")) {                                  if (file_exists("$bakdir/$bakcount/$name")) {
382                                          $e[4]="<a href=\"".dirname($relPath)."/.bak/$bakcount/$name\">$e[4]</a>";                                          $e[4]="<a href=\"".urlpath(dirname($relPath)."/.bak/$bakcount/$name")."\">$e[4]</a>";
383                                  }                                  }
384                                  $bakcount++;                                  $bakcount++;
385                          }                          }
# Line 650  function Navigate($fsRoot,$relDir) { Line 644  function Navigate($fsRoot,$relDir) {
644    
645          $self     = $GLOBALS["PHP_SELF"] ;          $self     = $GLOBALS["PHP_SELF"] ;
646          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {          if (isset($GLOBALS["HTTPS"]) && $GLOBALS["HTTPS"] == "on") {
647                  $webRoot  = "https://" . $GLOBALS["SERVER_NAME"] ;                  $webRoot  = "https://" . $GLOBALS["HTTP_HOST"] ;
648          } else {          } else {
649                  $webRoot  = "http://" . $GLOBALS["SERVER_NAME"] ;                  $webRoot  = "http://" . $GLOBALS["HTTP_HOST"] ;
650          }          }
651          $fsDir    = $fsRoot . $relDir . "/" ; // current directory          $fsDir    = $fsRoot . $relDir . "/" ; // current directory
652    
# Line 829  function Navigate($fsRoot,$relDir) { Line 823  function Navigate($fsRoot,$relDir) {
823    
824  <?php  <?php
825            }  // iterate over files            }  // iterate over files
826          }  // end if no files          } else {  // end if no files
827    ?>
828     <TR><TD></TD><TD COLSPAN=5 CLASS=LST>
829      No files in this directory
830     </TD></TR>
831    <?
832            }
833    
834          if ($emptyDir) {          if ($emptyDir) {
835  ?>  ?>
# Line 849  function Navigate($fsRoot,$relDir) { Line 849  function Navigate($fsRoot,$relDir) {
849    
850  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>
851    
 <TR><TD></TD><TD COLSPAN=5>  
852  <?  <?
853  if (file_exists(".info.inc")) {  if (file_exists(".info.inc")) {
854            print "<TR><TD></TD><TD COLSPAN=5>";
855          include(".info.inc");          include(".info.inc");
856            print "</TD></TR>
857            <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>";
858  }  }
859  ?>  ?>
 </TD></TR>  
   
 <TR><TD></TD><TD COLSPAN=5><HR></TD></TR>  
860    
861  <FORM METHOD="POST" ACTION="<?= $self ?>">  <FORM METHOD="POST" ACTION="<?= $self ?>">
862  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW  <TR><TD></TD><TD COLSPAN=5 CLASS=BAR>CREATE NEW
# Line 879  if (file_exists(".info.inc")) { Line 878  if (file_exists(".info.inc")) {
878    
879  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
880    
881  function UploadPage($fsRoot, $relDir, $filename) {  function UploadPage($fsRoot, $relDir, $filename="") {
882    
883          $self = $GLOBALS["PHP_SELF"] ;          $self = $GLOBALS["PHP_SELF"] ;
884          if ($relDir == "") $relDir = "/" ;          if ($relDir == "") $relDir = "/" ;
# Line 889  function UploadPage($fsRoot, $relDir, $f Line 888  function UploadPage($fsRoot, $relDir, $f
888  <FORM ENCTYPE="multipart/form-data" METHOD="POST"  <FORM ENCTYPE="multipart/form-data" METHOD="POST"
889   ACTION="<?= $self ?>">   ACTION="<?= $self ?>">
890  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>  DESTINATION DIRECTORY:<B><?= " " . $relDir ?></B>
891  <? if (isset($filename)) { ?>  <? if (isset($filename) && $filename!="") { ?>
892  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>  <br>DESTINATION FILE:<B><?= " " . $filename ?></B>
893  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">  <INPUT TYPE="HIDDEN" NAME="FILENAME" VALUE="<?= $filename ?>">
894  <? } ?>  <? } ?>
# Line 924  function Error($title,$text="") { Line 923  function Error($title,$text="") {
923    
924  //////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////
925    
 function CreateHash($user, $pw) {  
   
         global $gblHash ;  // hash function to use  
   
         if ($user == "" || $pw == "") {  
                 $text = "either no password or no username supplied" ;  
                 Error("Create Hash",$text) ;  
         }  
         $title = "(Create Hash)" ;  
         StartHTML($title) ;  
         echo "<P ALIGN=center>" ;  
         echo "<BLOCKQUOTE>Copy the value below and paste it " ;  
         echo "into the<BR>value for \$gblPw in the source of " ;  
         echo "this file<BR><BR><B>" . $gblHash($user.$pw) ;  
         echo "</B><BR><BR>Hash function: " . $gblHash ;  
         echo "</BLOCKQUOTE></P>" ;  
         EndHTML() ;  
         exit ;  
   
 } // end function CreateHash  
   
 //////////////////////////////////////////////////////////////////  
   
926  function NoEntry() {  function NoEntry() {
927    
928          $user = $GLOBALS["PHP_AUTH_USER"] ;          $user = $GLOBALS["PHP_AUTH_USER"] ;
# Line 956  function NoEntry() { Line 932  function NoEntry() {
932          $title = "(401 Unauthorized)" ;          $title = "(401 Unauthorized)" ;
933          $text  = "No trespassing !" ;          $text  = "No trespassing !" ;
934          StartHTML($title,$text) ;          StartHTML($title,$text) ;
 ?>  
   
 <FORM ACTION="<?= $self ?>?HASH=create" METHOD="POST">  
 <INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?= $user ?>">  
 <INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?= $pw ?>">  
   
 <BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>  
 Click below to <B>generate a password hash</B><BR>from  
 the username-password pair you just<BR>entered. Then include the hash in  
 the source<BR>of this file.<BR><BR>  
 <INPUT TYPE="SUBMIT" VALUE="CREATE HASH">  
 </BLOCKQUOTE></FORM>  
935    
 <?php  
936          EndHTML() ;          EndHTML() ;
937          exit ;          exit ;
938  }  }
# Line 978  the source<BR>of this file.<BR><BR> Line 941  the source<BR>of this file.<BR><BR>
941    
942  function LogIt($target,$msg) {  function LogIt($target,$msg) {
943    
         $target=stripSlashes($target);  
944          $dir=dirname($target);          $dir=dirname($target);
945          if (! file_exists($dir."/.log")) {          if (! file_exists($dir."/.log")) {
946                  mkdir($dir."/.log",0700);                  mkdir($dir."/.log",0700);
# Line 1148  function DisplayChangeLog($day) { Line 1110  function DisplayChangeLog($day) {
1110          $log=fopen("$gblFsRoot/.changelog","r");          $log=fopen("$gblFsRoot/.changelog","r");
1111          $logarr = array();          $logarr = array();
1112          while($line = fgetcsv($log,255,"\t")) {          while($line = fgetcsv($log,255,"\t")) {
1113                  if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60))) {                  if ($day!=1 || ($day==1 && (time()-$line[0] < 24*60*60))) {
1114                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));                          array_unshift($logarr,array($line[0],$line[1],$line[2],$line[3]));
1115                  }                  }
1116          }          }
1117          fclose($log);          fclose($log);
1118          $cl1=" class=lst"; $cl2="";          $cl1=" class=LST"; $cl2="";
1119          print "<table border=0 width=100%>\n";          print "<table border=0 width=100%>\n";
1120          while ($e = array_shift($logarr)) {          while ($e = array_shift($logarr)) {
1121                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;                  $cl=$cl1; $cl1=$cl2; $cl2=$cl;
# Line 1184  function DisplayChangeLog($day) { Line 1146  function DisplayChangeLog($day) {
1146          // forks before authentication: style sheet and hash          // forks before authentication: style sheet and hash
1147          // creation if password not yet set.          // creation if password not yet set.
1148          if ($STYLE == "get") { CSS() ; exit ; }          if ($STYLE == "get") { CSS() ; exit ; }
         if ($HASH != "") {  
                 CreateHash($USER, $PW) ;  
                 exit ;  
         }  
1149    
1150          // authentication if $gblAuth == true          // authentication failure
1151          if ( $gblAuth && $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||          if ( md5($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ||
1152                  isset($relogin) && $gblPw == $relogin ) {                  isset($relogin) && $gblPw == $relogin ) {
1153                  header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;                  header("WWW-authenticate: basic realm=\"$HTTP_HOST\"") ;
1154                  header("HTTP/1.0 401 Unauthorized") ;                  header("HTTP/1.0 401 Unauthorized") ;
1155                  NoEntry() ;                  NoEntry() ;
1156                  exit ;                  exit ;
# Line 1215  function DisplayChangeLog($day) { Line 1173  function DisplayChangeLog($day) {
1173          // i.e. below $gblFsRoot.          // i.e. below $gblFsRoot.
1174    
1175          $relScriptDir = dirname($SCRIPT_NAME) ;                  $relScriptDir = dirname($SCRIPT_NAME) ;        
1176          // i.e. /siteman          // i.e. /docman
1177    
1178          $fsScriptDir  = dirname($SCRIPT_FILENAME) ;              $fsScriptDir  = dirname($SCRIPT_FILENAME) ;    
1179          // i.e. /home/httpd/html/siteman          // i.e. /home/httpd/html/docman
1180    
1181          $gblFsRoot = substr($fsScriptDir,0,          // start on server root
1182            strlen($fsScriptDir)-strlen($relScriptDir)) ;  //      $gblFsRoot = substr($fsScriptDir,0, strlen($fsScriptDir)-strlen($relScriptDir)) ;
1183            // or on script root
1184            $gblFsRoot = $fsScriptDir;
1185          // i.e. /home/httpd/html          // i.e. /home/httpd/html
1186    
1187          $fsDir = $gblFsRoot . $relDir ; // current directory          $fsDir = $gblFsRoot . $relDir ; // current directory
1188          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;          if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
1189            
1190            $FN=stripSlashes($FN);
1191    
1192          switch ($POSTACTION) {          switch ($POSTACTION) {
1193          case "UPLOAD" :          case "UPLOAD" :
1194                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;                  if (!is_writeable($fsDir)) Error("Write denied",$relDir) ;
# Line 1235  function DisplayChangeLog($day) { Line 1197  function DisplayChangeLog($day) {
1197                  // TODO : should rather check for escapeshellcmds                  // TODO : should rather check for escapeshellcmds
1198                  // but maybe RFC 18xx asserts safe filenames ....                  // but maybe RFC 18xx asserts safe filenames ....
1199                  $source = $FN ;                  $source = $FN ;
1200                    if (! file_exists($source)) {
1201                            Error("You must select file with browse to upload it!");
1202                    }
1203                  if (! isset($FILENAME)) {       // from update file                  if (! isset($FILENAME)) {       // from update file
1204                          $target = "$fsDir/$FN_name" ;                          $target = "$fsDir/$FN_name" ;
1205                  } else {                  } else {
# Line 1267  function DisplayChangeLog($day) { Line 1232  function DisplayChangeLog($day) {
1232    
1233          case "SAVE" :          case "SAVE" :
1234                  $path = $gblFsRoot . $RELPATH ;                  $path = $gblFsRoot . $RELPATH ;
1235                    $path=stripSlashes($path);
1236                  $writable = is_writeable($path) ;                  $writable = is_writeable($path) ;
1237                  $legaldir = is_writeable(dirname($path)) ;                  $legaldir = is_writeable(dirname($path)) ;
1238                  $exists   = (file_exists($path)) ? 1 : 0 ;                  $exists   = (file_exists($path)) ? 1 : 0 ;
# Line 1274  function DisplayChangeLog($day) { Line 1240  function DisplayChangeLog($day) {
1240                  if (!($writable || (!$exists && $legaldir)))                  if (!($writable || (!$exists && $legaldir)))
1241                          Error("Write denied",$RELPATH) ;                          Error("Write denied",$RELPATH) ;
1242                  $fh = fopen($path, "w") ;                  $fh = fopen($path, "w") ;
1243                    $FILEDATA=stripSlashes($FILEDATA);
1244                  fwrite($fh,$FILEDATA) ;                  fwrite($fh,$FILEDATA) ;
1245                  fclose($fh) ;                  fclose($fh) ;
1246                  clearstatcache() ;                  clearstatcache() ;
# Line 1408  function DisplayChangeLog($day) { Line 1375  function DisplayChangeLog($day) {
1375          // $A=V : view file (do nothing except log)          // $A=V : view file (do nothing except log)
1376          // default : display directory $D          // default : display directory $D
1377    
         $F=stripSlashes($F);  
   
1378          switch ($A) {          switch ($A) {
1379          case "U" :          case "U" :
1380                  // upload to $relDir                  // upload to $relDir
1381                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1382                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1383                  $text  = "Use this page to upload a single " ;                  $text  = "Use this page to upload a single " ;
1384                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1385                  StartHTML("(Upload Page)", $text) ;                  StartHTML("(Upload Page)", $text) ;
1386                  UploadPage($gblFsRoot, $relDir) ;                  UploadPage($gblFsRoot, $relDir) ;
1387                  EndHTML() ;                  EndHTML() ;
1388                  exit ;                  exit ;
1389          case "E" :          case "E" :
1390                    $F=stripSlashes($F);
1391                  // detail of $relDir/$F                  // detail of $relDir/$F
1392                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;                  if (is_file("$gblFsRoot/$relDir/$F")) DetailPage($gblFsRoot, $relDir, $F) ;
1393                  exit ;                  exit ;
1394          case "C" :          case "C" :
1395                    $F=stripSlashes($F);
1396                  // listing of $relDir/$F                  // listing of $relDir/$F
1397                  DisplayCode($gblFsRoot, $relDir, $F) ;                  DisplayCode($gblFsRoot, $relDir, $F) ;
1398                  exit ;                  exit ;
# Line 1436  function DisplayChangeLog($day) { Line 1403  function DisplayChangeLog($day) {
1403                  Header("Location: ".urlpath("$relDir/$F"));                  Header("Location: ".urlpath("$relDir/$F"));
1404                  exit;                  exit;
1405          case "Ci" :          case "Ci" :
1406                    $F=stripSlashes($F);
1407                  // upload && update to $relDir                  // upload && update to $relDir
1408                  if (!is_writeable($gblFsRoot . $relDir))                  if (!is_writeable($gblFsRoot . $relDir))
1409                          Error("Write access denied",$relDir) ;                          Error("Write access denied",$relDir) ;
1410                  $text  = "Use this page to update a single " ;                  $text  = "Use this page to update a single " ;
1411                  $text .= "file to <B>$SERVER_NAME</B>." ;                  $text .= "file to <B>$HTTP_HOST</B>." ;
1412                  StartHTML("(Update file Page)", $text) ;                  StartHTML("(Update file Page)", $text) ;
1413                  UploadPage($gblFsRoot, $relDir, $F) ;                  UploadPage($gblFsRoot, $relDir, $F) ;
1414                  EndHTML() ;                  EndHTML() ;

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

  ViewVC Help
Powered by ViewVC 1.1.26