From 88659e69ceea5483be97862a26107cfa05ccec84 Mon Sep 17 00:00:00 2001 From: lotodore Date: Tue, 13 Oct 2009 21:52:10 +0000 Subject: [PATCH] More gsasl changes. --- src/net/common/clientstate.cpp | 2 +- src/net/common/serverlobbythread.cpp | 10 ++++++---- src/net/common/sessiondata.cpp | 29 ++++++++++++++++++++++------ src/net/sessiondata.h | 4 +++- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/net/common/clientstate.cpp b/src/net/common/clientstate.cpp index 8c54abaf..9947429e 100644 --- a/src/net/common/clientstate.cpp +++ b/src/net/common/clientstate.cpp @@ -678,7 +678,7 @@ ClientStateStartSession::Enter(boost::shared_ptr client) AuthenticatedLogin_t *authLogin = &netInit->login.choice.authenticatedLogin; // TODO boost::shared_ptr tmpSession = context.GetSessionData(); - tmpSession->CreateAuthSession(client->GetAuthContext(), false, context.GetPlayerName(), context.GetPassword()); + tmpSession->CreateClientAuthSession(client->GetAuthContext(), context.GetPlayerName(), context.GetPassword()); string outUserData; tmpSession->AuthStep(1, "", outUserData); OCTET_STRING_fromBuf(&authLogin->clientUserData, diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 77b2aad7..dea1f20d 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -905,7 +905,6 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage } string playerName; - string authData; MD5Buf avatarMD5; bool guestUser = false; if (initMessage.login.present == login_PR_anonymousLogin) @@ -915,12 +914,15 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage } else if (initMessage.login.present == login_PR_authenticatedLogin) { + string inAuthData; + string outRequestData; const AuthenticatedLogin_t *authLogin = &initMessage.login.choice.authenticatedLogin; - authData = string((const char *)authLogin->clientUserData.buf, authLogin->clientUserData.size); + inAuthData = string((const char *)authLogin->clientUserData.buf, authLogin->clientUserData.size); if (authLogin->avatar) memcpy(avatarMD5.data, authLogin->avatar->buf, MD5_DATA_SIZE); - // TODO - playerName = "testuser"; + session.sessionData->CreateServerAuthSession(m_authContext); + session.sessionData->AuthStep(1, inAuthData, outRequestData); + playerName = session.sessionData->AuthGetUser(); } else SessionError(session, ERR_NET_INVALID_PASSWORD); diff --git a/src/net/common/sessiondata.cpp b/src/net/common/sessiondata.cpp index 24201b93..336fe878 100644 --- a/src/net/common/sessiondata.cpp +++ b/src/net/common/sessiondata.cpp @@ -76,17 +76,24 @@ SessionData::GetAsioSocket() return m_socket; } -bool -SessionData::CreateAuthSession(Gsasl *context, bool server, const string &userName, const string &password) +bool CreateServerAuthSession(Gsasl *context) { bool retVal = false; boost::mutex::scoped_lock lock(m_dataMutex); InternalClearAuthSession(); int errorCode; - if (server) - errorCode = gsasl_server_start(context, "SCRAM-SHA-1", &m_authSession); - else - errorCode = gsasl_client_start(context, "SCRAM-SHA-1", &m_authSession); + errorCode = gsasl_server_start(context, "SCRAM-SHA-1", &m_authSession); + return errorCode == GSASL_OK; +} + +bool +SessionData::CreateClientAuthSession(Gsasl *context, const string &userName, const string &password) +{ + bool retVal = false; + boost::mutex::scoped_lock lock(m_dataMutex); + InternalClearAuthSession(); + int errorCode; + errorCode = gsasl_client_start(context, "SCRAM-SHA-1", &m_authSession); if (errorCode == GSASL_OK) { gsasl_property_set(m_authSession, GSASL_AUTHID, userName.c_str()); @@ -123,6 +130,16 @@ SessionData::AuthStep(int stepNum, const std::string &inData, std::string &outDa return retVal; } +string +SessionData::AuthGetUser() +{ + string retStr; + if (m_authSession) + { + retStr = gsasl_property_fast(m_authSession, GSASL_AUTHID); + } +} + void SessionData::InternalClearAuthSession() { diff --git a/src/net/sessiondata.h b/src/net/sessiondata.h index a331b499..65fe0a67 100644 --- a/src/net/sessiondata.h +++ b/src/net/sessiondata.h @@ -57,8 +57,10 @@ public: boost::shared_ptr GetAsioSocket(); - bool CreateAuthSession(Gsasl *context, bool server, const std::string &userName, const std::string &password); + bool CreateServerAuthSession(Gsasl *context); + bool CreateClientAuthSession(Gsasl *context, const std::string &userName, const std::string &password); bool AuthStep(int stepNum, const std::string &inData, std::string &outData); + string AuthGetUser(); void SetReadyFlag(); void ResetReadyFlag();