summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/Command/Maintenance/Install.php3
-rw-r--r--lib/private/Setup/AbstractDatabase.php5
-rw-r--r--lib/private/Setup/MySQL.php10
-rw-r--r--lib/private/Setup/OCI.php4
-rw-r--r--lib/private/Setup/PostgreSQL.php11
5 files changed, 26 insertions, 7 deletions
diff --git a/core/Command/Maintenance/Install.php b/core/Command/Maintenance/Install.php
index 12a61d6341a..320405cad39 100644
--- a/core/Command/Maintenance/Install.php
+++ b/core/Command/Maintenance/Install.php
@@ -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,
diff --git a/lib/private/Setup/AbstractDatabase.php b/lib/private/Setup/AbstractDatabase.php
index 331617df19d..08ed741f51c 100644
--- a/lib/private/Setup/AbstractDatabase.php
+++ b/lib/private/Setup/AbstractDatabase.php
@@ -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;
}
diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php
index 1467eb734d7..1ff7b278b86 100644
--- a/lib/private/Setup/MySQL.php
+++ b/lib/private/Setup/MySQL.php
@@ -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)) {
diff --git a/lib/private/Setup/OCI.php b/lib/private/Setup/OCI.php
index 1da3656f9ab..7fddf0e58e5 100644
--- a/lib/private/Setup/OCI.php
+++ b/lib/private/Setup/OCI.php
@@ -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);
diff --git a/lib/private/Setup/PostgreSQL.php b/lib/private/Setup/PostgreSQL.php
index 702227ef3ff..35d8b8eac14 100644
--- a/lib/private/Setup/PostgreSQL.php
+++ b/lib/private/Setup/PostgreSQL.php
@@ -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