Skip to content

curl_easy_perform() in curl 8.9.1 fails with OPERATION_TIMEOUT #14843

Description

@rmja

I did this

I am uploading a file to a Microsoft FTP Service using libcurl from C#. This has worked fine, but after updating to libcurl 8.9.1 it seems as if curl_easy_perform() now returns OPERATION_TIMEOUT. The call is going through a socks proxy (needed for me to access the FTP server due to firewall restrictions).

I hope that you can use my description below, even though it is from C#. It is the the verbose output obtained through the CURLoption.DEBUGFUNCTION handler.
Note that the file is actually uploaded - but, if I specify a POSTQUOTE to be run after the upload, then it is not executed.

CURLINFO_TEXT: 09.56.39.337 Trying 52.29.67.170:1080...
CURLINFO_TEXT: 09.56.39.363 Connected to 52.29.67.170 (52.29.67.170) port 1080
CURLINFO_TEXT: 09.56.39.454 Host kamanaftps01.westeurope.cloudapp.azure.com:21 was resolved.
CURLINFO_TEXT: 09.56.39.457 IPv6: (none)
CURLINFO_TEXT: 09.56.39.459 IPv4: 52.174.49.89
CURLINFO_TEXT: 09.56.39.461 SOCKS5 connect to 52.174.49.89:21 (locally resolved)
CURLINFO_TEXT: 09.56.39.495 SOCKS5 request granted.
CURLINFO_TEXT: 09.56.39.497 Connected to 52.29.67.170 (52.29.67.170) port 1080
CURLINFO_HEADER_IN: 09.56.39.504 220 Microsoft FTP Service
CURLINFO_HEADER_OUT: 09.56.39.506 AUTH SSL
CURLINFO_HEADER_IN: 09.56.39.537 234 AUTH command ok. Expecting TLS Negotiation.
CURLINFO_TEXT: 09.56.39.540 TLSv1.2 (OUT), TLS handshake, Client hello (1):
CURLINFO_SSL_DATA_OUT: 09.56.39.542 �CURLINFO_TEXT: 09.56.39.573 TLSv1.2 (IN), TLS handshake, Server hello (2):
CURLINFO_SSL_DATA_IN: 09.56.39.575 �CURLINFO_TEXT: 09.56.39.577 TLSv1.2 (IN), TLS handshake, Certificate (11):
CURLINFO_SSL_DATA_IN: 09.56.39.579 �CURLINFO_TEXT: 09.56.39.581 TLSv1.2 (IN), TLS handshake, Server key exchange (12):
CURLINFO_SSL_DATA_IN: 09.56.39.583 CURLINFO_TEXT: 09.56.39.585 TLSv1.2 (IN), TLS handshake, Server finished (14):
CURLINFO_SSL_DATA_IN: 09.56.39.586 �CURLINFO_TEXT: 09.56.39.588 TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
CURLINFO_SSL_DATA_OUT: 09.56.39.589 �CURLINFO_TEXT: 09.56.39.591 TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
CURLINFO_SSL_DATA_OUT: 09.56.39.592 �
CURLINFO_TEXT: 09.56.39.594 TLSv1.2 (OUT), TLS handshake, Finished (20):
CURLINFO_SSL_DATA_OUT: 09.56.39.596 �CURLINFO_TEXT: 09.56.39.629 TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
CURLINFO_SSL_DATA_IN: 09.56.39.631 �
CURLINFO_TEXT: 09.56.39.633 TLSv1.2 (IN), TLS handshake, Finished (20):
CURLINFO_SSL_DATA_IN: 09.56.39.635 �CURLINFO_TEXT: 09.56.39.636 SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 / [blank] / UNDEF
CURLINFO_TEXT: 09.56.39.638 Server certificate:
CURLINFO_TEXT: 09.56.39.639 subject: CN=kamanaftps01.westeurope.cloudapp.azure.com
CURLINFO_TEXT: 09.56.39.641 start date: Sep 12 05:59:33 2023 GMT
CURLINFO_TEXT: 09.56.39.642 expire date: Oct 13 05:59:33 2024 GMT
CURLINFO_TEXT: 09.56.39.644 subjectAltName: host "kamanaftps01.westeurope.cloudapp.azure.com" matched cert's "kamanaftps01.westeurope.cloudapp.azure.com"
CURLINFO_TEXT: 09.56.39.646 issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
CURLINFO_TEXT: 09.56.39.647 SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
CURLINFO_TEXT: 09.56.39.649 Certificate level 0: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
CURLINFO_TEXT: 09.56.39.651 Certificate level 1: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
CURLINFO_HEADER_OUT: 09.56.39.653 USER username
CURLINFO_HEADER_IN: 09.56.39.685 331 Password required
CURLINFO_HEADER_OUT: 09.56.39.687 PASS password
CURLINFO_HEADER_IN: 09.56.39.734 230 User logged in.
CURLINFO_HEADER_OUT: 09.56.39.736 PBSZ 0
CURLINFO_HEADER_IN: 09.56.39.768 200 PBSZ command successful.
CURLINFO_HEADER_OUT: 09.56.39.770 PROT P
CURLINFO_HEADER_IN: 09.56.39.802 200 PROT command successful.
CURLINFO_HEADER_OUT: 09.56.39.805 PWD
CURLINFO_HEADER_IN: 09.56.39.837 257 "/" is current directory.
CURLINFO_TEXT: 09.56.39.840 Entry path is '/'
CURLINFO_TEXT: 09.56.39.842 Request has same path as previous transfer
CURLINFO_HEADER_OUT: 09.56.39.844 EPSV
CURLINFO_TEXT: 09.56.39.846 Connect data stream passively
CURLINFO_HEADER_IN: 09.56.39.876 229 Entering Extended Passive Mode (|||16897|)
CURLINFO_TEXT: 09.56.39.878 Hostname 52.29.67.170 was found in DNS cache
CURLINFO_TEXT: 09.56.39.880 Connecting to kamanaftps01.westeurope.cloudapp.azure.com (52.29.67.170) port 1080
CURLINFO_TEXT: 09.56.39.882 Trying 52.29.67.170:1080...
CURLINFO_TEXT: 09.56.39.907 Connected 2nd connection to 52.29.67.170 port 1080
CURLINFO_TEXT: 09.56.39.968 Host kamanaftps01.westeurope.cloudapp.azure.com:16897 was resolved.
CURLINFO_TEXT: 09.56.39.970 IPv6: (none)
CURLINFO_TEXT: 09.56.39.972 IPv4: 52.174.49.89
CURLINFO_TEXT: 09.56.39.974 SOCKS5 connect to 52.174.49.89:16897 (locally resolved)
CURLINFO_TEXT: 09.56.40.007 SOCKS5 request granted.
CURLINFO_TEXT: 09.56.40.010 Connected 2nd connection to 52.29.67.170 port 1080
CURLINFO_TEXT: 09.56.40.012 SSL reusing session ID
CURLINFO_TEXT: 09.56.40.015 TLSv1.2 (OUT), TLS handshake, Client hello (1):
CURLINFO_SSL_DATA_OUT: 09.56.40.017 �CURLINFO_HEADER_OUT: 09.56.40.019 TYPE I
CURLINFO_HEADER_IN: 09.56.40.050 200 Type set to I.
CURLINFO_HEADER_OUT: 09.56.40.053 STOR upload-testfile-5e047ec0-0bc6-4eab-854d-9c5a70f2ae61.txt.tmp
CURLINFO_HEADER_IN: 09.56.40.125 125 Data connection already open; Transfer starting.
CURLINFO_TEXT: 09.56.40.128 TLSv1.2 (IN), TLS handshake, Server hello (2):
CURLINFO_SSL_DATA_IN: 09.56.40.130 �CURLINFO_TEXT: 09.56.40.132 TLSv1.2 (IN), TLS handshake, Certificate (11):
CURLINFO_SSL_DATA_IN: 09.56.40.134 �CURLINFO_TEXT: 09.56.40.136 TLSv1.2 (IN), TLS handshake, Server key exchange (12):
CURLINFO_SSL_DATA_IN: 09.56.40.138 CURLINFO_TEXT: 09.56.40.140 TLSv1.2 (IN), TLS handshake, Server finished (14):
CURLINFO_SSL_DATA_IN: 09.56.40.142 �CURLINFO_TEXT: 09.56.40.145 TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
CURLINFO_SSL_DATA_OUT: 09.56.40.146 �CURLINFO_TEXT: 09.56.40.149 TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
CURLINFO_SSL_DATA_OUT: 09.56.40.150 �
CURLINFO_TEXT: 09.56.40.153 TLSv1.2 (OUT), TLS handshake, Finished (20):
CURLINFO_SSL_DATA_OUT: 09.56.40.154 �CURLINFO_TEXT: 09.56.40.188 TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
CURLINFO_SSL_DATA_IN: 09.56.40.190 �
CURLINFO_TEXT: 09.56.40.192 TLSv1.2 (IN), TLS handshake, Finished (20):
CURLINFO_SSL_DATA_IN: 09.56.40.194 �CURLINFO_TEXT: 09.56.40.196 SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 / [blank] / UNDEF
CURLINFO_TEXT: 09.56.40.198 Server certificate:
CURLINFO_TEXT: 09.56.40.200 subject: CN=kamanaftps01.westeurope.cloudapp.azure.com
CURLINFO_TEXT: 09.56.40.202 start date: Sep 12 05:59:33 2023 GMT
CURLINFO_TEXT: 09.56.40.204 expire date: Oct 13 05:59:33 2024 GMT
CURLINFO_TEXT: 09.56.40.206 subjectAltName: host "kamanaftps01.westeurope.cloudapp.azure.com" matched cert's "kamanaftps01.westeurope.cloudapp.azure.com"
CURLINFO_TEXT: 09.56.40.208 issuer: C=US; ST=Arizona; L=Scottsdale; O=GoDaddy.com, Inc.; OU=http://certs.godaddy.com/repository/; CN=Go Daddy Secure Certificate Authority - G2
CURLINFO_TEXT: 09.56.40.210 SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
CURLINFO_TEXT: 09.56.40.212 Certificate level 0: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
CURLINFO_TEXT: 09.56.40.214 Certificate level 1: Public key type ? (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
CURLINFO_DATA_OUT: 09.56.40.217 This is a testfile
CURLINFO_TEXT: 09.56.40.219 TLSv1.2 (OUT), TLS alert, close notify (256):
CURLINFO_SSL_DATA_OUT: 09.56.40.221 �CURLINFO_TEXT: 09.56.42.234 SSL shutdown timeout
CURLINFO_TEXT: 09.56.42.236 closing connection #0

Let me know if there is some CURLOption that I can specify to help with diagnosing the issue further.
I can do the same uploads to a vsftpd server without any issues.
I believe this is related to #13904.

I expected the following

I expect the perform operation to not return an error, and if a POSTQUOTE is specified, to have it be executed.

curl/libcurl version

libcurl 8.9.1 (this worked in libcurl 8.8.0)

operating system

I have tried both on Windows and alpine linux with verified libcurl 8.9.1

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions