diff --git a/source/ftpSession.cpp b/source/ftpSession.cpp index 82fb927..6c1d6c8 100644 --- a/source/ftpSession.cpp +++ b/source/ftpSession.cpp @@ -1230,26 +1230,27 @@ void FtpSession::xferDir (char const *const args_, XferDirMode const mode_, bool if (std::strlen (args_) > 0) { // an argument was provided - auto const path = buildResolvedPath (m_cwd, args_); - if (path.empty ()) + + // work around broken clients that think LIST -a/-l is valid + if (workaround_) { - // work around broken clients that think LIST -a/-l is valid - if (workaround_) + if (args_[0] == '-' && (args_[1] == 'a' || args_[1] == 'l')) { - if (args_[0] == '-' && (args_[1] == 'a' || args_[1] == 'l')) + char const *args = &args_[2]; + if (*args == '\0' || *args == ' ') { - char const *args = &args_[2]; - if (*args == '\0' || *args == ' ') - { - if (*args == ' ') - ++args; + if (*args == ' ') + ++args; - xferDir (args, mode_, false); - return; - } + xferDir (args, mode_, false); + return; } } + } + auto const path = buildResolvedPath (m_cwd, args_); + if (path.empty ()) + { sendResponse ("550 %s\r\n", std::strerror (errno)); setState (State::COMMAND, true, true); return;