]> granicus.if.org Git - pgbouncer/commitdiff
Add tests for plain-text password authentication
authorPeter Eisentraut <peter@eisentraut.org>
Sat, 3 Aug 2019 15:32:30 +0000 (17:32 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Sat, 3 Aug 2019 15:32:30 +0000 (17:32 +0200)
test/test.ini
test/test.sh
test/userlist.txt

index b45634a22771df4f43f4f50376196ad8095a50d6..9ce357ae53dc97222b561df9a603dd5212dc11f6 100644 (file)
@@ -4,6 +4,8 @@
 p0 = port=6666 host=127.0.0.1 dbname=p0 user=bouncer pool_size=2
 p1 = port=6666 host=127.0.0.1 dbname=p1 user=bouncer
 p3 = port=6666 host=127.0.0.1 dbname=p0 user=bouncer pool_mode=session
+p4 = port=6666 host=127.0.0.1 dbname=p4 user=muser1 password=foo
+p4x= port=6666 host=127.0.0.1 dbname=p4 user=muser1 password=wrong
 p5 = port=6666 host=127.0.0.1 dbname=p5 user=muser1 password=foo
 p5x= port=6666 host=127.0.0.1 dbname=p5 user=muser1 password=wrong
 
index 98472031ff6a17f85a6e582b2a420192296d9b11..d39a4f7dd738addb2b16efb8e7a61191174b4270 100755 (executable)
@@ -85,6 +85,9 @@ if [ ! -d $PGDATA ]; then
        log_connections = on
        EOF
        cat >pgdata/pg_hba.conf <<-EOF
+       local  p4   all                password
+       host   p4   all  127.0.0.1/32  password
+       host   p4   all  ::1/128       password
        local  p5   all                md5
        host   p5   all  127.0.0.1/32  md5
        host   p5   all  ::1/128       md5
@@ -99,7 +102,7 @@ pgctl start
 echo "Creating databases"
 psql -X -p $PG_PORT -l | grep p0 > /dev/null || {
        psql -X -o /dev/null -p $PG_PORT -c "create user bouncer" template1 || exit 1
-       for dbname in p0 p1 p3 p5; do
+       for dbname in p0 p1 p3 p4 p5; do
                createdb -p $PG_PORT $dbname || exit 1
        done
 }
@@ -584,6 +587,36 @@ test_auth_user() {
        return 0
 }
 
+# test plain-text password authentication from PgBouncer to PostgreSQL server
+#
+# The PostgreSQL server no longer supports storing plain-text
+# passwords, so the server-side user actually uses md5 passwords in
+# this test case, but the communication is still in plain text.
+test_password_server() {
+       admin "set auth_type='trust'"
+
+       # good password
+       psql -X -c "select 1" p4 || return 1
+       # bad password
+       psql -X -c "select 2" p4x && return 1
+
+       return 0
+}
+
+# test plain-text password authentication from client to PgBouncer
+test_password_client() {
+       admin "set auth_type='plain'"
+
+       # good password
+       PGPASSWORD=foo psql -X -U puser1 -c "select 1" p1 || return 1
+       # bad password
+       PGPASSWORD=wrong psql -X -U puser2 -c "select 2" p1 && return 1
+
+       admin "set auth_type='trust'"
+
+       return 0
+}
+
 # test md5 authentication from PgBouncer to PostgreSQL server
 test_md5_server() {
        admin "set auth_type='trust'"
@@ -632,6 +665,8 @@ test_database_change
 test_reconnect
 test_fast_close
 test_wait_close
+test_password_server
+test_password_client
 test_md5_server
 test_md5_client
 "
index 7a735a62fb491d2d2a94a899e4812cea9f418308..dd722b3df76664300ba063910e1be557c0be3572 100644 (file)
@@ -6,5 +6,8 @@
 
 ;the following pairs of passwords are "foo" and "bar"
 
+"puser1" "foo"
+"puser2" "bar"
+
 "muser1" "md5ab8b744ff66bee42dc47bae34ca17959"
 "muser2" "md598455b3585818e23c2653a59f6d84551"