From e801eac8847180f47572d59f27853e4b574c82f0 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Tue, 24 Apr 2007 09:06:41 +0000 Subject: Allow more than one mechanism after AUTH=. --- src/net/smtp/SMTPTransport.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp index 1233b0b7..672dac9e 100644 --- a/src/net/smtp/SMTPTransport.cpp +++ b/src/net/smtp/SMTPTransport.cpp @@ -223,6 +223,7 @@ void SMTPTransport::helo() m_extensions.clear(); // Get supported extensions from SMTP response + // One extension per line, format is: EXT PARAM1 PARAM2... for (int i = 1, n = resp->getLineCount() ; i < n ; ++i) { const string line = resp->getLineAt(i).getText(); @@ -231,22 +232,20 @@ void SMTPTransport::helo() string ext; iss >> ext; - // Special case: some servers send "AUTH=LOGIN" - if (ext.length() == 10 && utility::stringUtils::toUpper(ext) == "AUTH=LOGIN") + std::vector params; + string param; + + // Special case: some servers send "AUTH=MECH [MECH MECH...]" + if (ext.length() >= 5 && utility::stringUtils::toUpper(ext.substr(0, 5)) == "AUTH=") { - m_extensions["AUTH"].push_back("LOGIN"); + params.push_back(utility::stringUtils::toUpper(ext.substr(5))); + ext = "AUTH"; } - // Default case: EXT PARAM1 PARAM2... - else - { - std::vector params; - string param; - while (iss >> param) - params.push_back(utility::stringUtils::toUpper(param)); + while (iss >> param) + params.push_back(utility::stringUtils::toUpper(param)); - m_extensions[ext] = params; - } + m_extensions[ext] = params; } } } -- cgit v1.2.3