aboutsummaryrefslogtreecommitdiffstats
path: root/src/vmime/net/imap/IMAPConnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vmime/net/imap/IMAPConnection.cpp')
-rw-r--r--src/vmime/net/imap/IMAPConnection.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/vmime/net/imap/IMAPConnection.cpp b/src/vmime/net/imap/IMAPConnection.cpp
index 5e6f6f8f..04705f6c 100644
--- a/src/vmime/net/imap/IMAPConnection.cpp
+++ b/src/vmime/net/imap/IMAPConnection.cpp
@@ -355,7 +355,26 @@ void IMAPConnection::authenticateSASL()
saslSession->init();
- send(true, "AUTHENTICATE " + mech->getName(), true);
+ std::ostringstream cmd;
+ cmd << "AUTHENTICATE " << mech->getName();
+
+ if (saslSession->getMechanism()->hasInitialResponse())
+ {
+ byte_t* initialResp = 0;
+ size_t initialRespLen = 0;
+
+ saslSession->evaluateChallenge(NULL, 0, &initialResp, &initialRespLen);
+
+ string encodedInitialResp(saslContext->encodeB64(initialResp, initialRespLen));
+ delete [] initialResp;
+
+ if (encodedInitialResp.empty())
+ cmd << " =";
+ else
+ cmd << " " << encodedInitialResp;
+ }
+
+ send(true, cmd.str(), true);
for (bool cont = true ; cont ; )
{