Skip to content

Commit

Permalink
The test for additional switches to the LIST command
Browse files Browse the repository at this point in the history
must be performed before the path is joined. Otherwise,
the path will never be empty and the test will be skipped.
Fixes ENODEV error (FTP/550) on clients using "LIST -a".
  • Loading branch information
eku committed Nov 22, 2024
1 parent 0019195 commit 0b62bd1
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions source/ftpSession.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 0b62bd1

Please sign in to comment.