Quellcode durchsuchen

implemented INI cenversion functionality

El RIDO vor 8 Jahren
Ursprung
Commit
6e8eafe129
3 geänderte Dateien mit 46 neuen und 3 gelöschten Zeilen
  1. 28 0
      lib/Configuration.php
  2. 2 3
      lib/Data/Database.php
  3. 16 0
      tst/ConfigurationTest.php

+ 28 - 0
lib/Configuration.php

@@ -101,6 +101,33 @@ class Configuration
     {
         $config     = array();
         $configFile = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.php';
+        $configIni  = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini';
+
+        // rename INI files to avoid configuration leakage
+        if (is_readable($configIni)) {
+            // don't overwrite already converted file
+            if (!is_file($configFile)) {
+                $iniUpgradeError = false;
+                $context = stream_context_create();
+                $iniHandle = fopen($configIni, 'r', 1, $context);
+                $written = file_put_contents($configFile, ';<?php /*' . PHP_EOL);
+                $written = file_put_contents($configFile, $iniHandle, FILE_APPEND);
+                fclose($iniHandle);
+                unlink($configIni);
+            }
+
+            // cleanup sample, too
+            $configSample = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.sample.php';
+            $configIniSample = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini.sample';
+            if (is_readable($configIniSample)) {
+                if (is_readable($configSample)) {
+                    unlink($configIniSample);
+                } else {
+                    rename($configIniSample, $configSample);
+                }
+            }
+        }
+
         if (is_readable($configFile)) {
             $config = parse_ini_file($configFile, true);
             foreach (array('main', 'model', 'model_options') as $section) {
@@ -109,6 +136,7 @@ class Configuration
                 }
             }
         }
+
         $opts = '_options';
         foreach (self::getDefaults() as $section => $values) {
             // fill missing sections with default values

+ 2 - 3
lib/Data/Database.php

@@ -693,9 +693,8 @@ class Database extends AbstractData
                     'CREATE INDEX IF NOT EXISTS comment_parent ON ' .
                     self::_sanitizeIdentifier('comment') . '(pasteid);'
                 );
-                // no break, continue with updates for 0.22
-            case '0.22':
-            case '1.0':
+                // no break, continue with updates for 0.22 and later
+            default:
                 self::_exec(
                     'UPDATE ' . self::_sanitizeIdentifier('config') .
                     ' SET value = ? WHERE id = ?',

+ 16 - 0
tst/ConfigurationTest.php

@@ -157,4 +157,20 @@ class ConfigurationTest extends PHPUnit_Framework_TestCase
             'configuration values get converted'
         );
     }
+
+    public function testRenameIniSample()
+    {
+        $iniSample = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini.sample';
+        $phpSample = PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.sample.php';
+
+        Helper::createIniFile(PATH . 'cfg' . DIRECTORY_SEPARATOR . 'conf.ini', $this->_options);
+        if (is_file(CONF)) {
+            chmod(CONF, 0600);
+            unlink(CONF);
+        }
+        rename($phpSample, $iniSample);
+        new Configuration;
+        $this->assertFileNotExists($iniSample, 'old sample file gets removed');
+        $this->assertFileExists($phpSample, 'new sample file gets created');
+    }
 }