diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index 38cae4de91..f3a177c985 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -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); }