Treat clean shutdown of an SSL connection same as the non-SSL case.
authorHeikki Linnakangas
Mon, 3 Jul 2017 11:51:51 +0000 (14:51 +0300)
committerHeikki Linnakangas
Mon, 3 Jul 2017 11:53:10 +0000 (14:53 +0300)
If the client closes an SSL connection, treat it the same as EOF on a
non-SSL connection. In particular, don't write a message in the log about
that.

Michael Paquier.

Discussion: https://www.postgresql.org/message-id/CAB7nPqSfyVV42Q2acFo%[email protected]

src/backend/libpq/be-secure.c

index 2579c7e419c214c82c0062c3628010d2495dc082..c6573b40e7ba6e70d293e9551ac9a9323d2ae368 100644 (file)
@@ -289,11 +289,13 @@ rloop:
                ereport(COMMERROR,
                        (errcode(ERRCODE_PROTOCOL_VIOLATION),
                         errmsg("SSL error: %s", SSLerrmessage(ecode))));
-               /* fall through */
-           case SSL_ERROR_ZERO_RETURN:
                errno = ECONNRESET;
                n = -1;
                break;
+           case SSL_ERROR_ZERO_RETURN:
+               /* connection was cleanly shut down by peer */
+               n = 0;
+               break;
            default:
                ereport(COMMERROR,
                        (errcode(ERRCODE_PROTOCOL_VIOLATION),
@@ -414,8 +416,14 @@ wloop:
                ereport(COMMERROR,
                        (errcode(ERRCODE_PROTOCOL_VIOLATION),
                         errmsg("SSL error: %s", SSLerrmessage(ecode))));
-               /* fall through */
+               errno = ECONNRESET;
+               n = -1;
+               break;
            case SSL_ERROR_ZERO_RETURN:
+               /*
+                * the SSL connnection was closed, leave it to the caller
+                * to ereport it
+                */
                errno = ECONNRESET;
                n = -1;
                break;