diff options
Diffstat (limited to 'src/vmime/net/imap/IMAPConnection.cpp')
-rw-r--r-- | src/vmime/net/imap/IMAPConnection.cpp | 21 |
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 ; ) { |