mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
fix(DB): Sanitize host parameter for postgres databases when IPv6 address is passed
Doctrine is using `pg_connect` with the `host` parameter, this does not allow IPv6 addresses in URI notation. So we need to extract the IP address and pass it directly Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
ae19e949ed
commit
2525e73caa
2 changed files with 12 additions and 3 deletions
|
|
@ -112,9 +112,9 @@ $CONFIG = [
|
|||
|
||||
/**
|
||||
* Your host server name, for example ``localhost``, ``hostname``,
|
||||
* ``hostname.example.com``, or the IP address. To specify a port use
|
||||
* ``hostname:####``; to specify a Unix socket use
|
||||
* ``/path/to/directory/containing/socket`` e.g. ``/run/postgresql/``.
|
||||
* ``hostname.example.com``, or the IP address.
|
||||
* To specify a port use ``hostname:####``, for IPv6 addresses use the URI notation ``[ip]:port``.
|
||||
* To specify a Unix socket use ``/path/to/directory/containing/socket``, e.g. ``/run/postgresql/``.
|
||||
*/
|
||||
'dbhost' => '',
|
||||
|
||||
|
|
|
|||
|
|
@ -128,6 +128,15 @@ class ConnectionFactory {
|
|||
$eventManager->addEventSubscriber(new SetTransactionIsolationLevel());
|
||||
$additionalConnectionParams = array_merge($this->createConnectionParams(), $additionalConnectionParams);
|
||||
switch ($normalizedType) {
|
||||
case 'pgsql':
|
||||
// pg_connect used by Doctrine DBAL does not support URI notation (enclosed in brackets)
|
||||
$matches = [];
|
||||
if (preg_match('/^\[([^\]]+)\]$/', $additionalConnectionParams['host'], $matches)) {
|
||||
// Host variable carries a port or socket.
|
||||
$additionalConnectionParams['host'] = $matches[1];
|
||||
}
|
||||
break;
|
||||
|
||||
case 'oci':
|
||||
$eventManager->addEventSubscriber(new OracleSessionInit);
|
||||
// the driverOptions are unused in dbal and need to be mapped to the parameters
|
||||
|
|
|
|||
Loading…
Reference in a new issue