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:
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user