1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-24 00:23:06 +03:00

Fix some more problems with testing error returns from SSL.

This commit is contained in:
Tom Lane
2003-08-04 17:25:29 +00:00
parent a4ffca6bdf
commit 5365a0cf52
2 changed files with 23 additions and 4 deletions

View File

@@ -25,7 +25,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.85 2002/10/24 23:35:55 tgl Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.85.2.1 2003/08/04 17:25:28 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@@ -553,7 +553,18 @@ retry3:
* file is ready. Grumble. Fortunately, we don't expect this path to * file is ready. Grumble. Fortunately, we don't expect this path to
* be taken much, since in normal practice we should not be trying to * be taken much, since in normal practice we should not be trying to
* read data unless the file selected for reading already. * read data unless the file selected for reading already.
*
* In SSL mode it's even worse: SSL_read() could say WANT_READ and then
* data could arrive before we make the pqReadReady() test. So we must
* play dumb and assume there is more data, relying on the SSL layer to
* detect true EOF.
*/ */
#ifdef USE_SSL
if (conn->ssl)
return 0;
#endif
switch (pqReadReady(conn)) switch (pqReadReady(conn))
{ {
case 0: case 0:

View File

@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-secure.c,v 1.15.2.5 2003/04/10 23:03:13 tgl Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-secure.c,v 1.15.2.6 2003/08/04 17:25:29 tgl Exp $
* *
* NOTES * NOTES
* The client *requires* a valid server certificate. Since * The client *requires* a valid server certificate. Since
@@ -278,21 +278,25 @@ pqsecure_read(PGconn *conn, void *ptr, size_t len)
libpq_gettext("SSL SYSCALL error: %s\n"), libpq_gettext("SSL SYSCALL error: %s\n"),
SOCK_STRERROR(SOCK_ERRNO)); SOCK_STRERROR(SOCK_ERRNO));
else else
{
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("SSL SYSCALL error: EOF detected\n")); libpq_gettext("SSL SYSCALL error: EOF detected\n"));
SOCK_ERRNO = ECONNRESET;
n = -1;
}
break; break;
case SSL_ERROR_SSL: case SSL_ERROR_SSL:
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("SSL error: %s\n"), SSLerrmessage()); libpq_gettext("SSL error: %s\n"), SSLerrmessage());
/* fall through */ /* fall through */
case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_ZERO_RETURN:
pqsecure_close(conn);
SOCK_ERRNO = ECONNRESET; SOCK_ERRNO = ECONNRESET;
n = -1; n = -1;
break; break;
default: default:
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("Unknown SSL error code\n")); libpq_gettext("Unknown SSL error code\n"));
n = -1;
break; break;
} }
} }
@@ -334,21 +338,25 @@ pqsecure_write(PGconn *conn, const void *ptr, size_t len)
libpq_gettext("SSL SYSCALL error: %s\n"), libpq_gettext("SSL SYSCALL error: %s\n"),
SOCK_STRERROR(SOCK_ERRNO)); SOCK_STRERROR(SOCK_ERRNO));
else else
{
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("SSL SYSCALL error: EOF detected\n")); libpq_gettext("SSL SYSCALL error: EOF detected\n"));
SOCK_ERRNO = ECONNRESET;
n = -1;
}
break; break;
case SSL_ERROR_SSL: case SSL_ERROR_SSL:
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("SSL error: %s\n"), SSLerrmessage()); libpq_gettext("SSL error: %s\n"), SSLerrmessage());
/* fall through */ /* fall through */
case SSL_ERROR_ZERO_RETURN: case SSL_ERROR_ZERO_RETURN:
pqsecure_close(conn);
SOCK_ERRNO = ECONNRESET; SOCK_ERRNO = ECONNRESET;
n = -1; n = -1;
break; break;
default: default:
printfPQExpBuffer(&conn->errorMessage, printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("Unknown SSL error code\n")); libpq_gettext("Unknown SSL error code\n"));
n = -1;
break; break;
} }
} }