psql client does not handle WSAEWOULDBLOCK on Windows
Ning <ning94803@gmail.com>
From: Ning <ning94803@gmail.com>
To: pgsql-hackers@lists.postgresql.org
Date: 2024-07-30T08:47:35Z
Lists: pgsql-hackers
Attachments
- fix-windows-non-blocking-socket.patch (application/octet-stream) patch
*Description:*The connection fails with a non-blocking socket error when using psql on Windows to connect to a PostgreSQL server with GSSAPI enabled. The error is because the socket error code is obtained by WSAGetLastError() instead of errno. This causes the value of errno to be incorrect when handling a non-blocking socket error. *Steps to Reproduce:*1. Compile PostgreSQL client (psql) on Windows. a. Make sure MIT Kerberos is installed. I use the latest version MIT Kerberos Version 4.1. b. Make sure GSSAPI is enabled 2. Attempt to connect to a PostgreSQL server using psql. a. Set up the Kerberos server and configure the PostgreSQL server by referring to https://github.com/50wu/kerberos-docker/blob/main/POSTGRES.README.md b. change the entry to hostgssenc on PostgreSQL server pg_hba.conf and restart hostgssenc all all 0.0.0.0/0 gss include_realm=0 krb_realm=GPDB.KRB c. Use the following command to connect to the database server psql -h <hostname> -U "postgres/krb5-service-example-com.example.com" -d postgres 3. The connection fails with a non-blocking socket error. The error is something like: psql: error: connection to server at "xxx", port 5432 failed: *Environment*: PostgreSQL version: 16.3 Operating System: Windows 11 *Fix Steps:*In the gss_read function of src/interfaces/libpq/fe-secure-gssapi.c, change the check of the error code to use the SOCK_ERRNO to make sure that EAGAIN, EWOULDBLOCK and EINTR can be properly handled on Windows and other platforms. The patch file is attached to this email, please review and consider merging it to the main code library. Thanks, Ning Wu
Commits
-
Use SOCK_ERRNO[_SET] in fe-secure-gssapi.c.
- fc287cf3c4c9 13.23 landed
- f46d77377b9a 14.20 landed
- ea78bd6d5d0f 19 (unreleased) landed
- d83879a32b48 18.1 landed
- 771b106d1994 15.15 landed
- 46c4478db421 16.11 landed
- 1c4671f7b7c3 17.7 landed