#include "__IMAP_LOGIN.h" #include "IMAPArgs.h" #include "IMAPServer.h" namespace mail { int __IMAP_LOGIN::processCommand(coreutils::ZString &request, IMAPSession &session, IMAPServer &server) { coreutils::ZString userArg = IMAPArgs::nextArgument(request); coreutils::ZString passArg = IMAPArgs::nextArgument(request); if (userArg.getLength() == 0 || passArg.getLength() == 0) { session.out << session.tag << " BAD LOGIN requires a userid and password" << CRLF; return 1; } std::string userName = IMAPArgs::unwrap(userArg); std::string password = IMAPArgs::unwrap(passArg); coreutils::ZString userNameZ(userName); coreutils::ZString passwordZ(password); // checkPassword()/getMailBoxPath() (MailFileSystem) expect a full // "user@domain" address, the same convention SMTP AUTH LOGIN // already uses for session.userName. if (server.mailFileSystem.checkPassword(userNameZ, passwordZ)) { session.userName = userName; session.state = IMAPSession::AUTHENTICATED; session.out << session.tag << " OK LOGIN completed" << CRLF; } else { session.out << session.tag << " NO LOGIN failed" << CRLF; } return 1; } }