Don't send an empty SSPI negotiation packet at the end of the negotiation.
authorMagnus Hagander <magnus@hagander.net>
Tue, 4 Dec 2007 13:02:53 +0000 (13:02 +0000)
committerMagnus Hagander <magnus@hagander.net>
Tue, 4 Dec 2007 13:02:53 +0000 (13:02 +0000)
Fixes bug #3750

src/interfaces/libpq/fe-auth.c

index 14124623edc5d80823f963f7ccc6c988006edc14..fd6684bae75b1e75b02bb71f8ee6cb09e80c45d0 100644 (file)
@@ -618,11 +618,18 @@ pg_SSPI_continue(PGconn *conn)
                        return STATUS_ERROR;
                }
 
-               if (pqPacketSend(conn, 'p',
-                                  outbuf.pBuffers[0].pvBuffer, outbuf.pBuffers[0].cbBuffer))
+               /*
+                * If the negotiation is complete, there may be zero bytes to send. The server is
+                * at this point not expecting any more data, so don't send it.
+                */
+               if (outbuf.pBuffers[0].cbBuffer > 0)
                {
-                       FreeContextBuffer(outbuf.pBuffers[0].pvBuffer);
-                       return STATUS_ERROR;
+                       if (pqPacketSend(conn, 'p',
+                                          outbuf.pBuffers[0].pvBuffer, outbuf.pBuffers[0].cbBuffer))
+                       {
+                               FreeContextBuffer(outbuf.pBuffers[0].pvBuffer);
+                               return STATUS_ERROR;
+                       }
                }
                FreeContextBuffer(outbuf.pBuffers[0].pvBuffer);
        }