Subversion Repositories personal-webbase

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgef&uuml;hrt werden.');
  4.  
  5. function ftp_rmdir_rec($handle, $path)
  6. {
  7.         if (!@ftp_delete($handle, $path))
  8.         {
  9.                 $list = @ftp_nlist($handle, $path);
  10.                 if (!empty($list))
  11.                 {
  12.                         foreach($list as $value)
  13.                         {
  14.                                 ftp_rmdir_rec($handle, $value);
  15.                         }
  16.                 }
  17.         }
  18.  
  19.         if(@ftp_rmdir($handle, $path))
  20.                 return true;
  21.         else
  22.                 return false;
  23. }
  24.  
  25. // Funktioniert FTP-Zugang?
  26.  
  27. $conn_id = @ftp_connect($configuration['common_directftp']['ftp-server'], $configuration['common_directftp']['ftp-port']);
  28. $login_result = @ftp_login ($conn_id, $configuration['common_directftp']['ftp-username'], $configuration['common_directftp']['ftp-password']);
  29.  
  30. $fehler = 0;
  31.  
  32. if ((!$conn_id) || (!$login_result))
  33.         $fehler = 1;
  34.  
  35. if ((@ftp_size($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/moddir.txt') == -1) || (substr($configuration['common_directftp']['ftp-verzeichnis'], 0, 1) != '/') || (substr($configuration['common_directftp']['ftp-verzeichnis'], strlen($configuration['common_directftp']['ftp-verzeichnis'])-1, 1) != '/'))
  36.         $fehler = 1;
  37.  
  38. if ($fehler)
  39.         die($header.'<b>Fehler</b><br><br>Fehlkonfiguration im FTP-Direktzugriff-Kernmodul! FTP-Zugangsdaten oder -Verzeichnis fehlerhaft bzw. zu geringe Zugriffsrechte! Bitte <a href="'.$_SERVER['PHP_SELF'].'?modul=common_directftp&amp;seite=config&amp;vonmodul='.$modul.'">Konfigurationswerte</a> einsehen.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  40.  
  41. // Los gehts!
  42.  
  43. if ($aktion == 'delete')
  44. {
  45.         // Achtung! Ein Hacker könnte ../ als Modul angeben und somit das komplette Modulverzeichnis oder mehr rekursiv löschen!
  46.         if (strpos($modul, '..'))
  47.                 die($header.'<b>Fehler</b><br><br>Der L&ouml;schvorgang wurde aufgrund einer Schutzverletzung abgebrochen!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  48.  
  49.         // Nun Modul über FTP löschen!
  50.         @ftp_rmdir_rec($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$entfernen);
  51.         @ftp_quit($conn_id);
  52.  
  53.         // Info: MySQL-Daten löschen sich über Autostart automatisch
  54.         wb_redirect_now($_SERVER['PHP_SELF'].'?seite=main&modul='.$modul);
  55. }
  56.  
  57. if ($aktion == 'install')
  58. {
  59.         // Temp-Verzeichnisnamen finden
  60.         $uid = 'temp_'.zufall(10);
  61.  
  62.         // Datei in unser Verzeichnis kopieren, sodass wir darauf zugreifen können (für Safe-Mode)
  63.         if (!@ftp_put($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip', $_FILES['dfile']['tmp_name'], FTP_BINARY))
  64.         {
  65.                 @ftp_quit($conn_id);
  66.                 die($header.'<b>Fehler</b><br><br>Konnte ZIP-Datei nicht in tempor&auml;res Verzeichnis des Modules hineinkopieren (FTP)!.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  67.         }
  68.         @ftp_site($conn_id, 'CHMOD 0644 '.$configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip');
  69.  
  70.         // Temporäres Verzeichnis für Extraktion erstellen
  71.         @ftp_rmdir_rec($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  72.         @ftp_mkdir($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  73.         @ftp_site($conn_id, 'CHMOD 0755 '.$configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  74.  
  75.         // Entpacken zum Personal WebBase-Temp-Verzeichnis
  76.         if (file_exists('modules/'.$modul.'/includes/dunzip2.inc.php'))
  77.                 include('modules/'.$modul.'/includes/dunzip2.inc.php');
  78.         $zip = new dUnzip2('modules/'.$modul.'/temp/'.$uid.'.zip');
  79.         $zip->unzipAll('modules/'.$modul.'/temp/'.$uid.'/', '', true);
  80.         $zip->close();
  81.  
  82.         // Temporäre Daten löschen
  83.         @ftp_delete($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'.zip');
  84.  
  85.         // Wenn Verzeichnis leer ist, lässt es sich löschen. -> Fehler
  86.         $verzinh = @ftp_nlist($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  87.         if (count($verzinh) == 0)
  88.         {
  89.                 @ftp_rmdir_rec($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  90.                 @ftp_quit($conn_id);
  91.                 die($header.'<b>Fehler</b><br><br>Dekompression entweder komplett misslungen oder ZIP-Datei war leer.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  92.         }
  93.  
  94.         // Verzeichnis verschieben
  95.         if (!@ftp_rename($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/', $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$uid.'/'))
  96.         {
  97.                 @ftp_rmdir_rec($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$modul.'/temp/'.$uid.'/');
  98.                 @ftp_quit($conn_id);
  99.                 die($header.'<b>Fehler</b><br><br>Das Verschieben des Verzeichnisses ist misslungen!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  100.         }
  101.  
  102.         // Richtigen Dateinamen finden
  103.         $fn = 'modules/'.$uid.'/folder_name.txt';
  104.         $fp = @fopen($fn, 'r');
  105.         $inhalt = @fread($fp, @filesize($fn));
  106.         @fclose($fp);
  107.  
  108.         // Datei folder_name.txt im Zielmodul löschen
  109.         @ftp_delete ($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$uid.'/folder_name.txt');
  110.  
  111.         if ($inhalt != '')
  112.         {
  113.                 // Schutzverletzung im folder_namen?
  114.                 if (strpos($inhalt, '..'))
  115.                 {
  116.                         @ftp_quit($conn_id);
  117.                         die($header.'<b>Fehler</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners eine Schutzverletzung!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  118.                 }
  119.  
  120.                 // Gibt es schon ein Modul mit dem Titel? Dann Alternativenamen finden
  121.                 if (@ftp_chdir($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.'/'))
  122.                 {
  123.                         @ftp_cdup($conn_id);
  124.                         $zusatz = 2;
  125.                         $problem = true;
  126.                         while (@ftp_chdir($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.$zusatz.'/'))
  127.                         {
  128.                                 @ftp_cdup($conn_id);
  129.                                 $zusatz++;
  130.                         }
  131.                 }
  132.                 else
  133.                 {
  134.                         $problem = false;
  135.                         $zusatz = '';
  136.                 }
  137.  
  138.                 // Ordner umbenennen
  139.                 $erfolg = @ftp_rename ($conn_id, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$uid, $configuration['common_directftp']['ftp-verzeichnis'].'modules/'.$inhalt.$zusatz);
  140.  
  141.                 // FTP-Verbindung trennen
  142.                 @ftp_quit($conn_id);
  143.  
  144.                 // Wurde der Ordner nicht umbenannt? (z.B. Wenn der Ordnertitel nicht für Dateisystem zulässig war)
  145.                 if (!$erfolg)
  146.                         die($header.'<b>Information</b><br><br>Das Modul konnte zwar installiert werden, jedoch gab es bei der Umbenennung des Ordners einen Fehler!<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  147.  
  148.                 // Wurde nur der Ordner nicht korrekt umbenannt? (z.B. wenn es ein Modul mit dem selben Namen noch gibt)
  149.                 if ($problem)
  150.                         die($header.'<b>Information</b><br><br>Es existiert bereits ein Modul mit dem Namen &quot;'.$inhalt.'&quot;. Das Modul wurde trotzdem unter dem alternativen Namen &quot;'.$inhalt.$zusatz.'&quot; installiert.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  151.         }
  152.         else
  153.         {
  154.                 // Kein Dateiname angegeben?
  155.                 @ftp_quit($conn_id);
  156.                 die($header.'<b>Information</b><br><br>Das Modul wurde unter dem Namen &quot;'.$uid.'&quot; angelegt, da in der Moduldatei keine Namensangabe vorhanden war.<br><br><a href="'.$_SERVER['PHP_SELF'].'?seite=main&amp;modul='.$modul.'">Zur&uuml;ck</a>'.$footer);
  157.         }
  158.  
  159.         // Alles OK? Dann zurück!
  160.         wb_redirect_now($_SERVER['PHP_SELF'].'?seite=main&modul='.$modul);
  161. }
  162.  
  163. ?>