All pastes #948008 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-18 21:08 UTC
rendered paste body
Index: game/AccountMgr.cpp
===================================================================
--- game/AccountMgr.cpp	(revision 5449)
+++ game/AccountMgr.cpp	(working copy)
@@ -134,7 +134,9 @@
 {
     loginDatabase.escape_string(username);
 
-    QueryResult *result = loginDatabase.PQuery("SELECT id FROM account WHERE UPPER(username)=UPPER('%s')", username.c_str());
+    std::transform( username.begin(), username.end(), username.begin(), ::toupper );
+
+    QueryResult *result = loginDatabase.PQuery("SELECT id FROM account WHERE username = '%s'", username.c_str());
     if(!result)
         return 0;
     else
Index: game/WorldSocket.cpp
===================================================================
--- game/WorldSocket.cpp	(revision 5449)
+++ game/WorldSocket.cpp	(working copy)
@@ -253,11 +253,11 @@
     sLog.outDebug("Auth: client %u, unk2 %u, account %s, clientseed %u", BuiltNumberClient, unk2, account.c_str(), clientSeed);
 
     ///- Get the account information from the realmd database
-    std::string safe_account=account;                       // Duplicate, else will screw the SHA hash verification below
+    std::string safe_account = account;                       // Duplicate, else will screw the SHA hash verification below
     loginDatabase.escape_string(safe_account);
     //No SQL injection, username escaped.
     //                                                 0   1        2           3        4       5              6  7  8    9         10
-    QueryResult *result = loginDatabase.PQuery("SELECT id, gmlevel, sessionkey, last_ip, locked, sha_pass_hash, v, s, tbc, mutetime, locale FROM account WHERE UPPER(username) = '%s'", safe_account.c_str());
+    QueryResult *result = loginDatabase.PQuery("SELECT id, gmlevel, sessionkey, last_ip, locked, sha_pass_hash, v, s, tbc, mutetime, locale FROM account WHERE username = '%s'", safe_account.c_str());
 
     ///- Stop if the account is not found
     if ( !result )
@@ -295,7 +295,7 @@
     const char* sStr = s.AsHexStr();                        //Must be freed by OPENSSL_free()
     const char* vStr = v.AsHexStr();                        //Must be freed by OPENSSL_free()
     sLog.outDebug("SOCKET: (s,v) check s: %s v_old: %s v_new: %s", sStr, fields[6].GetString(), vStr );
-    loginDatabase.PExecute("UPDATE account SET v = '0', s = '0' WHERE UPPER(username) = '%s'", safe_account.c_str());
+    loginDatabase.PExecute("UPDATE account SET v = '0', s = '0' WHERE username = '%s'", safe_account.c_str());
     if ( strcmp(vStr,fields[6].GetString() ) )
     {
         packet.Initialize( SMSG_AUTH_RESPONSE, 1 );
@@ -416,7 +416,7 @@
     //No SQL injection, username escaped.
     std::string address = GetRemoteAddress();
     loginDatabase.escape_string(address);
-    loginDatabase.PExecute("UPDATE account SET last_ip = '%s' WHERE UPPER(username) = '%s'",address.c_str(), safe_account.c_str());
+    loginDatabase.PExecute("UPDATE account SET last_ip = '%s' WHERE username = '%s'",address.c_str(), safe_account.c_str());
 
     // do small delay (10ms) at accepting successful authed connection to prevent droping packets by client
     // don't must harm anyone (let login ~100 accounts in 1 sec ;) )
Index: mangosd/RASocket.cpp
===================================================================
--- mangosd/RASocket.cpp	(revision 5449)
+++ mangosd/RASocket.cpp	(working copy)
@@ -143,11 +143,14 @@
 
                     ///- Get the gmlevel and password from the account table
                     std::string login = szLogin;
+
+                    // No SQL injection (escaped login)
                     loginDatabase.escape_string(login);
-                    // No SQL injection (escaped login)
 
-                    QueryResult* result = loginDatabase.PQuery("SELECT gmlevel FROM account WHERE UPPER(username) = UPPER('%s')",login.c_str());
+                    std::transform( login.begin(), login.end(), login.begin(), ::toupper );
 
+                    QueryResult* result = loginDatabase.PQuery("SELECT gmlevel FROM account WHERE username = '%s'",login.c_str());
+
                     ///- If the user is not found, deny access
                     if(!result)
                     {
@@ -184,7 +187,10 @@
                     std::string pw = &buff[5];
                     loginDatabase.escape_string(login);
                     loginDatabase.escape_string(pw);
-                    QueryResult *check = loginDatabase.PQuery("SELECT 1 FROM account WHERE UPPER(username)=UPPER('%s') AND sha_pass_hash=SHA1(CONCAT(UPPER(username),':',UPPER('%s')))", login.c_str(), pw.c_str());
+
+                    std::transform( login.begin(), login.end(), login.begin(), ::toupper );
+
+                    QueryResult *check = loginDatabase.PQuery("SELECT 1 FROM account WHERE username = '%s' AND sha_pass_hash=SHA1(CONCAT(UPPER(username),':',UPPER('%s')))", login.c_str(), pw.c_str());
                     if(check)
                     {
                         delete check;
Index: realmd/AuthSocket.cpp
===================================================================
--- realmd/AuthSocket.cpp	(revision 5449)
+++ realmd/AuthSocket.cpp	(working copy)
@@ -312,7 +312,7 @@
     const char *v_hex, *s_hex;
     v_hex = v.AsHexStr();
     s_hex = s.AsHexStr();
-    dbRealmServer.PExecute("UPDATE account SET v = '%s', s = '%s' WHERE UPPER(username)= UPPER('%s')",v_hex,s_hex, _safelogin.c_str() );
+    dbRealmServer.PExecute("UPDATE account SET v = '%s', s = '%s' WHERE username= '%s'",v_hex,s_hex, _safelogin.c_str() );
     OPENSSL_free((void*)v_hex);
     OPENSSL_free((void*)s_hex);
 }
@@ -385,7 +385,7 @@
             ///- Get the account details from the account table
             // No SQL injection (escaped user name)
 
-            result = dbRealmServer.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel FROM account WHERE UPPER(username) = '%s'",_safelogin.c_str ());
+            result = dbRealmServer.PQuery("SELECT sha_pass_hash,id,locked,last_ip,gmlevel FROM account WHERE username = '%s'",_safelogin.c_str ());
             if( result )
             {
                 ///- If the IP is 'locked', check that the player comes indeed from the correct IP address
@@ -624,7 +624,7 @@
         ///- Update the sessionkey, last_ip and last login time in the account table for this account
         // No SQL injection (escaped user name) and IP address as received by socket
         const char* K_hex = K.AsHexStr();
-        dbRealmServer.PExecute("UPDATE account SET sessionkey = '%s', last_ip = '%s', last_login = NOW(), locale = '%u' WHERE UPPER(username) = '%s'", K_hex, GetRemoteAddress().c_str(),  _localization, _safelogin.c_str() );
+        dbRealmServer.PExecute("UPDATE account SET sessionkey = '%s', last_ip = '%s', last_login = NOW(), locale = '%u' WHERE username = '%s'", K_hex, GetRemoteAddress().c_str(),  _localization, _safelogin.c_str() );
         OPENSSL_free((void*)K_hex);
 
         ///- Finish SRP6 and send the final result to the client
@@ -664,7 +664,7 @@
     ///- Get the user id (else close the connection)
     // No SQL injection (escaped user name)
 
-    QueryResult *result = dbRealmServer.PQuery("SELECT id,sha_pass_hash FROM account WHERE UPPER(username) = '%s'",_safelogin.c_str());
+    QueryResult *result = dbRealmServer.PQuery("SELECT id,sha_pass_hash FROM account WHERE username = '%s'",_safelogin.c_str());
     if(!result)
     {
         sLog.outError("[ERROR] user %s tried to login and we cannot find him in the database.",_login.c_str());