diff options
Diffstat (limited to 'src/server/authserver/Server')
| -rwxr-xr-x | src/server/authserver/Server/AuthSocket.cpp | 18 | ||||
| -rwxr-xr-x | src/server/authserver/Server/AuthSocket.h | 1 | ||||
| -rwxr-xr-x | src/server/authserver/Server/RealmSocket.cpp | 2 | ||||
| -rwxr-xr-x | src/server/authserver/Server/RealmSocket.h | 3 |
4 files changed, 21 insertions, 3 deletions
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp index e6da5eeb996..2698c3e30e1 100755 --- a/src/server/authserver/Server/AuthSocket.cpp +++ b/src/server/authserver/Server/AuthSocket.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <algorithm> #include <openssl/md5.h> #include "Common.h" @@ -342,6 +343,13 @@ bool AuthSocket::_HandleLogonChallenge() _login = (const char*)ch->I; _build = ch->build; + _os = (const char*)ch->os; + + if (_os.size() > 4) + return false; + + // Restore string order as its byte order is reversed + std::reverse(_os.begin(), _os.end()); pkt << uint8(AUTH_LOGON_CHALLENGE); pkt << uint8(0x00); @@ -596,7 +604,8 @@ bool AuthSocket::_HandleLogonProof() stmt->setString(0, K_hex); stmt->setString(1, socket().getRemoteAddress().c_str()); stmt->setUInt32(2, GetLocaleByName(_localizationName)); - stmt->setString(3, _login); + stmt->setString(3, _os); + stmt->setString(4, _login); LoginDatabase.Execute(stmt); OPENSSL_free((void*)K_hex); @@ -722,6 +731,13 @@ bool AuthSocket::_HandleReconnectChallenge() // Reinitialize build, expansion and the account securitylevel _build = ch->build; + _os = (const char*)ch->os; + + if (_os.size() > 4) + return false; + + // Restore string order as its byte order is reversed + std::reverse(_os.begin(), _os.end()); Field* fields = result->Fetch(); uint8 secLevel = fields[2].GetUInt8(); diff --git a/src/server/authserver/Server/AuthSocket.h b/src/server/authserver/Server/AuthSocket.h index 116412e2315..0b04c8d015d 100755 --- a/src/server/authserver/Server/AuthSocket.h +++ b/src/server/authserver/Server/AuthSocket.h @@ -81,6 +81,7 @@ private: // Since GetLocaleByName() is _NOT_ bijective, we have to store the locale as a string. Otherwise we can't differ // between enUS and enGB, which is important for the patch system std::string _localizationName; + std::string _os; uint16 _build; AccountTypes _accountSecurityLevel; }; diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp index 72c36fc6646..e839457d1c9 100755 --- a/src/server/authserver/Server/RealmSocket.cpp +++ b/src/server/authserver/Server/RealmSocket.cpp @@ -95,7 +95,7 @@ const std::string& RealmSocket::getRemoteAddress(void) const return _remoteAddress; } -const uint16 RealmSocket::getRemotePort(void) const +uint16 RealmSocket::getRemotePort(void) const { return _remotePort; } diff --git a/src/server/authserver/Server/RealmSocket.h b/src/server/authserver/Server/RealmSocket.h index 9682b5e4559..c03a0e3ad1e 100755 --- a/src/server/authserver/Server/RealmSocket.h +++ b/src/server/authserver/Server/RealmSocket.h @@ -24,6 +24,7 @@ #include <ace/SOCK_Stream.h> #include <ace/Message_Block.h> #include <ace/Basic_Types.h> +#include "Common.h" class RealmSocket : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> { @@ -54,7 +55,7 @@ public: const std::string& getRemoteAddress(void) const; - const uint16 getRemotePort(void) const; + uint16 getRemotePort(void) const; virtual int open(void *); |
