]> granicus.if.org Git - postgresql/commitdiff
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 38cae4de917f197d10eb9c7a55be6a510e6adea0..f3a177c985eea01820a8b8e82ed5202698f48c55 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.133 2007/11/15 21:14:46 momjian Exp $
+ *       $PostgreSQL: pgsql/src/interfaces/libpq/fe-auth.c,v 1.134 2007/12/04 13:02:53 mha Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -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);
        }