memcpy(PqGSSSendBuffer + PqGSSSendLength, output.value, output.length);
PqGSSSendLength += output.length;
+
+ /* Release buffer storage allocated by GSSAPI */
+ gss_release_buffer(&minor, &output);
}
/* If we get here, our counters should all match up. */
/* Our receive buffer is now empty, reset it */
PqGSSRecvLength = 0;
+ /* Release buffer storage allocated by GSSAPI */
gss_release_buffer(&minor, &output);
}
*/
if (ret < 0 &&
!(errno == EWOULDBLOCK || errno == EAGAIN || errno == EINTR))
+ {
+ gss_release_buffer(&minor, &output);
return -1;
+ }
/* Wait and retry if we couldn't write yet */
if (ret <= 0)
memcpy(PqGSSSendBuffer + PqGSSSendLength, output.value, output.length);
PqGSSSendLength += output.length;
+
+ /* Release buffer storage allocated by GSSAPI */
+ gss_release_buffer(&minor, &output);
}
/* If we get here, our counters should all match up. */
ret = bytes_sent;
cleanup:
+ /* Release GSSAPI buffer storage, if we didn't already */
if (output.value != NULL)
gss_release_buffer(&minor, &output);
return ret;
/* Our receive buffer is now empty, reset it */
PqGSSRecvLength = 0;
+ /* Release buffer storage allocated by GSSAPI */
gss_release_buffer(&minor, &output);
}
ret = bytes_returned;
cleanup:
+ /* Release GSSAPI buffer storage, if we didn't already */
if (output.value != NULL)
gss_release_buffer(&minor, &output);
return ret;
gss_release_cred(&minor, &conn->gcred);
conn->gcred = GSS_C_NO_CREDENTIAL;
conn->gssenc = true;
+ gss_release_buffer(&minor, &output);
/*
* Determine the max packet size which will fit in our buffer, after
{
pg_GSS_error(libpq_gettext("GSSAPI context establishment error"),
conn, major, minor);
+ gss_release_buffer(&minor, &output);
return PGRES_POLLING_FAILED;
}
/* We don't bother with PqGSSSendConsumed here */
+ /* Release buffer storage allocated by GSSAPI */
gss_release_buffer(&minor, &output);
/* Ask to be called again to write data */