xref: /php-src/ext/pdo_pgsql/tests/gh12423.phpt (revision cf701fb4)
1--TEST--
2GitHub #12424 (Fix GH-12423: [pdo_pgsql] Changed to prioritize DSN authentication information over arguments.)
3--EXTENSIONS--
4pdo
5pdo_pgsql
6--SKIPIF--
7<?php
8require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
9require __DIR__ . '/config.inc';
10if (strpos($config['ENV']['PDOTEST_DSN'], 'password=') === false && !isset($config['ENV']['PDOTEST_PASS'])) {
11    die('skip no password');
12}
13PDOTest::skip();
14?>
15--FILE--
16<?php
17require __DIR__ . '/config.inc';
18
19$dsnWithCredentials = $config['ENV']['PDOTEST_DSN'];
20$user = $config['ENV']['PDOTEST_USER'] ?? null;
21$password = $config['ENV']['PDOTEST_PASS'] ?? null;
22if (!$user) {
23    preg_match('/user=([^ ]*)/', $dsnWithCredentials, $match);
24    $user = $match[1] ?? '';
25}
26if (!$password) {
27    preg_match('/password=([^ ]*)/', $dsnWithCredentials, $match);
28    $password = $match[1] ?? '';
29}
30$dsn = str_replace("user={$user}", '', $dsnWithCredentials);
31$dsn = str_replace("password={$password}", '', $dsn);
32$dsn = rtrim($dsn);
33
34echo "dsn without credentials / correct user / correct password".PHP_EOL;
35try {
36    $db = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
37    echo "Connected.".PHP_EOL.PHP_EOL;
38} catch (PDOException $e) {
39    echo $e->getMessage().PHP_EOL;
40}
41
42echo "dsn with credentials / no user / no password".PHP_EOL;
43try {
44    $db = new PDO("{$dsn} user={$user} password={$password}", null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
45    echo "Connected.".PHP_EOL.PHP_EOL;
46} catch (PDOException $e) {
47    echo $e->getMessage().PHP_EOL;
48}
49
50echo "dsn with correct user / incorrect user / correct password".PHP_EOL;
51try {
52    $db = new PDO("{$dsn} user={$user}", 'hoge', $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
53    echo "Connected.".PHP_EOL.PHP_EOL;
54} catch (PDOException $e) {
55    echo $e->getMessage().PHP_EOL;
56}
57
58echo "dsn with correct password / correct user / incorrect password".PHP_EOL;
59try {
60    $db = new PDO("{$dsn} password={$password}", $user, 'fuga', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
61    echo "Connected.".PHP_EOL.PHP_EOL;
62} catch (PDOException $e) {
63    echo $e->getMessage().PHP_EOL;
64}
65
66echo "dsn with correct credentials / incorrect user / incorrect password".PHP_EOL;
67try {
68    $db = new PDO("{$dsn} user={$user} password={$password}", 'hoge', 'fuga', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
69    echo "Connected.".PHP_EOL;
70} catch (PDOException $e) {
71    echo $e->getMessage().PHP_EOL;
72}
73?>
74--EXPECT--
75dsn without credentials / correct user / correct password
76Connected.
77
78dsn with credentials / no user / no password
79Connected.
80
81dsn with correct user / incorrect user / correct password
82Connected.
83
84dsn with correct password / correct user / incorrect password
85Connected.
86
87dsn with correct credentials / incorrect user / incorrect password
88Connected.
89