Hi all,

Since 510b8cbf, we have in-core equivalents for htonl(), ntohl() & co
through pg_bswap.h that allows to compile with a built-in function if
the compiler used has one.

All the existing calls in the code tree have been changed with
0ba99c84 for performance reasons (except the libpq examples), however
the FE/BE code of GSSAPI encryption code did not get this call in
b0b39f7.  I think that we had better switch to the built-ins functions
as well for this case.  The argument of consistency matters here, but
also perhaps the argument of performance, where it may not be easy to
measure a difference.

Attached is a patch to do the switch.  None of the files changed
include arpa/inet.h.  Any thoughts?

Thanks,
--
Michael
diff --git a/src/backend/libpq/be-secure-gssapi.c b/src/backend/libpq/be-secure-gssapi.c
index 64427f185b..5a73302b7b 100644
--- a/src/backend/libpq/be-secure-gssapi.c
+++ b/src/backend/libpq/be-secure-gssapi.c
@@ -209,7 +209,7 @@ be_gssapi_write(Port *port, void *ptr, size_t len)
 		PqGSSSendConsumed += input.length;
 
 		/* 4 network-order bytes of length, then payload */
-		netlen = htonl(output.length);
+		netlen = pg_hton32(output.length);
 		memcpy(PqGSSSendBuffer + PqGSSSendLength, &netlen, sizeof(uint32));
 		PqGSSSendLength += sizeof(uint32);
 
@@ -323,7 +323,7 @@ be_gssapi_read(Port *port, void *ptr, size_t len)
 		}
 
 		/* Decode the packet length and check for overlength packet */
-		input.length = ntohl(*(uint32 *) PqGSSRecvBuffer);
+		input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer);
 
 		if (input.length > PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32))
 			ereport(FATAL,
@@ -509,7 +509,7 @@ secure_open_gssapi(Port *port)
 		/*
 		 * Get the length for this packet from the length header.
 		 */
-		input.length = ntohl(*(uint32 *) PqGSSRecvBuffer);
+		input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer);
 
 		/* Done with the length, reset our buffer */
 		PqGSSRecvLength = 0;
@@ -567,7 +567,7 @@ secure_open_gssapi(Port *port)
 		 */
 		if (output.length > 0)
 		{
-			uint32		netlen = htonl(output.length);
+			uint32		netlen = pg_hton32(output.length);
 
 			if (output.length > PQ_GSS_SEND_BUFFER_SIZE - sizeof(uint32))
 				ereport(FATAL,
diff --git a/src/interfaces/libpq/fe-secure-gssapi.c b/src/interfaces/libpq/fe-secure-gssapi.c
index 1994e9f615..bfc0f55214 100644
--- a/src/interfaces/libpq/fe-secure-gssapi.c
+++ b/src/interfaces/libpq/fe-secure-gssapi.c
@@ -226,7 +226,7 @@ pg_GSS_write(PGconn *conn, const void *ptr, size_t len)
 		PqGSSSendConsumed += input.length;
 
 		/* 4 network-order bytes of length, then payload */
-		netlen = htonl(output.length);
+		netlen = pg_hton32(output.length);
 		memcpy(PqGSSSendBuffer + PqGSSSendLength, &netlen, sizeof(uint32));
 		PqGSSSendLength += sizeof(uint32);
 
@@ -346,7 +346,7 @@ pg_GSS_read(PGconn *conn, void *ptr, size_t len)
 		}
 
 		/* Decode the packet length and check for overlength packet */
-		input.length = ntohl(*(uint32 *) PqGSSRecvBuffer);
+		input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer);
 
 		if (input.length > PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32))
 		{
@@ -589,7 +589,7 @@ pqsecure_open_gss(PGconn *conn)
 		 */
 
 		/* Get the length and check for over-length packet */
-		input.length = ntohl(*(uint32 *) PqGSSRecvBuffer);
+		input.length = pg_ntoh32(*(uint32 *) PqGSSRecvBuffer);
 		if (input.length > PQ_GSS_RECV_BUFFER_SIZE - sizeof(uint32))
 		{
 			printfPQExpBuffer(&conn->errorMessage,
@@ -688,7 +688,7 @@ pqsecure_open_gss(PGconn *conn)
 	}
 
 	/* Queue the token for writing */
-	netlen = htonl(output.length);
+	netlen = pg_hton32(output.length);
 
 	memcpy(PqGSSSendBuffer, (char *) &netlen, sizeof(uint32));
 	PqGSSSendLength += sizeof(uint32);

Attachment: signature.asc
Description: PGP signature

Reply via email to