From fcde03a03670caa76b0933dbf3e7a1e95bb2b3be Mon Sep 17 00:00:00 2001 From: KingPin Date: Sun, 19 Oct 2008 21:08:34 -0500 Subject: [svn] * Fixed compile from r78 * Fixed: not apply healling bonus to spell 40972 heal amount. - Source Mangos * Item 30627 hidden cooldown - Source Mangos * Fixed Trinityrealm autopatching system - Source Arrai * Add support for autoconf 2.6.2 and newer - Source Derex Some decent sized changes, please test before deploying - KP --HG-- branch : trunk --- src/trinityrealm/AuthSocket.cpp | 267 ++++++++++++++++++++-------------------- 1 file changed, 136 insertions(+), 131 deletions(-) (limited to 'src/trinityrealm/AuthSocket.cpp') diff --git a/src/trinityrealm/AuthSocket.cpp b/src/trinityrealm/AuthSocket.cpp index b06ac605e4f..4be14a52d30 100644 --- a/src/trinityrealm/AuthSocket.cpp +++ b/src/trinityrealm/AuthSocket.cpp @@ -137,7 +137,7 @@ typedef struct XFER_INIT { uint8 cmd; // XFER_INITIATE uint8 fileNameLen; // strlen(fileName); - uint8 fileName[1]; // fileName[fileNameLen] + uint8 fileName[5]; // fileName[fileNameLen] uint64 file_size; // file size (bytes) uint8 md5[MD5_DIGEST_LENGTH]; // MD5 }XFER_INIT; @@ -217,7 +217,7 @@ AuthSocket::AuthSocket(ISocketHandler &h) : TcpSocket(h) N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7"); g.SetDword(7); _authed = false; - pPatch=NULL; + pPatch = NULL; _accountSecurityLevel = SEC_PLAYER; } @@ -225,6 +225,7 @@ AuthSocket::AuthSocket(ISocketHandler &h) : TcpSocket(h) /// Close patch file descriptor before leaving AuthSocket::~AuthSocket() { + ZThread::Guard g(patcherLock); if(pPatch) fclose(pPatch); } @@ -360,6 +361,7 @@ bool AuthSocket::_HandleLogonChallenge() ByteBuffer pkt; _login = (const char*)ch->I; + _build = ch->build; ///- Normalize account name //utf8ToUpperOnlyLatin(_login); -- client already send account in expected form @@ -369,154 +371,169 @@ bool AuthSocket::_HandleLogonChallenge() _safelogin=_login; dbRealmServer.escape_string(_safelogin); - ///- Check if the client has one of the expected version numbers - bool valid_version=false; - int accepted_versions[]=EXPECTED_TRINITY_CLIENT_BUILD; - for(int i=0;accepted_versions[i];i++) - if(ch->build==accepted_versions[i]) + pkt << (uint8) AUTH_LOGON_CHALLENGE; + pkt << (uint8) 0x00; + + ///- Verify that this IP is not in the ip_banned table + // No SQL injection possible (paste the IP address as passed by the socket) + dbRealmServer.Execute("DELETE FROM ip_banned WHERE unbandate<=UNIX_TIMESTAMP() AND unbandate<>bandate"); + + std::string address = GetRemoteAddress(); + dbRealmServer.escape_string(address); + QueryResult *result = dbRealmServer.PQuery( "SELECT * FROM ip_banned WHERE ip = '%s'",address.c_str()); + if(result) { - valid_version=true; - break; + pkt << (uint8)REALM_AUTH_ACCOUNT_BANNED; + sLog.outBasic("[AuthChallenge] Banned ip %s tries to login!",GetRemoteAddress().c_str ()); + delete result; } - - ///