Simple Multi User Managed Directory 0.00063
SMUMD
|
00001 <?php 00002 /*! This is the Core Function File - Simple Multi User Managed Directory - SMUMD 00003 * by Sascha Heinatz * sascha.heinatz@alice.de 00004 * Copyright 2011. 00005 * 00006 * This file is part of Simple Multi User Managed Directory - SMUMD. 00007 * 00008 * Simple Multi User Managed Directory - SMUMD 00009 * is free software: you can redistribute it and/or modify 00010 * it under the terms of the GNU Lesser General Public License as published by 00011 * the Free Software Foundation, either version 3 of the License, or 00012 * (at your option) any later version. 00013 * 00014 * Simple Multi User Managed Directory - SMUMD 00015 * is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Lesser General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU Lesser General Public License 00021 * along with Simple Multi User Managed Directory - SMUMD. 00022 * If not, see <http://www.gnu.org/licenses/>. 00023 * <hr> 00024 */ 00025 /* FUNKTIONEN */ 00026 /* ********** */ 00027 /*! \brief vergleichsfunktion sortierung 00028 * \param $a erster wert 00029 * \param $b zweiter wert 00030 * \return strcasecmp() 00031 */ 00032 function dircmp($a,$b) { 00033 /*! globale variablen festlegen */ 00034 global $thedir; 00035 /*! vergleichs variablen setzen */ 00036 $ab=""; 00037 $bb=""; 00038 /*! typ erster wert auf 'd' prüfen */ 00039 if ($thedir[$a]["rights"]["typ"] == "d" ) { 00040 /*! typ ist 'd' erster vergleichwert equivalent 10- setzen */ 00041 $ab = "10-".$thedir[$a]["filename"]; 00042 } else { 00043 /*! typ ist nicht 'd' erster vergleichwert equivalent 20- setzen */ 00044 $ab = "20-".$thedir[$a]["filename"]; 00045 } 00046 /*! typ zweiter wert auf 'd' prüfen */ 00047 if ($thedir[$b]["rights"]["typ"] == "d" ) { 00048 /*! typ ist 'd' zweiter vergleichwert equivalent 10- setzen */ 00049 $bb = "10-".$thedir[$b]["filename"]; 00050 } else { 00051 /*! typ ist nicht 'd' zweiter vergleichwert equivalent 20- setzen */ 00052 $bb = "20-".$thedir[$b]["filename"]; 00053 } 00054 /*! typ zweiter wert auf 'y' prüfen */ 00055 if ($thedir[$b]["rights"]["typ"] == "y" ) { 00056 /*! typ ist 'y' zweiter vergleichwert equivalent 05- setzen */ 00057 $bb = "05-"; 00058 } 00059 /*! typ zweiter wert auf 'z' prüfen */ 00060 if ($thedir[$b]["rights"]["typ"] == "z" ) { 00061 /*! typ ist 'z' zweiter vergleichwert equivalent 01- setzen */ 00062 $bb = "01-"; 00063 } 00064 /*! typ erster wert auf 'y' prüfen */ 00065 if ($thedir[$a]["rights"]["typ"] == "y" ) { 00066 /*! typ ist 'y' erster vergleichwert equivalent 05- setzen */ 00067 $ab = "05-"; 00068 } 00069 /*! typ erster wert auf 'z' prüfen */ 00070 if ($thedir[$a]["rights"]["typ"] == "z" ) { 00071 /*! typ ist 'z' erster vergleichwert equivalent 01- setzen */ 00072 $ab = "01-"; 00073 } 00074 /*! rückgabe verleichs ergebnis grösser gleich kleiner case sensitiv */ 00075 return strcasecmp($ab, $bb); 00076 } 00077 /*! \brief vergleichsfunktion sortierung 00078 * \param $a erster wert 00079 * \param $b zweiter wert 00080 */ 00081 function pathcmp($a,$b) { 00082 /*! globale variablen festlegen */ 00083 global $thedir; 00084 /*! ersten wert setzen */ 00085 $ab = $thedir[$a]["filename"]; 00086 /*! zweiter wert setzen */ 00087 $bb = $thedir[$b]["filename"]; 00088 /*! rückgabe verleichs ergebnis grösser gleich kleiner case sensitiv */ 00089 return strcasecmp($ab, $bb); 00090 } 00091 /*! \brief Direktory Ausgabe Tabelle 00092 * \param $thedir das Directory Array 00093 * \return $thedirhtml Direktory Tabelle in HTML 00094 */ 00095 function dirHTML($thedir) { 00096 /*! globale variablen festlegen */ 00097 global $used; 00098 /*! Direktory Tabelle aufbauen */ 00099 $thedirhtml=<<<DIRHTML 00100 <table class="dateitabelle" cellpadding="0" cellspacing="0"> 00101 <tr> 00102 <th class="yellowbk dateiicon">Typ</th> 00103 <th class="yellowbk dateiname">Name</th> 00104 <th class="yellowbk dateisize">size</th> 00105 <th class="yellowbk dateiprotect">protector</th> 00106 <th class="yellowbk dateioptions" colspan=2>options</th> 00107 <th class="yellowbk dateilastlog" colspan=3>Last Log</th> 00108 <th class="yellowbk dateidelete" >del</th> 00109 <th class="yellowbk dateipermissions" colspan=10>permission</th> 00110 </tr> 00111 DIRHTML; 00112 uksort($thedir ,"dircmp"); 00113 /*! Für Jeden Eintrag von Direktroy Tabelle */ 00114 foreach ($thedir as $aentry) { 00115 /*! Tabellenzeile START */ 00116 $thedirhtml .="<tr>"; 00117 /*! kein hintergrund */ 00118 $colorbk =""; 00119 /*! typ ist 'd' dann background setzen */ 00120 if ($aentry["rights"]["typ"] == "d" ) {$colorbk ="greybk ";} 00121 /*! Icons finden */ 00122 if ($aentry["rights"]["typ"] == "d" or $aentry["rights"]["typ"] == "z" or $aentry["rights"]["typ"] == "y" ) { 00123 /*! für d z y ordner icon */ 00124 $dateiicon=$used["images"]."folder.gif"; 00125 } else { 00126 /*! für datei mit option protected datei gruen*/ 00127 if ($aentry["options"]["protect"] != "") { $dateiicon=$used["images"]."item_moz-free.gif"; } 00128 /*! für datei mit keiner option protected */ 00129 if ($aentry["options"]["protect"] == "") { $dateiicon=$used["images"]."item_moz.gif"; } 00130 /*! für datei mit option unprotected */ 00131 if ($aentry["options"]["unprotect"] !="" ) {$dateiicon=$used["images"]."item_moz-access.gif";} 00132 } 00133 /*! Icon Bild */ 00134 $thedirhtml .="<td class=\"".$colorbk."dateiicon\"><img src=\"".$dateiicon."\" alter=\"Datei Icon\"></td>"; 00135 /*! Datei Name */ 00136 $thedirhtml .="<td class=\"".$colorbk."dateiname\">".$aentry["name"]."</td>"; 00137 /*! Datei Grösse lesbar dezimal */ 00138 $thedirhtml .="<td class=\"".$colorbk."dateigroesse\">".format_size($aentry["size"])."</td>"; 00139 /*! Protektion Benutzername */ 00140 $thedirhtml .="<td class=\"".$colorbk."benutzer\" >".$aentry["protection"]["user"]."</td>"; 00141 /*! Optionen protektion */ 00142 $theprotect=""; 00143 /*! wenn option protect dann protect button speichern */ 00144 if ($aentry["options"]["protect"] != "") $theprotect =$aentry["options"]["protect"]; 00145 /*! wenn option unprotect dann unprotect button speichern */ 00146 if ($aentry["options"]["unprotect"] != "") $theprotect =$aentry["options"]["unprotect"]; 00147 /*! opion ausgeben */ 00148 $thedirhtml .="<td class=\"".$colorbk."sperrung\">".$theprotect."</td>"; 00149 /*! Optionen Datei Updaten */ 00150 $thedirhtml .="<td class=\"".$colorbk."dateiupdate\">".$aentry["options"]["upload"]."</td>"; 00151 /*! Datei Letzter Eintrag von LogDatei */ 00152 $thedirhtml .="<td class=\"".$colorbk."lastlogseit\">".$aentry["lastlog"]["entry"]."</td>"; 00153 $thedirhtml .="<td class=\"".$colorbk."lastloguser\" >".$aentry["lastlog"]["user"]."</td>"; 00154 $thedirhtml .="<td class=\"".$colorbk."lastlogaction\">".$aentry["lastlog"]["action"]."</td>"; 00155 /*! Optionen löschen */ 00156 $thedirhtml .="<td class=\"".$colorbk."optiondelete\">".$aentry["options"]["delete"]."</td>"; 00157 /*! Datei Rechte Dateityp */ 00158 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["typ"]."</td>"; 00159 /*! Datei Rechte Besitzer Lesen */ 00160 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["owner"]["r"]."</td>"; 00161 /*! Datei Rechte Besitzer Schreiben*/ 00162 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["owner"]["w"]."</td>"; 00163 /*! Datei Rechte Besitzer Ausführen*/ 00164 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["owner"]["x"]."</td>"; 00165 /*! Datei Rechte Gruppe Lesen */ 00166 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["group"]["r"]."</td>"; 00167 /*! Datei Rechte Gruppe Schreiben */ 00168 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["group"]["w"]."</td>"; 00169 /*! Datei Rechte Gruppe Ausführen */ 00170 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["group"]["x"]."</td>"; 00171 /*! Datei Rechte Alle Lesen */ 00172 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["other"]["r"]."</td>"; 00173 /*! Datei Rechte Alle Schreiben */ 00174 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["other"]["w"]."</td>"; 00175 /*! Datei Rechte Alle Ausführen */ 00176 $thedirhtml .="<td class=\"".$colorbk."permission\">".$aentry["rights"]["other"]["x"]."</td>"; 00177 /*! Tabellenzeile ENDE */ 00178 $thedirhtml .="</tr>"; 00179 } 00180 /*! Tabelle ENDE */ 00181 $thedirhtml .="</table>"; 00182 /*! Direktory HTML Zurückgeben */ 00183 return $thedirhtml; 00184 } 00185 /*! \brief user Login Form 00186 * \return $htmlloginform user Login HTML Formular 00187 */ 00188 function userloginForm() { 00189 /*! globale variablen festlegen */ 00190 global $used; 00191 /*! loginform erzeugen */ 00192 $htmlloginform =<<<HTMLLOGIN 00193 <FORM ID="USERLOGIN" ACTION="?" METHOD="POST" CLASS="gastlogin"> 00194 <fieldset> 00195 <legend>User Login</legend> 00196 <label for="LOGINNAME">Login :</label><INPUT ID="LOGINNAME" NAME="username" VALUE="" TYPE="TEXT" SIZE="20" /><br /> 00197 <label for="LOGINPASS">Password :</label><INPUT ID="LOGINPASS" NAME="userpass" VALUE="" TYPE="PASSWORD" SIZE="16" /> 00198 $used[sidfield] 00199 <INPUT ID="LOGIN" NAME="LOGIN" TYPE="SUBMIT" VALUE="LogMeIn" /> 00200 </fieldset> 00201 </FORM> 00202 HTMLLOGIN; 00203 /*! rueckgabe loginform */ 00204 return $htmlloginform; 00205 } 00206 /*! \brief write to logfile 00207 * \param $logdata Aktion Text 00208 * \param $pathdata der Pfad 00209 */ 00210 function logThis($logdata,$pathdata) { 00211 /*! globale variablen festlegen */ 00212 global $used; 00213 /*! datei zum anhängen öffnen */ 00214 if (!$fh = fopen($used["logfilepath"], 'a')) { 00215 /*! fehlgeschlagen also error schreiben */ 00216 $out["errors"] .= "Cannot open logfile file to append stuff <br>"; 00217 /*! erfolg also schreiben */ 00218 } else { 00219 /*! log text string erzeugen */ 00220 $logtext = "<date>".date("Y-m-d")."</date><time>".date("H:i:s")."</time><user>".$used["username"]."</user><text>".$logdata."</text><path>".$pathdata."</path>\n"; 00221 /*! prüfen log text string geschrieben werden konnte */ 00222 if (fwrite($fh, $logtext) === FALSE) { 00223 /*! fehlgeschlagen also error schreiben */ 00224 $out["errors"] .= "Cannot write to db file to append stuff <br>"; 00225 } 00226 /*! log datei schliessen */ 00227 fclose($fh); 00228 } 00229 } 00230 /*! \brief check username exist 00231 * 00232 */ 00233 function userexists($uname) { 00234 /*! globale variablen festlegen */ 00235 global $out; 00236 global $used; 00237 global $FS; 00238 global $debugging; 00239 /*! Datei zum lesen oeffnen */ 00240 if (!$fh = fopen($used["userlogindb"], 'r')) { 00241 /*! fehler beim oeffen zum lesen */ 00242 $out["errors"] .= "Cannot open userlogin db file to read stuff <br>"; 00243 } else { 00244 /*! datei wird gelesen */ 00245 /*! setzt regexpression username tag suche */ 00246 $theusernametag = "$<username>".$uname."</username>$"; 00247 /*! solange datei nicht zu ende ist */ 00248 while (!feof($fh)){ 00249 /*! lese zeile */ 00250 $line = fgets ($fh); 00251 /*! fehler beim lesen von zeile */ 00252 if ($line===FALSE) { 00253 /*! wenn debugg dann lese fehler ausgeben */ 00254 if ($debugging) $out["errors"] .= " cant read line <br>"; 00255 } else { 00256 /* gelesene zeile auf username tag untersuchen */ 00257 if (preg_match($theusernametag,$line)) { 00258 /*! username gefunden also datei schliessen */ 00259 fclose($fh); 00260 /*! rueckgabe wahr weil username gefunden */ 00261 return true; 00262 } 00263 }; 00264 } 00265 /*! datei schliessen */ 00266 fclose($fh); 00267 } 00268 /*! rueckgabe falsch weil usernametag nicht gefunden */ 00269 return false; 00270 } 00271 /*! \brief create a new user 00272 * \param $uname Username für neuen Benutzer 00273 * \param $ulogin Loginname für neuen Benutzer 00274 * \param $upass Userpasswort für neuen Benutzer 00275 * \param $upassproof Userpasswort prüfung 00276 */ 00277 function createanewuser($uname,$ulogin,$upass,$upassproof) { 00278 /*! globale variablen festlegen */ 00279 global $out; 00280 global $used; 00281 global $FS; 00282 global $debugging; 00283 /*! boolean fuer existierende usernamen */ 00284 $alreadyuser = false; 00285 /*! benoetigte daten checken */ 00286 if ($uname == "" OR $ulogin == "" OR $upass == "" OR $upassproof == "" ) { 00287 /*! fehler ausgabe für */ 00288 $out["errors"] .= "kein "; 00289 /*! username fehlt */ 00290 if ($uname == "") $out["errors"] .= "Username "; 00291 /*! loginname fehlt */ 00292 if ($ulogin == "") $out["errors"] .= "Loginname "; 00293 /*! passwort fehlt */ 00294 if ($upass == "") $out["errors"] .= "Password "; 00295 /*! pass verify fehlt */ 00296 if ($upassproof == "") $out["errors"] .= "verifikation <br>"; 00297 } else { 00298 /*! alle daten vorhanden also checken ob user schon existiert */ 00299 $alreadyuser = userexists($uname); 00300 /*! user exisitert nicht dann */ 00301 if (!$alreadyuser) { 00302 /*! pruefen ob passwort sicherheits eingabe uebereinstimmt */ 00303 if ($upass == $upassproof) { 00304 /*! sicherheitsabfrage ok also login datei zum anhaengen oeffnen */ 00305 if (!$fh = fopen($used["userlogindb"], 'a')) { 00306 /*! fehler beim oeffnen von datei ausgeben */ 00307 $out["errors"] .= "Cannot open userlogin db file to append stuff <br>"; 00308 } else { 00309 /*! datei wurde geoeffnet */ 00310 /*! usertage erzeugen */ 00311 $theusernametag = "<username>".$uname."</username>"; 00312 /*! loginname verschlüsseln */ 00313 $usermd5ulogin = md5($ulogin); 00314 /*! logintag erzeugen */ 00315 $theuserlogintag ="<userlogin>".$usermd5ulogin."</userlogin>"; 00316 /*! passwort fuer user verschluesseln */ 00317 $usermd5upass = md5($upass."isuser"); 00318 /*! passworttag erzeugen */ 00319 $theuserpasstag ="<userpass>".$usermd5upass."</userpass>"; 00320 /*! textzeile fuer userlogin erzeugen */ 00321 $taggedline = $theusernametag.$theuserlogintag.$theuserpasstag; 00322 /*! neuer user zeile mit zeilenvorschub */ 00323 $addnewuserline = $taggedline."\n"; 00324 /*! neuen user anhaengen */ 00325 if (fwrite($fh, $addnewuserline) === FALSE) { 00326 /*! error ausgabe File Write */ 00327 $out["errors"] .= "Cannot write to userlogin db file to append stuff <br>"; 00328 } else { 00329 /*! inhalt konnte geschrieben werden erfolg ausgeben */ 00330 $out["errors"] .= "Added a new User ".$uname."<br>"; 00331 /*! logdatei erfolg schreiben */ 00332 logThis("added new user",$uname); 00333 } 00334 /*! datei schliessen */ 00335 fclose($fh); 00336 /*! rueckgabe user wurde geschrieben (wahr ) */ 00337 return true; 00338 } 00339 } else { 00340 /*! error ausgabe passwort stimmt nicht ueberein */ 00341 $out["errors"] .= "passwords missmatch error <br>"; 00342 } 00343 } else { 00344 /*! error ausgabe user existiert schon */ 00345 $out["errors"] .= "Username exists already <br>"; 00346 } 00347 } 00348 /*! fehler beim hinzufuegen von neuem user */ 00349 return false; 00350 } 00351 00352 /*! \brief neuen ordner anlegen 00353 * \param $foldername Ordner Name 00354 */ 00355 function createfolder($foldername) { 00356 /*! globale variablen festlegen */ 00357 global $out; 00358 global $used; 00359 global $FS; 00360 global $debugging; 00361 /*! ordnername vorhanden */ 00362 if ($foldername == "" ) { 00363 /*! kein foldername dann error ausgeben */ 00364 $out["errors"] .= "geben sie einen Namen für den Ordner an"; 00365 } else { 00366 /*! gesamt pfad fuer ordner erzeugen */ 00367 $structure = $used['pathnow'].$foldername; 00368 /*! ueberpruefen ob ordner existiert */ 00369 if (!file_exists($structure)) { 00370 /*! ordner existiert nicht also verzeichnis erzeugen */ 00371 if (!mkdir($structure, 0755)) { 00372 /*! error ausgabe Fehler beim Verzeichnis erstellen */ 00373 $out["errors"] .= "Erstellung des Verzeichnis '.$structure.' schlug fehl... "; 00374 } else { 00375 /*! erfolg Ordner ausgabe fuer debug */ 00376 if ($debugging) $out["errors"] .= "Ordner ".$foldername." wurde angelegt "; 00377 /*! erfolg Ordner erzeugt loggen */ 00378 logThis("created folder",$structure); 00379 } 00380 } else { 00381 /*! fehler beim Ordner erzeugen ausgeben */ 00382 $out["errors"] .= "Datei oder Verzeichnis mit gleichem namen vorhanden "; 00383 } 00384 } 00385 } 00386 /*! \brief lösche ordner 00387 * \param $foldername Ordner Name 00388 */ 00389 function deletefolder($foldername) { 00390 /*! globale variablen festlegen */ 00391 global $out; 00392 global $used; 00393 global $FS; 00394 global $debugging; 00395 /*! gesamt pfad fuer ordner erzeugen */ 00396 $structure = $used['pathnow'].$foldername; 00397 /*! ueberpruefen ob datei existiert */ 00398 if (file_exists($structure)) { 00399 /*! ueberpruefen ob ordner*/ 00400 if (is_dir($structure)) { 00401 /*! ist ordner also loeshen */ 00402 if (!rmdir($structure)) { 00403 /*! fuer debugger fehler beim loeschen ausgeben */ 00404 if ($debugging) $out["errors"] .= "is dir - die Löschung des Verzeichnis '.$structure.' schlug fehl... "; 00405 /*! error ausgabe Ordner löschen */ 00406 $out["errors"] .= "Ordner ".$foldername." konnte nicht gelöscht werden "; 00407 } else { 00408 /*! fuer debugger loesch erfolg ausgeben */ 00409 if ($debugging) $out["errors"] .= "Ordner ".$foldername." wurde gelöscht "; 00410 /*! loesch erfolg loggen */ 00411 logThis("deleted folder",$structure); 00412 } 00413 } else { 00414 /*! error ausgabe Ordner löschen */ 00415 $out["errors"] .= "Ordner ".$foldername." konnte nicht gelöscht werden weil kein directory "; 00416 } 00417 } else { 00418 /*! error ausgabe verzeichnis nicht vorhanden */ 00419 $out["errors"] .= "Datei oder Verzeichnis existiert nicht "; 00420 } 00421 } 00422 /*! \brief lösche Datei 00423 * \param $filename Datei Name 00424 */ 00425 function deletefile($filename) { 00426 /*! globale variablen festlegen */ 00427 global $out; 00428 global $used; 00429 global $FS; 00430 global $debugging; 00431 /*! gesamt pfad fuer ordner erzeugen */ 00432 $structure = $used['pathnow'].$filename; 00433 /*! ueberpruefen ob datei existiert */ 00434 if (file_exists($structure)) { 00435 /*! ueberpruefen ob datei */ 00436 if (is_file($structure)) { 00437 /*! ist datei also loeschen */ 00438 unlink($structure); 00439 /*! ausgabe fuer debugger , datei geloescht */ 00440 if ($debugging) $out["errors"] .= "Datei ".$filename." wurde gelöscht "; 00441 /*! datei geloescht loggen */ 00442 logThis("deleted file",$structure); 00443 } else { 00444 /*! error ausgabe Datei löschen */ 00445 $out["errors"] .= "Datei existiert nicht "; 00446 } 00447 } else { 00448 /*! error ausgabe datei gibt es nicht */ 00449 $out["errors"] .= "Datei oder Verzeichnis existiert nicht "; 00450 } 00451 } 00452 /*! \brief lookup actual Protektion username and Time 00453 * \param $filepath Datei Pfad 00454 */ 00455 function showprotection($filepath) { 00456 /*! globale variablen festlegen */ 00457 global $out; 00458 global $used; 00459 /*! arbeitsvariablen setzen */ 00460 $haveusername = ""; 00461 $havedatetime = array("",""); 00462 /*! alle protection datas durchgehen */ 00463 foreach ($used["protectiondatas"] as $pdata) { 00464 /*! check ob pfad vorhanden */ 00465 if ($filepath == $pdata[1]) { 00466 /*! pfad vorhanden , zwischenpreichern name */ 00467 $haveusername = $pdata[2]; 00468 /*! zwischenpreichern datum und zeit als array */ 00469 $havedatetime = explode(" ",$pdata[3]); 00470 } 00471 } 00472 /*! protection daten setzen */ 00473 $protectinfo = array( "user"=>$haveusername, 00474 "date"=>$havedatetime[0], 00475 "time"=>$havedatetime[1] 00476 ); 00477 /*! rueckgabe protection info array */ 00478 return $protectinfo; 00479 } 00480 /*! \brief File Permissions human readable unix style 00481 * \param $filepath Datei Pfad 00482 * \return $allperms rechte lesbar , sonst default array 00483 */ 00484 function getperms($filepath) { 00485 /*! globale variablen festlegen */ 00486 global $out; 00487 /*! arbeitsvariable sdefault setzen */ 00488 $allperms = array ( "typ" =>"", 00489 "owner"=> array( "r"=>"", 00490 "w"=>"", 00491 "x"=>""), 00492 "group"=> array( "r"=>"", 00493 "w"=>"", 00494 "x"=>""), 00495 "other"=> array( "r"=>"", 00496 "w"=>"", 00497 "x"=>"") 00498 ); 00499 /*! ueberpruefen ob datei existiert */ 00500 if (file_exists($filepath)) { 00501 /*! datei rechte holen */ 00502 $perms = fileperms($filepath); 00503 if (($perms & 0xC000) == 0xC000) { 00504 $allperms["typ"]= 's'; /*! Socket */ 00505 } elseif (($perms & 0xA000) == 0xA000) { 00506 $allperms["typ"]= 'l'; /*! Symbolic Link */ 00507 } elseif (($perms & 0x8000) == 0x8000) { 00508 $allperms["typ"]= '-'; /*! Regular */ 00509 } elseif (($perms & 0x6000) == 0x6000) { 00510 $allperms["typ"]= 'b'; /*! Block special */ 00511 } elseif (($perms & 0x4000) == 0x4000) { 00512 $allperms["typ"]= 'd'; /*! Directory */ 00513 } elseif (($perms & 0x2000) == 0x2000) { 00514 $allperms["typ"]= 'c'; /*! Character special */ 00515 } elseif (($perms & 0x1000) == 0x1000) { 00516 $allperms["typ"]= 'p'; /*! FIFO pipe */ 00517 } else { 00518 $allperms["typ"]= 'u'; /*! Unknown */ 00519 } 00520 /*! Owner lesen */ 00521 $allperms["owner"]["r"]= (($perms & 0x0100) ? 'r' : '-'); 00522 /*! Owner schreiben */ 00523 $allperms["owner"]["w"]= (($perms & 0x0080) ? 'w' : '-'); 00524 /*! Owner ausfuehren */ 00525 $allperms["owner"]["x"]= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); 00526 /*! Group lesen */ 00527 $allperms["group"]["r"]= (($perms & 0x0020) ? 'r' : '-'); 00528 /*! Group schreiben */ 00529 $allperms["group"]["w"]= (($perms & 0x0010) ? 'w' : '-'); 00530 /*! Group ausfuehren */ 00531 $allperms["group"]["x"]= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); 00532 /*! Others lesen */ 00533 $allperms["other"]["r"]= (($perms & 0x0004) ? 'r' : '-'); 00534 /*! Others schreiben */ 00535 $allperms["other"]["w"]= (($perms & 0x0002) ? 'w' : '-'); 00536 /*! Others ausfuehren */ 00537 $allperms["other"]["x"]= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); 00538 } else { 00539 /*! fehler keine datei / berzeichnis vorhanden */ 00540 $out["errors"] .= "Datei oder Verzeichnis existiert nicht "; 00541 } 00542 /*! rueckgabe date rechte */ 00543 return $allperms; 00544 } 00545 /*! \brief zeigt file infos 00546 * \param $filepath Datei Pfad 00547 * \return $finfo Datei Informationen 00548 */ 00549 function getFileInfo($filepath) { 00550 /*! globale variablen festlegen */ 00551 global $out; 00552 /*! arbeitsvariable setzen */ 00553 $finfo = array(); 00554 /*! ueberpruefen ob datei existiert */ 00555 if (file_exists($filepath)) { 00556 /*! datum und zeit von erzeugt und modifiziert eintragen */ 00557 $finfo = array("create"=>array("date"=>date("Y-m-d", filectime($filepath)), 00558 "time"=>date("H:i", filectime($filepath)) 00559 ), 00560 "modifie"=>array("date"=>date("Y-m-d", filemtime($filepath)), 00561 "time"=>date("H:i", filemtime($filepath)) 00562 ) 00563 ); 00564 } else { 00565 /*! fehler keine datei / berzeichnis vorhanden */ 00566 $out["errors"] .= "Datei oder Verzeichnis existiert nicht "; 00567 } 00568 /*! rueckgabe datei datum info */ 00569 return $finfo; 00570 } 00571 /*! \brief check dir may hafe files 00572 * \param $aktueller_pfad aktueller Datei Pfad 00573 * \return $entryfound anzahl gefundener Einträge 00574 */ 00575 function checkDir($aktueller_pfad) { 00576 /*! arbeitsvariable setzen */ 00577 $entryfound = false; 00578 /*! directory oeffnen */ 00579 if ($dh = opendir($aktueller_pfad)) { 00580 /*! zaehler fuer eintraege negative */ 00581 $entrycount = -1; 00582 /*! solange eintrag in directory und kein entry gefunden */ 00583 while ((($file = readdir($dh)) !== false) AND !$entryfound ) { 00584 /*! nur wenn wirklich ein eintrag dann eintrag gefunden */ 00585 if ($file != "." and $file != "..") {$entryfound = true;} 00586 } 00587 /*! datei schliessen */ 00588 closedir($dh); 00589 } 00590 /*! rueckgabe eintrag vorhanden (wahr/falsch) */ 00591 return $entryfound; 00592 } 00593 /*! \brief Directory Aufbau 00594 * \param $aktueller_pfad aktueller Datei Pfad 00595 * \return $thedir das aktuelle Direktory als Array 00596 */ 00597 function getDir($aktueller_pfad) { 00598 /*! globale variablen festlegen */ 00599 global $out; 00600 global $used; 00601 global $FS; 00602 global $debugging; 00603 global $thedir; 00604 global $INSTALL_DIR; 00605 /*! protection daten aus protectionfile lesen */ 00606 $used["protectiondatas"]=getprotectiondata(); 00607 /*! objekt default fuer directory daten */ 00608 $dirset = array( "name"=>"", 00609 "filename"=>"", 00610 "path"=>"", 00611 "size"=>"", 00612 "info"=>array( "create"=>array("date"=>"", 00613 "time"=>""), 00614 "modifie"=>array("date"=>"", 00615 "time"=>"") 00616 ), 00617 "rights"=>array ( "typ" =>"", 00618 "owner"=> array( "r"=>"", 00619 "w"=>"", 00620 "x"=>""), 00621 "group"=> array( "r"=>"", 00622 "w"=>"", 00623 "x"=>""), 00624 "other"=> array( "r"=>"", 00625 "w"=>"", 00626 "x"=>"") 00627 ), 00628 "protection"=> array( "user"=>"", 00629 "date"=>"", 00630 "time"=>"" 00631 ), 00632 "options"=> array( "delete"=>"", 00633 "protect"=>"", 00634 "unprotect"=>"", 00635 "upload"=>"" 00636 ), 00637 "lastlog"=>array( "entry"=>"", 00638 "date"=>"", 00639 "time"=>"", 00640 "user"=>"", 00641 "action"=>"" 00642 ) 00643 ); 00644 /*! auf directory preufen */ 00645 if (is_dir($aktueller_pfad)) { 00646 /*! debugg ausgabe ist directory */ 00647 if ($debugging) { $out["errors"] .= "ist directory".$aktueller_pfad."<br>"; } 00648 /*! directory oeffnen */ 00649 if ($dh = opendir($aktueller_pfad)) { 00650 /*! eintrag zaehler negativ */ 00651 $entrycount = -1; 00652 /*! solange eintrag in directory */ 00653 while (($file = readdir($dh)) !== false) { 00654 /*! eintrag zaehler incrementieren */ 00655 ++$entrycount; 00656 /*! fuer spezial directory eintraege */ 00657 if ($file == "." or $file == "..") { 00658 /*! fuer upperDir nur wenn nicht home directory */ 00659 if ($file == ".." and ( $used['path']."/" != $used['pathnow'] )) { 00660 /*! default objekt fuer direktory erzeugen */ 00661 $thedir[$entrycount]=$dirset; 00662 /*! filename eintragen */ 00663 $thedir[$entrycount]["filename"] = $file; 00664 /*! top pfad realtive erzeugen */ 00665 $urlpfadtop = preg_replace("$".quotemeta($used['path'])."/$","",$used['pathnow']); 00666 /*! pfad bereinigen */ 00667 $urlpfadtop = trim($urlpfadtop,'/'); 00668 /*! pfad trennen bei / */ 00669 $arraypfad = explode("/",$urlpfadtop); 00670 /*! letzten ordner entfernen */ 00671 array_pop($arraypfad); 00672 /*! pfad worder zusammensetzen */ 00673 $urlpfadtop = implode("/",$arraypfad); 00674 /*! upper ordner link */ 00675 $thedir[$entrycount]["name"] = "<a href=\"/".$INSTALL_DIR."/?pathnow=".$urlpfadtop."\">upper dir</a>"; 00676 /*! typ z zum sortieren setzen */ 00677 $thedir[$entrycount]["rights"]["typ"]="z"; 00678 } 00679 /*! fuer thisDir */ 00680 if ($file == ".") { 00681 /*! default objekt fuer direktory erzeugen */ 00682 $thedir[$entrycount]=$dirset; 00683 /*! filename eintragen */ 00684 $thedir[$entrycount]["filename"] = $file; 00685 /*! relativen pfad erzeugen */ 00686 $urlpfadtop = preg_replace("$".quotemeta($used['path'])."/$","",$used['pathnow']); 00687 /*! link fuer thisDir */ 00688 $thedir[$entrycount]["name"] = "<a href=\"/".$INSTALL_DIR."/?pathnow=".$urlpfadtop."\">this dir</a>"; 00689 /*! typ y zum sortieren setzen */ 00690 $thedir[$entrycount]["rights"]["typ"]="y"; 00691 } 00692 } else { 00693 /*! kein spezial directory eintrag */ 00694 /*! default objekt fuer direktory erzeugen */ 00695 $thedir[$entrycount]=$dirset; 00696 /*! filename eintragen */ 00697 $thedir[$entrycount]["filename"] = $file; 00698 } 00699 /*! aktuellen pfad erzeugen */ 00700 $filepath = $aktueller_pfad . $file; 00701 /* manage flags for managed access */ 00702 $isuser = false; 00703 $isprotected = false; 00704 /* check if protected and user */ 00705 foreach ($used["protectiondatas"] as $pdata) { 00706 /*! fals pfad in protection data */ 00707 if ($filepath == $pdata[1]) { 00708 /*! ist protected whar */ 00709 $isprotected = true; 00710 /*! fals username in protection data */ 00711 if ($used["username"] == $pdata[2]) { 00712 /*! ist user wahr */ 00713 $isuser = true; 00714 } 00715 } 00716 } 00717 /*! nur wenn keine spezial directory eintraege */ 00718 if ($file != "." and $file != "..") { 00719 /*! checken ob directory */ 00720 if (is_dir($filepath)) { 00721 /*! realtiven pfad erzeugen */ 00722 $urlpfad = preg_replace("|".$used['path']."/|","",$filepath); 00723 /*! link fuer verzeichnis */ 00724 $thedir[$entrycount]["name"]= "<a href=\"/".$INSTALL_DIR."/?pathnow=".$urlpfad."\">".$file."</a>"; 00725 /*! pverzeichnisfad eintragen */ 00726 $thedir[$entrycount]["path"]= $filepath; 00727 /*! verzeichnis groesse ignorieren */ 00728 $thedir[$entrycount]["size"] = ""; 00729 /*! verzeichnis datum infos */ 00730 $thedir[$entrycount]["info"] = getFileInfo($filepath); 00731 /*! verzeichnis rechte */ 00732 $thedir[$entrycount]["rights"] = getperms($filepath); 00733 /*! verzeichnis protekt status */ 00734 $thedir[$entrycount]["protection"] = showprotection($filepath); 00735 /*! wenn nicht protekted und direktory */ 00736 if ( !$isprotected and !checkDir($filepath)) { 00737 /*! loesch button form eintragen */ 00738 $thedir[$entrycount]["options"]["delete"]= formlink("option","optiondel".$entrycount,"optiondel","folderoption","del","del",$file,$size="0"); 00739 } 00740 } 00741 /*! ist datei */ 00742 if ( is_file($filepath) ) { 00743 /*! ist geschuetzt durch user */ 00744 if ($isprotected AND $isuser) { 00745 /*! download button eintragen */ 00746 $thedir[$entrycount]["name"]= formlink("link","downloadfile","downloadfile".$entrycount,"download","file",$file,"","0"); 00747 } else { 00748 /*! ist nicht geschuetzt also nur text */ 00749 $thedir[$entrycount]["name"]= $file; 00750 } 00751 /*! pfad eintragen */ 00752 $thedir[$entrycount]["path"]= $filepath; 00753 /*! dateigroesse eintragen */ 00754 $thedir[$entrycount]["size"] = filesize($filepath); 00755 /*! datei infos eintragen */ 00756 $thedir[$entrycount]["info"] = getFileInfo($filepath); 00757 /*! datei rechte eintragen */ 00758 $thedir[$entrycount]["rights"] = getperms($filepath); 00759 /*! datei ptotektion eintragen */ 00760 $thedir[$entrycount]["protection"] = showprotection($filepath); 00761 /*! wenn nicht protected */ 00762 if (!$isprotected) { 00763 /*! dann loesch button eintragen */ 00764 $thedir[$entrycount]["options"]["delete"]= formlink("option","optiondel".$entrycount,"optiondel","fileoption","del","del",$file,$size="0"); 00765 /*! dann protect button eintragen */ 00766 $thedir[$entrycount]["options"]["protect"]= formlink("option","optionprotect".$entrycount,"optionprotect","fileoption","protect","use",$file,$size="0"); 00767 } 00768 /*! wenn protected durch user */ 00769 if ($isprotected AND $isuser) { 00770 /*! dann unprotekt button eintragen */ 00771 $thedir[$entrycount]["options"]["unprotect"]= formlink("option","optionunprotect".$entrycount,"optionunprotect","fileoption","unprotect","free",$file,$size="0"); 00772 /*! dann upload button eintragen */ 00773 $thedir[$entrycount]["options"]["upload"]= formlink("file","optionupdate".$entrycount,"optionupdate","fileoption","update","update",$file,"5"); 00774 } 00775 } 00776 } 00777 } 00778 /*! directory schliessen */ 00779 closedir($dh); 00780 /*! letzten log eintrag holen */ 00781 getlogdata($thedir); 00782 } else { 00783 /*! error ausgabe aktuelles Verzeichnis zugriff */ 00784 $out["errors"] .= "konnte auf aktuelles Verzeichnis nicht zugreifen "; 00785 } 00786 } else { 00787 /*! error ausgabe kein aktuelles Verzeichnis vorhanden */ 00788 $out["errors"] .= "kein aktuelles Verzeichnis"; 00789 } 00790 /*! rueckgabe des directorys */ 00791 return $thedir; 00792 } 00793 /*! \brief readable filesize 00794 * \param $size Datei Grösse in Bytes 00795 * \return $fomatedsize Dateigrösse in Dezimal und mit grösster Einheit 00796 */ 00797 function format_size($size) { 00798 /*! alle moeglichen Bezeichnungen setzen */ 00799 $sizes = array(" b", " kb", " M", " G", " T", " PB", " EB", " ZB", " YB"); 00800 /*! arbeitsvariable setzen */ 00801 $fomatedsize =""; 00802 /*! wenn groesse nicht null */ 00803 if ($size != 0) { 00804 /*! berechne dezimal groesse */ 00805 $fomatedsize = round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]; 00806 } 00807 /*! rueckgabe lesbare groesse */ 00808 return $fomatedsize; 00809 } 00810 /*! \brief form link build 00811 * \param $typ Formular Typ (file,input,option) 00812 * \param $id Formular ID 00813 * \param $name Formular Name 00814 * \param $what Formular ORDER 1 Teil 00815 * \param $action Formular ORDER 2 Teil 00816 * \param $about Formular Submit Botton (Datenfeld bei Vorgabe) 00817 * \param $field Formular Datenfeld (eingabe , datei auswahl) 00818 * \param $size Formular Datenfeld länge (default 0) 00819 * \return $form HTML Formular 00820 */ 00821 function formlink($typ,$id,$name,$what,$action,$about,$field = "",$size="0") { 00822 /*! globale variablen festlegen */ 00823 global $out; 00824 global $sid; 00825 global $used; 00826 /*! arbeitsvariablen setzen */ 00827 $multipart =""; 00828 $form ="\n"; 00829 /*! wenn fuer datei upload dann multipart form setzen */ 00830 if ($typ == "file") {$multipart = "enctype=\"multipart/form-data\"";} 00831 /*! form tag bauen */ 00832 $form .="\t\t<form id=\"".$id."\" action=\"?".$used["sidurl"]."\" name=\"".$name."\" ".$multipart." method=\"post\">"."\n"; 00833 /*! sid feld */ 00834 $form .= $used["sidfield"] ; 00835 /*! aktueller pfad */ 00836 $form .="\t\t\t"."<input id=\"".$id."pathnow\" name=\"pathnow\" value=\"".$used['pathnow']."\" type=\"hidden\" />"."\n"; 00837 /*! order what feld mit parameter */ 00838 $form .="\t\t\t"."<input id=\"".$id."what\" name=\"what\" value=\"".$what."\" type=\"hidden\" />"."\n"; 00839 /*! order action feld mit parameter */ 00840 $form .="\t\t\t"."<input id=\"".$id."action\" name=\"action\" value=\"".$action."\" type=\"hidden\" />"."\n"; 00841 /*! sende button mit parameter */ 00842 $form .="\t\t\t"."<input id=\"".$id."about\" name=\"about\" value=\"".$about."\" type=\"submit\" />"."\n"; 00843 /*! wenn $field nicht leer */ 00844 if ($field !="") { 00845 /*! und typ input */ 00846 if ($typ == "input") { 00847 /*! dann leeres input feld */ 00848 $form .="\t\t\t"."<input id=\"".$id."field\" name=\"field\" value=\"\" type=\"input\" size=\"".$size."\" />"."\n"; 00849 } 00850 /*! und typ file */ 00851 if ($typ == "file") { 00852 /*! dann datei upload feld */ 00853 $form .="\t\t\t"."<input id=\"file\" name=\"file\" type=\"file\" size=\"".$size."\" />"."\n"; 00854 /*! wenn keine neue datei */ 00855 if ($field !="newfile") { 00856 /*! dann feld mit parameter */ 00857 $form .="\t\t\t"."<input id=\"".$id."field\" name=\"field\" value=\"".$field."\" type=\"hidden\" size=\"".$size."\" />"."\n"; 00858 } 00859 } 00860 /*! und typ option */ 00861 if ($typ == "option") { 00862 /*! dann feld mit parameter */ 00863 $form .="\t\t\t"."<input id=\"".$id."field\" name=\"field\" value=\"".$field."\" type=\"hidden\" size=\"".$size."\" />"."\n"; 00864 } 00865 } 00866 /*! form tag schliessen */ 00867 $form .="\t\t</form>"."\n"; 00868 /*! rueckgabe des formular strings */ 00869 return $form; 00870 } 00871 /*! \brief Ausgabe Menue Allgemein:neuen Ordner erzeugen,Datei uploaden 00872 * 00873 */ 00874 function getactionadminmenue() { 00875 /*! globale variablen festlegen */ 00876 global $out; 00877 global $sid; 00878 global $used; 00879 /*! arbeits variable default setzen */ 00880 $outmenu=""; 00881 /*! wenn angemeldeter user */ 00882 if ($used["userlevel"] > 99 and $used["userlevel"] < 499) { 00883 /*! form fuer neuen user */ 00884 $outmenu .= <<<ADMINMENU 00885 <div class="adminbox"> 00886 <p class="yellowbk">Administration :</p> 00887 <form id="addnewuser" action="?$used[sidurl]" name="addnewuser" method="post" class="addnewuser"> 00888 Admin -> Add NewUser :<input id="addnewusername" name="pathnow" value="$used[pathnow]" type="hidden" /> 00889 <input id="addnewuserwhat" name="what" value="usermng" type="hidden" /> 00890 <input id="addnewuseraction" name="action" value="addnew" type="hidden" /> 00891 Name:<input id="addnewuseruname" name="uname" value="" type="input" size="20" /> 00892 Login:<input id="addnewuserulogin" name="ulogin" value="" type="input" size="20" /> 00893 Pass:<input id="addnewuserupass" name="upass" value="" type="password" size="20" /> 00894 Pass:<input id="addnewuserupassproof" name="upassproof" value="" type="password" size="20" /> 00895 <input id="addnewuserabout" name="about" value="add new user" type="submit" /> 00896 </form> 00897 </div> 00898 ADMINMENU; 00899 } 00900 /*! rueckgabe des form strings */ 00901 return $outmenu; 00902 } 00903 /*! \brief Ausgabe Menue Allgemein:neuen Ordner erzeugen,Datei uploaden 00904 * 00905 */ 00906 function getactionmenue() { 00907 /*! globale variablen festlegen */ 00908 global $out; 00909 global $sid; 00910 global $used; 00911 /*! allgemeines menu */ 00912 $out["menu"] .= "<!-- menue -->"."\n"; 00913 $out["menu"] .="<div id=\"newfolderupload\" class=\"newfolderupload\">"; 00914 $out["menu"] .= formlink("input","newfolder","newfolder","menue","newfolder","neuer Ordner","foldername","20"); 00915 $out["menu"] .= formlink("file","newupload","newupload","upload","newfile","upload neue Datei","newfile","40"); 00916 $out["menu"] .="</div>"; 00917 } 00918 /*! \brief upload function 00919 * \param $update Stausflag (true = vorhanden ,false = neu) für Dateiupload 00920 * \return $uploaded Status Dateiupload 00921 */ 00922 function GetUploadFile($update) { 00923 /*! globale variablen festlegen */ 00924 global $out; 00925 global $used; 00926 global $FS; 00927 global $debugging; 00928 /*! arbeits variablen default setzen */ 00929 $uploaded=false; 00930 /*! schlater fuer kopieren */ 00931 $copythefile = true; 00932 /*! pruefen ob datei hochgeladen wurde */ 00933 if(is_uploaded_file($_FILES["file"]["tmp_name"])) { 00934 /*! Datei pfad zum kopieren */ 00935 $uploadtocopy = $used["pathnow"].$_FILES["file"]["name"]; 00936 /*! keine Datei aber update also nicht kopieren */ 00937 if (!file_exists($uploadtocopy) AND $update ) { $copythefile = false; }; 00938 /*! Datei aber kein update also nicht kopieren */ 00939 if (file_exists($uploadtocopy) AND !$update ) {$copythefile = false;} 00940 /*! pruefen ob datei existiert und ein update */ 00941 if (file_exists($uploadtocopy) AND $update ) { 00942 /*! protekt daten holen */ 00943 $protectdata = checkprotection($uploadtocopy,true); 00944 /*! wenn status falsch dann nicht kopieren */ 00945 if (!$protectdata["status"] ) { $copythefile = false; } ; 00946 /*! wenn upload name nicht paramter name dann nicht kopieren */ 00947 if ($_FILES["file"]["name"] != $_POST["field"]) { $copythefile = false; }; 00948 /*! wenn status ok und username nicht protektor dann nicht kopieren */ 00949 if ($protectdata["status"] AND ($protectdata["username"] != $used["username"])) { $copythefile = false; }; 00950 }; 00951 /*! wenn kopieren erlaubt */ 00952 if ($copythefile) { 00953 /*! dann kopier datei */ 00954 if(copy($_FILES["file"]["tmp_name"], $uploadtocopy)) { 00955 /*! es wurde upgeloaded */ 00956 $uploaded = true; 00957 /*! auf update pruefen */ 00958 if (!$update) { 00959 /*! kein update also upload in loggen */ 00960 logThis("uploaded file",$uploadtocopy); 00961 } else { 00962 /*! ist update also update loggen */ 00963 logThis("updated file",$uploadtocopy); 00964 } 00965 } else { 00966 /*! error ausgabe kann upload datei nicht kopieren */ 00967 $out["errors"] .= "cant copy uploaded file"; 00968 } 00969 } 00970 } else { 00971 /*! error akeine datei zum uploaden da */ 00972 $out["errors"] .= "no file to upload sorry"; 00973 } 00974 /*! rueckgabe upload status */ 00975 return $uploaded; 00976 } 00977 /*! \brief unprotect a file 00978 * \param $filename Datei Namen 00979 */ 00980 function unprotectaFile($filename) { 00981 /*! globale variablen festlegen */ 00982 global $out; 00983 global $used; 00984 global $FS; 00985 global $debugging; 00986 /*! pfad fuer unprotekt datei */ 00987 $filetounprotect = $used["pathnow"].$filename; 00988 /*! check protektion */ 00989 $fileprotected = checkprotection($filetounprotect); 00990 /*! wenn protekt */ 00991 if ($fileprotected) { 00992 /*! dann datei protektion aufheben */ 00993 unprotectFile($filetounprotect); 00994 } else { 00995 /*! error ausgabe datei protektion fehler */ 00996 $out["errors"] .= " sorry file is unprotected <br>"; 00997 } 00998 } 00999 /*! \brief unprotect file, delete the file from the dbfile 01000 * \param $filetounprotect Datei Pfad 01001 */ 01002 function unprotectFile($filetounprotect) { 01003 /*! globale variablen festlegen */ 01004 global $out; 01005 global $used; 01006 global $FS; 01007 global $debugging; 01008 /*! oeffen der protektion datei zum lesen */ 01009 $fh = fopen($used["protectiondb"], 'r'); 01010 /*! neue db datei inhalt default */ 01011 $newdbfilecontent = ""; 01012 /*! datei handle auf fehler pruefen */ 01013 if($fh == false) { 01014 $out["errors"] .= "ERROR: File not found -> ".$used["userlogindb"]."<br>"; 01015 }else { 01016 /*! datei geoffnet , solange bis datei ende ist */ 01017 while (!feof($fh)){ 01018 /*! zeile einlesen */ 01019 $line = fgets ($fh); 01020 /*! auf fehler beim zeile einlesen pruefen */ 01021 if ($line===FALSE) { 01022 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01023 if ($debugging) $out["errors"] .= " cant read line <br>"; 01024 } else { 01025 /*! kein fehler beim lesen also regexpression fuer datei erzeugen */ 01026 $thefilepathtag = "|<filepath>".quotemeta($filetounprotect)."</filepath>|"; 01027 /*! wenn datei pfad nicht gefunden dann zeile zur neuen db hinzufuegen */ 01028 if (!preg_match($thefilepathtag,$line)) { $newdbfilecontent .= $line; } 01029 }; 01030 } 01031 /*! datei schliessen */ 01032 fclose($fh); 01033 } 01034 /*! pruefen ob datei zum schreiben geoeffnet werden kann */ 01035 if (!$fh = fopen($used["protectiondb"], 'w')) { 01036 /*! error ausgabe datenbank datei nicht schreibbar */ 01037 $out["errors"] .= "Cannot open db file to write stuff <br>"; 01038 } else { 01039 /*! wenn geoeffnet dann schreibe neue db */ 01040 if (fwrite($fh, $newdbfilecontent) === FALSE) { 01041 /*! error ausgabe fehler beim schreiben der datenbank */ 01042 $out["errors"] .= "Cannot rewrite db file <br>"; 01043 } 01044 /*! datei schliessen */ 01045 fclose($fh); 01046 } 01047 /*! datei unprotekt loggen */ 01048 logThis("file unprotected",$filetounprotect); 01049 } 01050 /*! \brief protect a file , write into db file 01051 * \param $filename Datei Name 01052 */ 01053 function protectaFile($filename) { 01054 /*! globale variablen festlegen */ 01055 global $out; 01056 global $used; 01057 global $FS; 01058 global $debugging; 01059 /*! pfad fuer unprotekt datei */ 01060 $filetoprotect = $used["pathnow"].$filename; 01061 /*! check protektion */ 01062 $fileprotected = checkprotection($filetoprotect); 01063 /*! wenn nicht protekt */ 01064 if (!$fileprotected) { 01065 /*! wdann protekt datei */ 01066 protectFile($filetoprotect); 01067 } else { 01068 /*! error ausgabe datei schon geschützt */ 01069 $out["errors"] .= " sorry file is protected , please wait or unprotect <br>"; 01070 } 01071 } 01072 /*! \brief check protection of a file 01073 * \param $filetoprotect Datei Pfad 01074 * \param $typ rückgabe typ (default = false) 01075 * \return $fileprotectiondata Datei Angaben in Datenbankdatei 01076 */ 01077 function checkprotection($filetoprotect,$typ=false) { 01078 /*! globale variablen festlegen */ 01079 global $out; 01080 global $used; 01081 global $FS; 01082 global $debugging; 01083 /*! default protektion objekt */ 01084 $fileprotectiondata = array("status"=>false, 01085 "username"=>"" 01086 ); 01087 /*! default user daten */ 01088 $userdata = array(); 01089 /*! datei zum lesen oeffnen */ 01090 $fh = fopen($used["protectiondb"], 'r'); 01091 /*! pruefen ob fehler beim oeffnen */ 01092 if($fh == false){ 01093 $out["errors"] .= "ERROR: File not found -> ".$used["userlogindb"]."<br>"; 01094 }else { 01095 /*! datei geoeffnet also solange bis datei ende */ 01096 while (!feof($fh)){ 01097 /*! zeile einlesen */ 01098 $line= fgets ($fh); 01099 /*! auf fehler beim zeile einlesen pruefen */ 01100 if ($line===FALSE) { 01101 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01102 if ($debugging) $out["errors"] .= " cant read line <br>"; 01103 } else { 01104 /*! regexpression fur datei pfad */ 01105 $thefilepathtag = "|<filepath>(".quotemeta($filetoprotect).")</filepath>|"; 01106 /*! wenn tag in Zeile */ 01107 if (preg_match($thefilepathtag,$line)) { 01108 /*! dann status wahr */ 01109 $fileprotectiondata["status"] = true; 01110 /*! regexpression fuer user */ 01111 $theusernametag = "|<user>(.*)</user>|"; 01112 /*! user name extrahieren */ 01113 $founduser = preg_match($theusernametag,$line,$userdata); 01114 /*! user name eintragen */ 01115 $fileprotectiondata["username"]=$userdata[1]; 01116 }; 01117 }; 01118 } 01119 /*! datei schliessen */ 01120 fclose($fh); 01121 } 01122 /*! rueckgabe auf parameter basierend */ 01123 if ($typ) { 01124 /*! wenn typ wahr dann als objekt */ 01125 return $fileprotectiondata; 01126 } else { 01127 /*! wenn typ falsch dann als boolean */ 01128 return $fileprotectiondata["status"]; 01129 } 01130 } 01131 /*! \brief check user login file 01132 * \param $userlogin der Loginname 01133 * \param $userpass das Loginpasswort 01134 */ 01135 function checkuserlogin($userlogin,$userpass) { 01136 /*! globale variablen festlegen */ 01137 global $out; 01138 global $used; 01139 global $FS; 01140 global $debugging; 01141 /*! default user level */ 01142 $userlevel = 0; 01143 /*! login datei zum lesen oeffnen */ 01144 $fh = fopen($used["userlogindb"], 'r'); 01145 /*! wenn fehler beim lesen */ 01146 if($fh == false){ 01147 /*! dann error ausgeben */ 01148 $out["errors"] .= "ERROR: File not found -> ".$used["userlogindb"]."<br>"; 01149 }else { 01150 /*! datei geeofnet , solange bis datei ende */ 01151 while (!feof($fh)){ 01152 /*! zeile einlesen */ 01153 $line= fgets ($fh); 01154 /*! auf fehler beim zeile einlesen pruefen */ 01155 if ($line===FALSE) { 01156 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01157 if ($debugging) $out["errors"] .= " cant read line <br>"; 01158 } else { 01159 /*! userloign verschluesseln */ 01160 $usermd5login = md5($userlogin); 01161 /*! regexpression userlogin tag */ 01162 $thelogintag = "|<userlogin>".quotemeta($usermd5login)."</userlogin>|"; 01163 /*! wenn regexpression user login tag in zeile */ 01164 if (preg_match($thelogintag,$line)) { 01165 /*! dann password fur user verschluesseln */ 01166 $usermd5pass = md5($userpass."isuser"); 01167 /*! regexpression userpass tag */ 01168 $thepasstag = "|<userpass>".quotemeta($usermd5pass)."</userpass>|"; 01169 /*! wenn regexpression userpass tag in zeile */ 01170 if (preg_match($thepasstag,$line)) { 01171 /*! dann user level 500 , normaler user */ 01172 $userlevel = 500; 01173 } 01174 /*! kein user dann password fur admin verschluesseln */ 01175 $usermd5pass = md5($userpass."isadmin"); 01176 /*! regexpression userpass tag */ 01177 $thepasstag = "|<userpass>".quotemeta($usermd5pass)."</userpass>|"; 01178 /*! wenn regexpression userpass tag in zeile */ 01179 if (preg_match($thepasstag,$line)) { 01180 /*! dann user level 100 , admin user */ 01181 $userlevel = 100; 01182 } 01183 01184 /*! nur fuer user */ 01185 if ($userlevel > 99) { 01186 /*! regexpression username tag */ 01187 $theusertag = "|<username>(.*)</username>|"; 01188 /*! extrahieren des usernamens */ 01189 $gotit = preg_match($theusertag,$line,$thisusersname); 01190 /*! username wurde extrahiert */ 01191 if ($gotit > 0 ) { 01192 /*! dann user name lesen */ 01193 $used["username"] = $thisusersname[1]; 01194 /*! dann user level lesen */ 01195 $used["userlevel"] = $userlevel; 01196 } 01197 } 01198 }; 01199 }; 01200 }; 01201 /*! datei schliessen */ 01202 fclose($fh); 01203 } 01204 } 01205 /*! \brief change user login file 01206 * \param $userlogin der Loginname 01207 * \param $userpass das Loginpasswort 01208 * \param $newpass das neue Loginpasswort 01209 */ 01210 function changeuserlogin($userlogin,$userpass,$newpass) { 01211 /*! globale variablen festlegen */ 01212 global $out; 01213 global $used; 01214 global $FS; 01215 global $debugging; 01216 /*! arbeits variablen default */ 01217 $newpassstring = ""; 01218 $addnewuserline = ""; 01219 $alluserslines =""; 01220 /*! user level default 0 */ 01221 $userlevel = 0; 01222 /*! login datei zum lesen oeffnen */ 01223 $fh = fopen($used["userlogindb"], 'r'); 01224 /*! wenn fehler beim lesen */ 01225 if($fh == false){ 01226 /*! dann error ausgeben */ 01227 $out["errors"] .= "ERROR: File not found -> ".$used["userlogindb"]."<br>"; 01228 }else { 01229 /*! datei geeofnet , solange bis datei ende */ 01230 while (!feof($fh)){ 01231 /*! zeile einlesen */ 01232 $line= fgets ($fh); 01233 /*! auf fehler beim zeile einlesen pruefen */ 01234 if ($line===FALSE) { 01235 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01236 if ($debugging) $out["errors"] .= " cant read line <br>"; 01237 } else { 01238 /*! regexpression fuer usernamen */ 01239 $theunametag = "|<username>".quotemeta($used['username'])."</username>|"; 01240 /*! wenn regexpression user login tag in zeile */ 01241 if (preg_match($theunametag,$line)) { 01242 /*! login verschluesseln */ 01243 $usermd5login = md5($userlogin); 01244 /*! regexpression fuer login name */ 01245 $thelogintag = "|<userlogin>".quotemeta($usermd5login)."</userlogin>|"; 01246 /*! wenn regexpression user login tag in zeile */ 01247 if (preg_match($thelogintag,$line)) { 01248 /*! passwort user verschluesseln */ 01249 $usermd5pass = md5($userpass."isuser"); 01250 /*! regexpression fuer user passwort user */ 01251 $thepasstag = "|<userpass>".quotemeta($usermd5pass)."</userpass>|"; 01252 /*! wenn regexpression user password tag in zeile */ 01253 if (preg_match($thepasstag,$line)) { 01254 /*! dann neues passwort verschluesseln fuer user */ 01255 $newpassstring = md5($newpass."isuser"); 01256 /*! user level auf 500 setzen , normaler user */ 01257 $userlevel = 500; 01258 01259 } 01260 /*! passwort admin verschluesseln */ 01261 $usermd5pass = md5($userpass."isadmin"); 01262 /*! regexpression fuer user passwort */ 01263 $thepasstag = "|<userpass>".quotemeta($usermd5pass)."</userpass>|"; 01264 /*! wenn regexpression user password tag in zeile */ 01265 if (preg_match($thepasstag,$line)) { 01266 /*! dann neues passwort verschluesseln fuer admin */ 01267 $newpassstring = md5($newpass."isadmin"); 01268 /*! user level auf 100 setzen , admin user */ 01269 $userlevel = 100; 01270 01271 } 01272 /*! nur fuer richtigen user */ 01273 if ($userlevel > 99) { 01274 /*! username tag */ 01275 $theusernametag = "<username>".$used['username']."</username>"; 01276 /*! user login verschluesseln */ 01277 $usermd5ulogin = md5($userlogin); 01278 /*! usern login tag */ 01279 $theuserlogintag ="<userlogin>".$usermd5ulogin."</userlogin>"; 01280 /*! user pass tag */ 01281 $theuserpasstag ="<userpass>".$newpassstring."</userpass>"; 01282 /*! tag zeile */ 01283 $taggedline = $theusernametag.$theuserlogintag.$theuserpasstag; 01284 /*! eintragen in alluser */ 01285 $alluserslines .= $taggedline."\n"; 01286 } else { 01287 /*! nicht user , also zeile uebernehmen */ 01288 $alluserslines .= $line; 01289 } 01290 } 01291 } else { 01292 /*! nicht richtiger user , also zeile uebernehmen */ 01293 $alluserslines .= $line; 01294 }; 01295 }; 01296 }; 01297 /*! datei schliessen */ 01298 fclose($fh); 01299 } 01300 /*! nur fuer richtigen user */ 01301 if ($userlevel > 99) { 01302 /*! login datei zum schreiben oeffen */ 01303 if (!$fh = fopen($used["userlogindb"], 'w')) { 01304 /*! error ausgabe das öffnen der datenbank datei zum daten anhängen ist fehlgeschlagen */ 01305 $out["errors"] .= "Cannot open db file to append stuff <br>"; 01306 } else { 01307 /*! login datei geoefnet also schreibe inhalt */ 01308 if (fwrite($fh, $alluserslines) === FALSE) { 01309 /*! error ausgabe kann datenbank datei keine daten anhängen */ 01310 $out["errors"] .= "Cannot write to db file to append stuff <br>"; 01311 } else { 01312 /* inhalt wurde geschrieben ausgabe */ 01313 $out["errors"] .= "user changed password"; 01314 /* inhalt wurde geschrieben loggen */ 01315 logThis("changed userpass ",$used['username']); 01316 } 01317 /*! datei schliessen */ 01318 fclose($fh); 01319 } 01320 } else { 01321 /*! kein update erfolgt */ 01322 $out["errors"] .= "user password untouched"; 01323 } 01324 } 01325 /*! \brief get protections from database file for pathnow 01326 * \return $protections Protectionsdaten aus der Datenbank 01327 */ 01328 function getprotectiondata() { 01329 /*! globale variablen festlegen */ 01330 global $out; 01331 global $used; 01332 global $FS; 01333 global $debugging; 01334 $protections = array(); 01335 /*! login datei zum lesen oeffnen */ 01336 $fh = fopen($used["protectiondb"], 'r'); 01337 /*! wenn fehler beim lesen */ 01338 if($fh == false){ 01339 /*! dann error ausgeben */ 01340 $out["errors"] .= "ERROR: File not found -> ".$used["protectiondb"]."<br>"; 01341 }else { 01342 /*! datei geeofnet , solange bis datei ende */ 01343 while (!feof($fh)){ 01344 /*! zeile einlesen */ 01345 $line= fgets ($fh); 01346 /*! auf fehler beim zeile einlesen pruefen */ 01347 if ($line===FALSE) { 01348 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01349 if ($debugging) $out["errors"] .= " cant read line <br>"; 01350 } else { 01351 /*! default objekt protekt daten */ 01352 $protectiondatas = array(); 01353 /*! regexpression fuer pfad */ 01354 $thematchdatas = "|<filepath>(".quotemeta($used["pathnow"]).".*)</filepath><user>(.*)</user><datetime>(.*)</datetime>|"; 01355 /*! pfad aus zeile extrahieren */ 01356 $gotit = preg_match($thematchdatas,$line,$protectiondatas); 01357 /*! pfad gefunden */ 01358 if ($gotit > 0) { 01359 /*! dann protect datas lesen */ 01360 $protections[]=$protectiondatas; 01361 } 01362 }; 01363 } 01364 /*! datei schliessen */ 01365 fclose($fh); 01366 } 01367 /*! rueckgabe protekt daten objekt */ 01368 return $protections; 01369 } 01370 /*! \brief check last log entry 01371 * 01372 */ 01373 function getlogdata(&$dirlist) { 01374 /*! globale variablen festlegen */ 01375 global $out; 01376 global $used; 01377 global $FS; 01378 global $debugging; 01379 /*! default log datei daten */ 01380 $logfiledata = array(); 01381 /*! login datei zum lesen oeffnen */ 01382 $fh = fopen($used["logfilepath"], 'r'); 01383 /*! wenn fehler beim lesen */ 01384 if($fh == false){ 01385 /*! dann error ausgeben */ 01386 $out["errors"] .= "ERROR: File not found -> ".$used["logfilepath"]."<br>"; 01387 }else { 01388 /*! datei geeofnet , solange bis datei ende */ 01389 while (!feof($fh)){ 01390 /*! zeile einlesen */ 01391 $line= fgets ($fh); 01392 /*! auf fehler beim zeile einlesen pruefen */ 01393 if ($line===FALSE) { 01394 /*! fuer debugging fehler beim zeile lesen ausgeben */ 01395 if ($debugging) $out["errors"] .= " cant read line <br>"; 01396 } else { 01397 /*! log file data loeschen */ 01398 $logfiledatas = array(); 01399 /*! regepression fuer log entry data */ 01400 $thematchdatas = "|^<date>(.*)</date><time>(.*)</time><user>(.*)</user><text>(.*)</text><path>(".quotemeta($used["pathnow"]).".*)</path>|"; 01401 /*! log file data extrahieren */ 01402 if(preg_match($thematchdatas,$line,$logfiledatas)) { 01403 /*! gefundenen pfad verschluesseln */ 01404 $md5logname = md5($logfiledatas[5]); 01405 /*! daten fuer pfad eintragen */ 01406 $logfiledata[$md5logname]=$logfiledatas; 01407 } 01408 }; 01409 } 01410 /*! datei schliessen */ 01411 fclose($fh); 01412 } 01413 /*! fuer jeden eintrag in direktory liste */ 01414 foreach ($dirlist as &$dlist) { 01415 /*! fuer jeden logfile eintrag */ 01416 foreach ($logfiledata as $logentry) { 01417 /*! wenn list pfad und log pfad gleich */ 01418 if (md5($dlist["path"]) == md5($logentry[5])) { 01419 /*! dann date aus liste */ 01420 $targetdate = date_parse($dlist["lastlog"]["date"]." ".$dlist["lastlog"]["time"].".0"); 01421 /*! dann timestamp aus datum von liste */ 01422 $oldts = mktime($targetdate["hour"], $targetdate["minute"], $targetdate["second"], $targetdate["month"], $targetdate["day"],$targetdate["year"]); 01423 /*! dann date aus log */ 01424 $targetdate = date_parse($logentry[1]." ".$logentry[2].".0"); 01425 /*! dann timestamp aus datum von log */ 01426 $newdts = mktime($targetdate["hour"], $targetdate["minute"], $targetdate["second"], $targetdate["month"],$targetdate["day"], $targetdate["year"]); 01427 /*! wenn beide werte nicht 0 */ 01428 if ($newdts > 0 and $oldts > 0) { 01429 /*! wenn neues datum groesser altes datum */ 01430 if ($newdts > $oldts) { 01431 /*! dann berechne Differenz */ 01432 $wasdts = floor(((time()-$newdts) )); 01433 $wasstr = ""; 01434 /*! secunden pro minute */ 01435 $minutensecunden = 60; 01436 /*! secunden pro stunde */ 01437 $stundensecunden = 60*60; 01438 /*! secunden pro tag */ 01439 $tagsecunden = $stundensecunden *24; 01440 /*! rest secunden */ 01441 $secundenrest = $wasdts; 01442 /*! lesbare einheiten default */ 01443 $tage=""; 01444 $stunden=""; 01445 $minuten=""; 01446 $secunden=""; 01447 /*! schalter fuer gefundene differenz */ 01448 $highest = true; 01449 /*! wenn rest groesser tag und noch nichts gefunden */ 01450 if ($secundenrest > $tagsecunden AND $highest ) { 01451 /*! dann berechne tage */ 01452 $tage = floor($secundenrest/$tagsecunden); 01453 /*! tage string ausgabe */ 01454 $wasstr.=$tage." Tag "; 01455 /*! rest secunden berechnen */ 01456 $secundenrest = $secundenrest -($tage*$tagsecunden); 01457 /*! wert wurde gefunden */ 01458 $highest = false; 01459 } 01460 /*! wenn rest groesser studnen und noch nichts gefunden */ 01461 if ($secundenrest > $stundensecunden AND $highest ) { 01462 /*! dann berechne stunden */ 01463 $stunden = floor($secundenrest /$stundensecunden); 01464 /*! stunden string ausgabe */ 01465 $wasstr.=$stunden." Std "; 01466 /*! rest secunden berechnen */ 01467 $secundenrest = $secundenrest-($stundensecunden * $stunden); 01468 /*! wert wurde gefunden */ 01469 $highest = false; 01470 } 01471 if ($secundenrest > $minutensecunden AND $highest ) { 01472 $minuten = floor($secundenrest /$minutensecunden); 01473 /*! minuten string ausgabe */ 01474 $wasstr.=$minuten." Min "; 01475 /*! rest secunden berechnen */ 01476 $secundenrest = $secundenrest-($minutensecunden * $minuten); 01477 /*! wert wurde gefunden */ 01478 $highest = false; 01479 } 01480 if ($highest ) { 01481 /*! rest secunden festhalten */ 01482 $secunden = $secundenrest; 01483 /*! secunden string ausgabe */ 01484 $wasstr.=$secunden." Sek "; 01485 /*! wert wurde gefunden */ 01486 $highest = false; 01487 } 01488 /*! wenn wert vorhanden dann zeitpsannen wort vor setzen */ 01489 if (!$highest) {$wasstr="vor ".$wasstr;} 01490 /*! last log entry setzen augabe string */ 01491 $dlist["lastlog"]["entry"] = $wasstr; 01492 /*! last log datum setzen */ 01493 $dlist["lastlog"]["date"] = $logentry[1]; 01494 /*! last log zeit setzen */ 01495 $dlist["lastlog"]["time"] = $logentry[2]; 01496 /*! last log user setzen */ 01497 $dlist["lastlog"]["user"] = $logentry[3]; 01498 /*! last log aktion setzen */ 01499 $dlist["lastlog"]["action"] = $logentry[4]; 01500 } 01501 } 01502 } 01503 } 01504 } 01505 } 01506 /*! \brief add the protected file to the dbfile 01507 * \param $filetoprotect Datei Pfad 01508 */ 01509 function protectFile($filetoprotect) { 01510 /*! globale variablen festlegen */ 01511 global $out; 01512 global $used; 01513 global $FS; 01514 global $debugging; 01515 /*! datei zum anhaengen oeffnen */ 01516 if (!$fh = fopen($used["protectiondb"], 'a')) { 01517 /*! error ausgabe das öffnen der datenbank datei zum daten anhängen ist fehlgeschlagen */ 01518 $out["errors"] .= "Cannot open db file to append stuff <br>"; 01519 } else { 01520 /*! datei ist geoeffnet , also pfad tag erzeugen */ 01521 $thefilepathtag = "<filepath>".$filetoprotect."</filepath>"; 01522 /*! user namen tag erzeugen */ 01523 $theusertag ="<user>".$used["username"]."</user>"; 01524 /*! date time tag erzeugen */ 01525 $thedatetimetag ="<datetime>".date("Y-m-d H:i:s")."</datetime>"; 01526 /*! tags zusammen setzen */ 01527 $taggedline = $thefilepathtag.$theusertag.$thedatetimetag; 01528 /*! tagzeile zum schreiben ergaenzen */ 01529 $protectionline = $taggedline."\n"; 01530 /*! zeile in datei schreiben */ 01531 if (fwrite($fh, $protectionline) === FALSE) { 01532 /*! error ausgabe kann datenbank datei keine daten anhängen */ 01533 $out["errors"] .= "Cannot write to db file to append stuff <br>"; 01534 } else { 01535 /*! erfolgreiches schreiben loggen */ 01536 logThis("file protected",$filetoprotect); 01537 } 01538 /*! datei schliessen */ 01539 fclose($fh); 01540 } 01541 } 01542 /*! \brief download work 01543 * \param $name Pfad der download Datei 01544 * \param $filename Name der download Datei 01545 */ 01546 function downloading($name, $filename) { 01547 /*! datei oeffnen zum lesen binar */ 01548 $fh = fopen($name, 'rb'); 01549 /*! wenn fehler beim lesen */ 01550 if($fh == false){ 01551 /*! dann error ausgeben */ 01552 $out["errors"] .= "ERROR: File not found -> ".$used["userlogindb"]."<br>"; 01553 }else { 01554 /*! kein fehler also header senden */ 01555 header("Cache-Control: ");// leave blank to avoid IE errors 01556 header("Pragma: ");// leave blank to avoid IE errors 01557 header("Content-type: application/octet-stream"); 01558 header("Content-Disposition: attachment; filename=\"" . $filename . "\""); 01559 header("Content-length:".(string)(filesize($name))); 01560 /*! warten damit datei im speicher */ 01561 sleep(1); 01562 /*! chache senden vorbereiten */ 01563 ob_flush(); 01564 /*! cache ausgeben */ 01565 flush(); 01566 /*! solange kein datei ende */ 01567 while(!feof($fh)) { 01568 /*! block lesen */ 01569 $buffer = fread($fh, 2048); 01570 /*! und ausgeben */ 01571 print $buffer; 01572 } 01573 /*! datei schliessen */ 01574 fclose ($fh); 01575 } 01576 } 01577 /*! \brief download userlog 01578 * 01579 */ 01580 function downloaduserLog() { 01581 /*! globale variablen festlegen */ 01582 global $used; 01583 /*! log file name */ 01584 $filename = $used["logfile"]; 01585 /*! log file pfad */ 01586 $name = $used["logfilepath"]; 01587 /*! daownload starten */ 01588 downloading($name, $filename); 01589 /*! programm ende , daten wurden schon gesendet */ 01590 exit; 01591 } 01592 /*! \brief download file 01593 * \param $filename Name der download Datei 01594 */ 01595 function downloadFile($filename) { 01596 /*! globale variablen festlegen */ 01597 global $out; 01598 global $used; 01599 global $FS; 01600 global $debugging; 01601 /*! datei absoluten pfad erzeugen */ 01602 $name = $used["pathnow"].$filename; 01603 /*! arbeits variablen default */ 01604 $isuser=false; 01605 $isprotected =false; 01606 /*! protektion Daten Objekt fuer pfad lesen */ 01607 $protectdata=checkprotection($name,true); 01608 /*! wenn protekt status wahr und protekt name gleich username */ 01609 if ($protectdata["status"] AND $protectdata["username"] == $used["username"]) { 01610 /*! dann downloade pfad */ 01611 downloading($name, $filename); 01612 /*! logging vom download */ 01613 logThis("downloaded file",$name); 01614 /*! programm ende , daten wurden schon gesendet */ 01615 exit; 01616 } else { 01617 /*! error ausgabe kann nicht downgeloaded werden da ungeschützt */ 01618 $out["errors"] .= "cant download file, you need protect this file <br>"; 01619 } 01620 } 01621 /*! \brief path controll 01622 * \param $path the path to check for injections. 01623 * \return $newpath the path without injections. 01624 * 01625 * delete injections in a path , stay in observer folder. 01626 */ 01627 function securepath($path) { 01628 /*! arbeit variable default */ 01629 $newpath =""; 01630 /*! entfernen von steuer zeichenfolge im pfad */ 01631 $newpath = preg_replace("$\.+/$","",$path); 01632 /*! rueckgabe pfad ohne steuer zeichen folge */ 01633 return $newpath; 01634 } 01635 ?>