pgsql: Don't assume that "E" response to NEGOTIATE_SSL_CODE means pre-7

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Don't assume that "E" response to NEGOTIATE_SSL_CODE means pre-7
Дата
Msg-id E1QxPdy-0001zo-TC@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Don't assume that "E" response to NEGOTIATE_SSL_CODE means pre-7.0 server.

These days, such a response is far more likely to signify a server-side
problem, such as fork failure.  Reporting "server does not support SSL"
(in sslmode=require) could be quite misleading.  But the results could
be even worse in sslmode=prefer: if the problem was transient and the
next connection attempt succeeds, we'll have silently fallen back to
protocol version 2.0, possibly disabling features the user needs.

Hence, it seems best to just eliminate the assumption that backing off
to non-SSL/2.0 protocol is the way to recover from an "E" response, and
instead treat the server error the same as we would in non-SSL cases.

I tested this change against a pre-7.0 server, and found that there
was a second logic bug in the "prefer" path: the test to decide whether
to make a fallback connection attempt assumed that we must have opened
conn->ssl, which in fact does not happen given an "E" response.  After
fixing that, the code does indeed connect successfully to pre-7.0,
as long as you didn't set sslmode=require.  (If you did, you get
"Unsupported frontend protocol", which isn't completely off base
given the server certainly doesn't support SSL.)

Since there seems no reason to believe that pre-7.0 servers exist anymore
in the wild, back-patch to all supported branches.

Branch
------
REL8_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/427ba0e7146a79e73764d77a689b756b8fc37ec3

Modified Files
--------------
src/interfaces/libpq/fe-connect.c |   44 ++++++++++++++----------------------
1 files changed, 17 insertions(+), 27 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Document minimum required version of DocBook XSL stylesheets
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Don't assume that "E" response to NEGOTIATE_SSL_CODE means pre-7