v2-0003-libpq-Trace-StartupMessage-SSLRequest-GSSENCReque.patch
application/octet-stream
Filename: v2-0003-libpq-Trace-StartupMessage-SSLRequest-GSSENCReque.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v2-0003
Subject: libpq: Trace StartupMessage/SSLRequest/GSSENCRequest correctly
| File | + | − |
|---|---|---|
| src/interfaces/libpq/fe-trace.c | 35 | 12 |
From 04e788a9dc4ef85621f1ee97c3d5a8b4e22b423f Mon Sep 17 00:00:00 2001
From: Jelte Fennema-Nio <jelte.fennema@microsoft.com>
Date: Wed, 5 Jun 2024 12:07:09 +0200
Subject: [PATCH v2 3/8] libpq: Trace StartupMessage/SSLRequest/GSSENCRequest
correctly
If tracing was enabled during connection startup, these messages would
previously be listed in the trace output as something like this:
F 8 Unknown message: length is 8
F 38 Unknown message: length is 38
With this commit their type and contents are now correctly listed.
---
src/interfaces/libpq/fe-trace.c | 47 ++++++++++++++++++++++++---------
1 file changed, 35 insertions(+), 12 deletions(-)
diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index 6ea7bb821a1..f1e4c07cc25 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -704,6 +704,7 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message)
{
int length;
int logCursor = 0;
+ int version = 0;
if ((conn->traceFlags & PQTRACE_SUPPRESS_TIMESTAMPS) == 0)
{
@@ -719,19 +720,41 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message)
fprintf(conn->Pfdebug, "F\t%d\t", length);
- switch (length)
+ if (length < 8)
{
- case 16: /* CancelRequest */
- fprintf(conn->Pfdebug, "CancelRequest\t");
- pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
- pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
- pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
- break;
- case 8: /* GSSENCRequest or SSLRequest */
- /* These messages do not reach here. */
- default:
- fprintf(conn->Pfdebug, "Unknown message: length is %d", length);
- break;
+ fprintf(conn->Pfdebug, "Unknown message: length is %d\n", length);
+ return;
+ }
+
+ memcpy(&version, message + logCursor, 4);
+ version = (int) pg_ntoh32(version);
+
+ if (version == CANCEL_REQUEST_CODE)
+ {
+ fprintf(conn->Pfdebug, "CancelRequest\t");
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ }
+ else if (version == NEGOTIATE_SSL_CODE)
+ {
+ fprintf(conn->Pfdebug, "SSLRequest\t");
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ }
+ else if (version == NEGOTIATE_GSS_CODE)
+ {
+ fprintf(conn->Pfdebug, "GSSENCRequest\t");
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ }
+ else
+ {
+ fprintf(conn->Pfdebug, "StartupMessage\t");
+ pqTraceOutputInt32(conn->Pfdebug, message, &logCursor, false);
+ while (message[logCursor] != '\0')
+ {
+ pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
+ pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
+ }
}
fputc('\n', conn->Pfdebug);
--
2.34.1