summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2003-08-04 17:58:14 +0000
committerTom Lane2003-08-04 17:58:14 +0000
commite8e1d4553ce7b630fe401209e205a49ba306bfb2 (patch)
tree1214e0cc2804892c7bb4ce5bb020ea4d21a8e435
parent39a9496d51e64f68cb7792c7014f4a388121ec89 (diff)
SSL_read/SSL_write do not approximate the return conventions of recv()
and send() very well at all; and in any case we can't use retval==0 for EOF due to race conditions. Make the same fixes in the backend as are required in libpq.
-rw-r--r--src/backend/libpq/be-secure.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/backend/libpq/be-secure.c b/src/backend/libpq/be-secure.c
index e7f075e044a..dfedaf4ea90 100644
--- a/src/backend/libpq/be-secure.c
+++ b/src/backend/libpq/be-secure.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/be-secure.c,v 1.39 2003/08/04 02:39:59 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/be-secure.c,v 1.40 2003/08/04 17:58:14 tgl Exp $
*
* Since the server static private key ($DataDir/server.key)
* will normally be stored unencrypted so that the database
@@ -273,9 +273,13 @@ rloop:
(errcode_for_socket_access(),
errmsg("SSL SYSCALL error: %m")));
else
+ {
ereport(COMMERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("SSL SYSCALL error: EOF detected")));
+ errno = ECONNRESET;
+ n = -1;
+ }
break;
case SSL_ERROR_SSL:
ereport(COMMERROR,
@@ -283,7 +287,6 @@ rloop:
errmsg("SSL error: %s", SSLerrmessage())));
/* fall through */
case SSL_ERROR_ZERO_RETURN:
- secure_close(port);
errno = ECONNRESET;
n = -1;
break;
@@ -291,6 +294,7 @@ rloop:
ereport(COMMERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("unrecognized SSL error code")));
+ n = -1;
break;
}
}
@@ -353,9 +357,13 @@ wloop:
(errcode_for_socket_access(),
errmsg("SSL SYSCALL error: %m")));
else
+ {
ereport(COMMERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("SSL SYSCALL error: EOF detected")));
+ errno = ECONNRESET;
+ n = -1;
+ }
break;
case SSL_ERROR_SSL:
ereport(COMMERROR,
@@ -363,7 +371,6 @@ wloop:
errmsg("SSL error: %s", SSLerrmessage())));
/* fall through */
case SSL_ERROR_ZERO_RETURN:
- secure_close(port);
errno = ECONNRESET;
n = -1;
break;
@@ -371,6 +378,7 @@ wloop:
ereport(COMMERROR,
(errcode(ERRCODE_PROTOCOL_VIOLATION),
errmsg("unrecognized SSL error code")));
+ n = -1;
break;
}
}