]> source.dussan.org Git - nextcloud-server.git/commitdiff
Added occ install option for database-port.
authorThomas Pulzer <t.pulzer@kniel.de>
Wed, 6 Jul 2016 07:58:38 +0000 (09:58 +0200)
committerThomas Pulzer <t.pulzer@kniel.de>
Wed, 6 Jul 2016 07:58:38 +0000 (09:58 +0200)
Extended the database setup to store the database port.
Changed the PostgreSQL connection error message for clarification.

core/Command/Maintenance/Install.php
lib/private/Setup/AbstractDatabase.php
lib/private/Setup/MySQL.php
lib/private/Setup/OCI.php
lib/private/Setup/PostgreSQL.php

index 12a61d6341a093b8965f604f58753ecc4b30a59a..320405cad39f16a3f16519566a6562d6faff116f 100644 (file)
@@ -50,6 +50,7 @@ class Install extends Command {
                        ->addOption('database', null, InputOption::VALUE_REQUIRED, 'Supported database type', 'sqlite')
                        ->addOption('database-name', null, InputOption::VALUE_REQUIRED, 'Name of the database')
                        ->addOption('database-host', null, InputOption::VALUE_REQUIRED, 'Hostname of the database', 'localhost')
+                       ->addOption('database-port', null, InputOption::VALUE_OPTIONAL, 'Port the database is listening on')
                        ->addOption('database-user', null, InputOption::VALUE_REQUIRED, 'User name to connect to the database')
                        ->addOption('database-pass', null, InputOption::VALUE_OPTIONAL, 'Password of the database user', null)
                        ->addOption('database-table-prefix', null, InputOption::VALUE_OPTIONAL, 'Prefix for all tables (default: oc_)', null)
@@ -106,6 +107,7 @@ class Install extends Command {
                $dbUser = $input->getOption('database-user');
                $dbPass = $input->getOption('database-pass');
                $dbName = $input->getOption('database-name');
+               $dbPort = $input->getOption('database-port');
                if ($db === 'oci') {
                        // an empty hostname needs to be read from the raw parameters
                        $dbHost = $input->getParameterOption('--database-host', '');
@@ -158,6 +160,7 @@ class Install extends Command {
                        'dbpass' => $dbPass,
                        'dbname' => $dbName,
                        'dbhost' => $dbHost,
+                       'dbport' => $dbPort,
                        'dbtableprefix' => $dbTablePrefix,
                        'adminlogin' => $adminLogin,
                        'adminpass' => $adminPassword,
index 331617df19d26b5af86a24486557780754ea56f2..08ed741f51ccb4579b5520a70e5a2b5d586fd5fc 100644 (file)
@@ -42,6 +42,8 @@ abstract class AbstractDatabase {
        /** @var string */
        protected $dbHost;
        /** @var string */
+       protected $dbPort;
+       /** @var string */
        protected $tablePrefix;
        /** @var IConfig */
        protected $config;
@@ -78,11 +80,13 @@ abstract class AbstractDatabase {
                $dbPass = $config['dbpass'];
                $dbName = $config['dbname'];
                $dbHost = !empty($config['dbhost']) ? $config['dbhost'] : 'localhost';
+               $dbPort = !empty($config['dbport']) ? $config['dbport'] : '';
                $dbTablePrefix = isset($config['dbtableprefix']) ? $config['dbtableprefix'] : 'oc_';
 
                $this->config->setSystemValues([
                        'dbname'                => $dbName,
                        'dbhost'                => $dbHost,
+                       'dbport' => $dbPort,
                        'dbtableprefix' => $dbTablePrefix,
                ]);
 
@@ -90,6 +94,7 @@ abstract class AbstractDatabase {
                $this->dbPassword = $dbPass;
                $this->dbName = $dbName;
                $this->dbHost = $dbHost;
+               $this->dbPort = $dbPort;
                $this->tablePrefix = $dbTablePrefix;
        }
 
index 1467eb734d775ad15d360692c5fb61799e8aa935..1ff7b278b863742f976800509a9ae1074f1e29af 100644 (file)
@@ -100,8 +100,14 @@ class MySQL extends AbstractDatabase {
                                'tablePrefix' => $this->tablePrefix,
                );
 
-               // adding port support
-               if (strpos($this->dbHost, ':')) {
+               // adding port support through installer
+               if(!empty($this->dbPort)) {
+                       if (ctype_digit($this->dbPort)) {
+                               $connectionParams['port'] = $this->dbPort;
+                       } else {
+                               $connectionParams['unix_socket'] = $this->dbPort;
+                       }
+               } else if (strpos($this->dbHost, ':')) {
                        // Host variable may carry a port or socket.
                        list($host, $portOrSocket) = explode(':', $this->dbHost, 2);
                        if (ctype_digit($portOrSocket)) {
index 1da3656f9ab21aaa83b1036e72186b187d288298..7fddf0e58e500b2bdb24275969624223533331f3 100644 (file)
@@ -63,12 +63,14 @@ class OCI extends AbstractDatabase {
 
        public function setupDatabase($username) {
                $e_host = addslashes($this->dbHost);
+               // adding slashes for security reasons
+               $e_port = addslashes($this->dbPort);
                $e_dbname = addslashes($this->dbName);
                //check if the database user has admin right
                if ($e_host == '') {
                        $easy_connect_string = $e_dbname; // use dbname as easy connect name
                } else {
-                       $easy_connect_string = '//'.$e_host.'/'.$e_dbname;
+                       $easy_connect_string = '//'.$e_host.(!empty($e_port) ? ":{$e_port}" : "").'/'.$e_dbname;
                }
                $this->logger->debug('connect string: ' . $easy_connect_string, ['app' => 'setup.oci']);
                $connection = @oci_connect($this->dbUser, $this->dbPassword, $easy_connect_string);
index 702227ef3ffa7ec5979b062f73d6e52e277596d7..35d8b8eac14a5ce739b9c79f4681e4d519478a82 100644 (file)
@@ -34,8 +34,11 @@ class PostgreSQL extends AbstractDatabase {
                $e_user = addslashes($this->dbUser);
                $e_password = addslashes($this->dbPassword);
 
-               // Fix database with port connection
-               if(strpos($e_host, ':')) {
+               // adding port support through installer
+               if(!empty($this->dbPort)) {
+                       // adding slashes for security reasons
+                       $port = addslashes($this->dbPort);
+               } else if(strpos($e_host, ':')) {
                        list($e_host, $port)=explode(':', $e_host, 2);
                } else {
                        $port=false;
@@ -51,8 +54,8 @@ class PostgreSQL extends AbstractDatabase {
                        $connection = @pg_connect($connection_string);
 
                        if(!$connection)
-                               throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL username and/or password not valid'),
-                                               $this->trans->t('You need to enter either an existing account or the administrator.'));
+                               throw new \OC\DatabaseSetupException($this->trans->t('PostgreSQL connection failed'),
+                                               $this->trans->t('Please check your connection details.'));
                }
                $e_user = pg_escape_string($this->dbUser);
                //check for roles creation rights in postgresql