Describe the bug
When using FTPS to connect to a server, cyberduck is trying out different parsers for getting directory contents.
The LIST -a parser creates a PASV connection, and then tries to connect to the server by using TLS for the IP address, which fails because the server does not have any certificate for just the IP address. This causes Cyberduck to switch to the next parser. Cyberduck then gets confused in the control connection because the server still answers with the following to the previous LIST -a attempt:
226 Closing data connection, sent 0 bytes
Cyberduck interprets this as the response to the next command by the next list parser (CWD /whatever). Finally, the connection fails because the responses do not make sense to Cyberduck.
2026-03-17 12:03:58,439 [Thread-90] INFO audit.transcript - CWD /import
2026-03-17 12:03:58,454 [Thread-90] INFO audit.transcript - 250 Directory changed to /import
2026-03-17 12:03:58,454 [Thread-90] INFO audit.transcript - TYPE A
2026-03-17 12:03:58,468 [Thread-90] INFO audit.transcript - 200 Type set to ASCII
2026-03-17 12:03:58,468 [Thread-90] INFO audit.transcript - PASV
2026-03-17 12:03:58,482 [Thread-90] INFO audit.transcript - 227 Entering Passive Mode (xxx,xxx,xxx,xxx,27,158)
2026-03-17 12:03:58,483 [Thread-90] DEBUG ch.cyberduck.core.ssl.CustomTrustSSLProtocolSocketFactory - Configure SSL parameters with protocols [TLSv1.2, TLSv1.1, TLSv1]
2026-03-17 12:03:58,483 [Thread-90] INFO ch.cyberduck.core.ssl.CustomTrustSSLProtocolSocketFactory - Enabled cipher suites [...]
2026-03-17 12:03:58,483 [Thread-90] DEBUG ch.cyberduck.core.ssl.CustomTrustSSLProtocolSocketFactory - Handshake for socket SSLSocket[hostname=null, port=0, Session(1773745438482|SSL_NULL_WITH_NULL_NULL)]
2026-03-17 12:03:58,498 [Thread-90] INFO audit.transcript - LIST -a
2026-03-17 12:03:58,513 [Thread-90] INFO audit.transcript - 150 Opening ASCII mode data connection for file list
2026-03-17 12:03:58,513 [Thread-90] WARN ch.cyberduck.core.ftp.FTPClient - SSL session Session(1773745435274|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) for socket SSLSocket[hostname=xxx.xxx.xxx.xxx, port=7070, Session(1773745438482|SSL_NULL_WITH_NULL_NULL)] is not rejoinable
2026-03-17 12:03:58,529 [Thread-90] WARN ch.cyberduck.core.ftp.FTPExceptionMappingService - Map failure javax.net.ssl.SSLException: (internal_error) Received fatal alert: internal_error
2026-03-17 12:03:58,530 [Thread-90] WARN ch.cyberduck.core.DefaultIOExceptionMappingService - Map failure javax.net.ssl.SSLException: (internal_error) Received fatal alert: internal_error
2026-03-17 12:03:58,530 [Thread-90] WARN ch.cyberduck.core.ssl.SSLExceptionMappingService - Map failure javax.net.ssl.SSLException: (internal_error) Received fatal alert: internal_error
2026-03-17 12:03:58,530 [Thread-90] WARN ch.cyberduck.core.ftp.DataConnectionActionExecutor - Server denied data socket operation with Interoperability failure
2026-03-17 12:03:58,530 [Thread-90] WARN ch.cyberduck.core.ftp.list.FTPListService - Remove Command{command=LIST, arg='-a'} from listing strategies
2026-03-17 12:03:58,530 [Thread-90] INFO audit.transcript - CWD /import
2026-03-17 12:03:58,531 [Thread-90] INFO audit.transcript - 226 Closing data connection, sent 0 bytes
2026-03-17 12:03:58,531 [Thread-90] INFO audit.transcript - TYPE A
2026-03-17 12:03:58,545 [Thread-90] INFO audit.transcript - 250 Directory changed to /import
2026-03-17 12:03:58,545 [Thread-90] INFO audit.transcript - PASV
2026-03-17 12:03:58,559 [Thread-90] INFO audit.transcript - 200 Type set to ASCII
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > CWD /import
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 250 Directory changed to /import
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > TYPE A
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 200 Type set to ASCII
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > PASV
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 227 Entering Passive Mode (xxx,xxx,xxx,xxx,27,158)
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > LIST -a
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 150 Opening ASCII mode data connection for file list
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 226 Closing data connection, sent 0 bytes
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > CWD /import
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 250 Directory changed to /import
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > TYPE A
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 200 Type set to ASCII
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb > PASV
2026/03/17 12:03:58 60a16bbc8b1135ac6eeb < 227 Entering Passive Mode (xxx,xxx,xxx,xxx,27,171)
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb > CWD /import
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb < 250 Directory changed to /import
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb > TYPE A
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb < 200 Type set to ASCII
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb > PASV
2026/03/17 12:03:59 60a16bbc8b1135ac6eeb < 227 Entering Passive Mode (xxx,xxx,xxx,xxx,30,120)
To Reproduce
Steps to reproduce the behavior:
- Use FTPS server with certificate for a domain. The server must have incompatible output for the STAT command, so that Cyberduck switches to
LIST -a. Ideally, the server responds with compatible output to the STAT for populated directories, but not for empty directories.
- Connect to the server, and wait for Cyberduck to respond with "Interoperability failure - 200 Type set to ASCII. Please contact your web hosting service provider for assistance."
Expected behavior
Work correctly.
Screenshots
Desktop (please complete the following information):
Log Files
Included above.
Additional context
Describe the bug
When using FTPS to connect to a server, cyberduck is trying out different parsers for getting directory contents.
The
LIST -aparser creates a PASV connection, and then tries to connect to the server by using TLS for the IP address, which fails because the server does not have any certificate for just the IP address. This causes Cyberduck to switch to the next parser. Cyberduck then gets confused in the control connection because the server still answers with the following to the previousLIST -aattempt:Cyberduck interprets this as the response to the next command by the next list parser (
CWD /whatever). Finally, the connection fails because the responses do not make sense to Cyberduck.To Reproduce
Steps to reproduce the behavior:
LIST -a. Ideally, the server responds with compatible output to the STAT for populated directories, but not for empty directories.Expected behavior
Work correctly.
Screenshots
Desktop (please complete the following information):
Log Files
Included above.
Additional context