| 6 | | |
|---|
| 7 | | // read prefered language from browser |
|---|
| 8 | | $dir = opendir('..'.DIRECTORY_SEPARATOR.'lang'); |
|---|
| | 6 | error_reporting(E_ALL ^ E_NOTICE); |
|---|
| | 7 | |
|---|
| | 8 | /** |
|---|
| | 9 | * Wir brauchen alle Konstanten aus settings.inc.php, können diese |
|---|
| | 10 | * Datei aber nicht inkluden, weil dann ebenfalls prepenc.inc.php |
|---|
| | 11 | * eingebunden wÃŒrde - dies darf aber im Update-Script nicht passieren |
|---|
| | 12 | * |
|---|
| | 13 | * Deshalb lesen wir die Konstanten auf etwas umstÀndlichere Weise |
|---|
| | 14 | * von Hand aus der Datei aus |
|---|
| | 15 | */ |
|---|
| | 16 | $lines = file("..".DIRECTORY_SEPARATOR."personal".DIRECTORY_SEPARATOR."settings.inc.php"); |
|---|
| | 17 | $password_hash = ''; |
|---|
| | 18 | foreach($lines as $line) { |
|---|
| | 19 | if(preg_match("/define\('(JLOG_[A-Z_]+)', ('[^']*'|true|false|\d+)\);/", $line, $result)) { |
|---|
| | 20 | switch($result[2]) { |
|---|
| | 21 | case 'true': |
|---|
| | 22 | $value = true; |
|---|
| | 23 | break; |
|---|
| | 24 | case 'false': |
|---|
| | 25 | $value = false; |
|---|
| | 26 | break; |
|---|
| | 27 | default: |
|---|
| | 28 | if(is_numeric($result[2])) { |
|---|
| | 29 | $value = (int) $result[2]; |
|---|
| | 30 | } |
|---|
| | 31 | else { |
|---|
| | 32 | $value = stripslashes(substr($result[2], 1, -1)); |
|---|
| | 33 | } |
|---|
| | 34 | break; |
|---|
| | 35 | } |
|---|
| | 36 | define($result[1], $value); |
|---|
| | 37 | } |
|---|
| | 38 | } |
|---|
| | 39 | define("JLOG_VERSION", '1.1.0'); |
|---|
| | 40 | define("JLOG_DB_CONTENT", JLOG_DB_PREFIX."content"); |
|---|
| | 41 | define("JLOG_DB_COMMENTS", JLOG_DB_PREFIX."comments"); |
|---|
| | 42 | define("JLOG_DB_CATASSIGN", JLOG_DB_PREFIX."catassign"); |
|---|
| | 43 | define("JLOG_DB_CATEGORIES", JLOG_DB_PREFIX."categories"); |
|---|
| | 44 | define("JLOG_DB_ATTRIBUTES", JLOG_DB_PREFIX."attributes"); |
|---|
| | 45 | |
|---|
| | 46 | /** |
|---|
| | 47 | * Die Konstante JLOG_LANGUAGE wurde mit Jlog 1.1.0 neu eingefÃŒhrt, |
|---|
| | 48 | * folglich wurde das Update-Script auf 1.1.0 bereits ausgefÃŒhrt, wenn |
|---|
| | 49 | * diese Konstante existiert. |
|---|
| | 50 | */ |
|---|
| | 51 | if(defined('JLOG_LANGUAGE')) { |
|---|
| | 52 | die('Das Update-Script kann nur einmal ausgefÃŒhrt werden.'); |
|---|
| | 53 | } |
|---|
| | 54 | |
|---|
| | 55 | /** |
|---|
| | 56 | * Da wir prepenc.inc.php nicht inkluden können, mÌssen wir ein paar |
|---|
| | 57 | * Teile davon hier manuell ausfÃŒhren, da sonst das Template-System |
|---|
| | 58 | * nicht funktioniert. |
|---|
| | 59 | */ |
|---|
| | 60 | require(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'version.inc.php'); |
|---|
| | 61 | require_once(JLOG_BASEPATH.'lang'.DIRECTORY_SEPARATOR.'lang.inc.php'); |
|---|
| | 62 | require_once(JLOG_BASEPATH.'lang'.DIRECTORY_SEPARATOR.'lang-admin.inc.php'); |
|---|
| | 63 | require_once(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'database.class.php'); |
|---|
| | 64 | require_once(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'bbcode.php'); |
|---|
| | 65 | require_once(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'general.func.php'); |
|---|
| | 66 | $connect = @mysql_connect(JLOG_DB_URL, JLOG_DB_USER, JLOG_DB_PWD); |
|---|
| | 67 | if ($connect == FALSE) { |
|---|
| | 68 | mail(JLOG_EMAIL, $l['admin']['e_db'], $l['admin']['e_db_is']."\n".mysql_error()); |
|---|
| | 69 | die("<strong>".$l['db_error']."</strong><br />".$l['plz_try_again']."."); |
|---|
| | 70 | } |
|---|
| | 71 | @mysql_select_db( JLOG_DB ); |
|---|
| | 72 | @mysql_query("SET NAMES utf8"); |
|---|
| | 73 | @mysql_query("SET sql_mode=''"); |
|---|
| | 74 | |
|---|
| | 75 | require_once(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'categories.class.php'); |
|---|
| | 76 | require_once(JLOG_BASEPATH.'scripts'.DIRECTORY_SEPARATOR.'jlogPlugins.class.php'); |
|---|
| | 77 | $plugins = new JlogPluginManager(JLOG_BASEPATH.'plugins'.DIRECTORY_SEPARATOR); |
|---|
| | 78 | |
|---|
| | 79 | // VerfÃŒgbare Sprachen auslesen |
|---|
| | 80 | $dir = opendir(JLOG_BASEPATH.'lang'); |
|---|
| 51 | | * Wir mÃŒssen an dieser Stelle das Administrator-Passwort prÃŒfen, wÃŒrde ich |
|---|
| 52 | | * hierfÃŒr /personal/settings.inc.php einbinden, um die Konstante |
|---|
| 53 | | * JLOG_ADMIN_PASSWORT zu erhalten, wÃŒrde mir gleichzeitig /scripts/prepend.inc.php |
|---|
| 54 | | * eingebunden werden, was weiteren Code ausfÃŒhren wÃŒrde, welcher letztendlich |
|---|
| 55 | | * eine Endlosschleife ergÀbe (Redirect auf dieses Script). |
|---|
| 56 | | * |
|---|
| 57 | | * Aus diesem Grund mÃŒssen wir es wohl etwas komplizierter machen und den |
|---|
| 58 | | * Passwort-Hash von Hand auslesen, welcher ungefÀhr so aussieht: |
|---|
| 59 | | * |
|---|
| 60 | | * define('JLOG_ADMIN_PASSWORD', '3858f62230ac3c915f300c664312c63f'); |
|---|
| 61 | | **/ |
|---|
| 62 | | $lines = file(JLOG_BASEPATH."personal".DIRECTORY_SEPARATOR."settings.inc.php"); |
|---|
| 63 | | $password_hash = ''; |
|---|
| 64 | | foreach($lines as $line) { |
|---|
| 65 | | if(preg_match("/'JLOG_ADMIN_PASSWORD', '([^']*)'/", $line, $result)) { |
|---|
| 66 | | $password_hash = $result[1]; |
|---|
| 67 | | break; |
|---|
| 68 | | } |
|---|
| 69 | | } |
|---|
| 70 | | |
|---|
| 71 | | if(md5($_POST['password']) !== $password_hash) { |
|---|
| | 116 | * Das alte Passwort ist anders kodiert (vorher ISO, jetzt UTF-8), deshalb |
|---|
| | 117 | * testen wir verschiedene Varianten des Passwortes |
|---|
| | 118 | */ |
|---|
| | 119 | $pass1 = md5($_POST['password']); # Idealfall |
|---|
| | 120 | $pass2 = md5(utf8_decode($_POST['password'])); # wahrscheinlichster Fall, wenn Jlog 1.0.2 vorher installiert war |
|---|
| | 121 | $pass3 = md5(utf8_encode($_POST['password'])); # sollte in der RealitÀt eigentlich nie in der Form vorkommen |
|---|
| | 122 | |
|---|
| | 123 | /** |
|---|
| | 124 | * Formulareingaben validieren |
|---|
| | 125 | */ |
|---|
| | 126 | if(JLOG_ADMIN_PASSWORD != $pass1 AND JLOG_ADMIN_PASSWORD != $pass2 AND JLOG_ADMIN_PASSWORD != $pass3) { |
|---|
| 100 | | @unlink(JLOG_BASEPATH."lang".DIRECTORY_SEPARATOR."lang.inc.php"); |
|---|
| 101 | | @unlink(JLOG_BASEPATH."lang".DIRECTORY_SEPARATOR."lang-admin.inc.php"); |
|---|
| 102 | | } |
|---|
| 103 | | |
|---|
| | 169 | $file1 = @unlink(JLOG_BASEPATH."lang".DIRECTORY_SEPARATOR."lang.inc.php"); |
|---|
| | 170 | $file2 = @unlink(JLOG_BASEPATH."lang".DIRECTORY_SEPARATOR."lang-admin.inc.php"); |
|---|
| | 171 | } |
|---|
| | 172 | if($file1 === false) { |
|---|
| | 173 | $errors[] = 'Die Datei <code>lang/lang.inc.php</code> konnte nicht gelöscht werden.'; |
|---|
| | 174 | } |
|---|
| | 175 | if($file2 === false) { |
|---|
| | 176 | $errors[] = 'Die Datei <code>lang/lang-admin.inc.php</code> konnte nicht gelöscht werden.'; |
|---|
| | 177 | } |
|---|
| | 178 | |
|---|
| | 179 | /** |
|---|
| | 180 | * Das Template von Jlog sollte als ISO abgespeichert sein bei Jlog 1.0.2, |
|---|
| | 181 | * fÃŒr Jlog 1.1.0 muss es allerdings als UTF-8 abgespeichert werden, dies |
|---|
| | 182 | * geschieht hier. |
|---|
| | 183 | * Durch die Verwendung von file_get_contents() und file_put_contents() setzen |
|---|
| | 184 | * wir PHP |
|---|
| | 185 | */ |
|---|
| | 186 | // Datei einlesen |
|---|
| | 187 | $template = JLOG_BASEPATH."personal".DIRECTORY_SEPARATOR."template.tpl"; |
|---|
| | 188 | $fh = fopen($template, "r+"); |
|---|
| | 189 | if($fh !== false) { |
|---|
| | 190 | flock($fh, LOCK_EX); |
|---|
| | 191 | $content = fread($fh, filesize($template)); |
|---|
| | 192 | // umkodieren |
|---|
| | 193 | $content = utf8_encode($content); |
|---|
| | 194 | // zurÃŒckschreiben |
|---|
| | 195 | fseek($fh, 0); |
|---|
| | 196 | ftruncate($fh, 0); |
|---|
| | 197 | fwrite($fh, $content); |
|---|
| | 198 | flock($fh, LOCK_UN); |
|---|
| | 199 | fclose($fh); |
|---|
| | 200 | } |
|---|
| | 201 | else { |
|---|
| | 202 | // Datei konnte nicht zum Schreiben geöffnet werden |
|---|
| | 203 | $errors[] = 'Die Datei <code>personal/template.tpl</code> konnte nicht in UTF-8 Kodierung konvertiert werden.'; |
|---|
| | 204 | } |
|---|
| | 205 | |
|---|
| | 206 | // Fertig :-) |
|---|