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