diff options
Diffstat (limited to 'src/server/shared')
| -rw-r--r-- | src/server/shared/Cryptography/WardenKeyGeneration.h | 73 | ||||
| -rwxr-xr-x | src/server/shared/Database/Implementation/CharacterDatabase.h | 2 | ||||
| -rwxr-xr-x | src/server/shared/Database/Implementation/LoginDatabase.cpp | 2 | ||||
| -rwxr-xr-x | src/server/shared/Database/MySQLConnection.h | 7 | ||||
| -rwxr-xr-x | src/server/shared/Database/QueryResult.cpp | 32 | ||||
| -rwxr-xr-x | src/server/shared/Database/QueryResult.h | 26 | ||||
| -rwxr-xr-x | src/server/shared/Logging/Log.cpp | 24 | ||||
| -rwxr-xr-x | src/server/shared/Logging/Log.h | 5 | ||||
| -rwxr-xr-x | src/server/shared/Threading/Callback.h | 2 | ||||
| -rwxr-xr-x | src/server/shared/Utilities/Util.cpp | 13 | ||||
| -rwxr-xr-x | src/server/shared/Utilities/Util.h | 1 |
11 files changed, 146 insertions, 41 deletions
diff --git a/src/server/shared/Cryptography/WardenKeyGeneration.h b/src/server/shared/Cryptography/WardenKeyGeneration.h new file mode 100644 index 00000000000..9b44ab1832e --- /dev/null +++ b/src/server/shared/Cryptography/WardenKeyGeneration.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/> + * Copyright (C) 2005-2011 MaNGOS <http://getmangos.com/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "SHA1.h" + +#ifndef _WARDEN_KEY_GENERATION_H +#define _WARDEN_KEY_GENERATION_H + +class SHA1Randx { +public: + SHA1Randx(uint8 *buff, uint32 size) { + uint32 taken = size/2; + + sh.Initialize(); + sh.UpdateData(buff,taken); + sh.Finalize(); + + memcpy(o1,sh.GetDigest(),20); + + sh.Initialize(); + sh.UpdateData(buff+taken,size-taken); + sh.Finalize(); + + memcpy(o2,sh.GetDigest(),20); + + memset(o0,0x00,20); + + fillUp(); + } + + void generate(uint8 *buf, uint32 sz) { + for(uint32 i=0;i<sz;i++) { + if(taken == 20) { + fillUp(); + } + + buf[i] = o0[taken]; + taken++; + } + } +private: + void fillUp() { + sh.Initialize(); + sh.UpdateData(o1,20); + sh.UpdateData(o0,20); + sh.UpdateData(o2,20); + sh.Finalize(); + + memcpy(o0,sh.GetDigest(),20); + + taken = 0; + } + SHA1Hash sh; + uint32 taken; + uint8 o0[20],o1[20],o2[20]; +}; + +#endif diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index c510f6d03a6..fa3654dc0c9 100755 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -353,7 +353,7 @@ enum CharacterDatabaseStatements CHAR_DEL_CHARACTER_SOCIAL, CHAR_UPD_CHARACTER_SOCIAL_NOTE, CHAR_UPD_CHARACTER_POSITION, - + CHAR_INS_LFG_DATA, CHAR_DEL_LFG_DATA, diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index 7e497c4437b..8ef8d3b48cf 100755 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -31,7 +31,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PREPARE_STATEMENT(LOGIN_INS_ACCOUNT_AUTO_BANNED, "INSERT INTO account_banned VALUES (?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity realmd', 'Failed login autoban', 1)", CONNECTION_ASYNC) PREPARE_STATEMENT(LOGIN_SEL_SESSIONKEY, "SELECT a.sessionkey, a.id, aa.gmlevel FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE username = ?", CONNECTION_SYNCH) PREPARE_STATEMENT(LOGIN_UPD_VS, "UPDATE account SET v = ?, s = ? WHERE username = ?", CONNECTION_ASYNC) - PREPARE_STATEMENT(LOGIN_UPD_LOGONPROOF, "UPDATE account SET sessionkey = ?, last_ip = ?, last_login = NOW(), locale = ?, failed_logins = 0 WHERE username = ?", CONNECTION_ASYNC) + PREPARE_STATEMENT(LOGIN_UPD_LOGONPROOF, "UPDATE account SET sessionkey = ?, last_ip = ?, last_login = NOW(), locale = ?, failed_logins = 0, os = ? WHERE username = ?", CONNECTION_ASYNC) PREPARE_STATEMENT(LOGIN_SEL_LOGONCHALLENGE, "SELECT a.sha_pass_hash, a.id, a.locked, a.last_ip, aa.gmlevel, a.v, a.s FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.username = ?", CONNECTION_SYNCH) PREPARE_STATEMENT(LOGIN_UPD_FAILEDLOGINS, "UPDATE account SET failed_logins = failed_logins + 1 WHERE username = ?", CONNECTION_ASYNC) PREPARE_STATEMENT(LOGIN_SEL_FAILEDLOGINS, "SELECT id, failed_logins FROM account WHERE username = ?", CONNECTION_SYNCH) diff --git a/src/server/shared/Database/MySQLConnection.h b/src/server/shared/Database/MySQLConnection.h index 46e14d81a5e..c05c4e62c96 100755 --- a/src/server/shared/Database/MySQLConnection.h +++ b/src/server/shared/Database/MySQLConnection.h @@ -62,13 +62,6 @@ struct MySQLConnectionInfo std::string port_or_socket; }; -struct PreparedStatementTable -{ - uint32 index; - const char* query; - ConnectionFlags type; -}; - typedef std::map<uint32 /*index*/, std::pair<const char* /*query*/, ConnectionFlags /*sync/async*/> > PreparedStatementMap; #define PREPARE_STATEMENT(a, b, c) m_queries[a] = std::make_pair(strdup(b), c); diff --git a/src/server/shared/Database/QueryResult.cpp b/src/server/shared/Database/QueryResult.cpp index dff055b8d3d..95034387089 100755 --- a/src/server/shared/Database/QueryResult.cpp +++ b/src/server/shared/Database/QueryResult.cpp @@ -20,13 +20,13 @@ #include "Log.h" ResultSet::ResultSet(MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount) : -m_rowCount(rowCount), -m_fieldCount(fieldCount), -m_result(result), -m_fields(fields) +_rowCount(rowCount), +_fieldCount(fieldCount), +_result(result), +_fields(fields) { - m_currentRow = new Field[m_fieldCount]; - ASSERT(m_currentRow); + _currentRow = new Field[_fieldCount]; + ASSERT(_currentRow); } PreparedResultSet::PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, uint64 rowCount, uint32 fieldCount) : @@ -150,18 +150,18 @@ bool ResultSet::NextRow() { MYSQL_ROW row; - if (!m_result) + if (!_result) return false; - row = mysql_fetch_row(m_result); + row = mysql_fetch_row(_result); if (!row) { CleanUp(); return false; } - for (uint32 i = 0; i < m_fieldCount; i++) - m_currentRow[i].SetStructuredValue(row[i], m_fields[i].type); + for (uint32 i = 0; i < _fieldCount; i++) + _currentRow[i].SetStructuredValue(row[i], _fields[i].type); return true; } @@ -196,16 +196,16 @@ bool PreparedResultSet::_NextRow() void ResultSet::CleanUp() { - if (m_currentRow) + if (_currentRow) { - delete [] m_currentRow; - m_currentRow = NULL; + delete [] _currentRow; + _currentRow = NULL; } - if (m_result) + if (_result) { - mysql_free_result(m_result); - m_result = NULL; + mysql_free_result(_result); + _result = NULL; } } diff --git a/src/server/shared/Database/QueryResult.h b/src/server/shared/Database/QueryResult.h index c165a9456f5..524532f30ec 100755 --- a/src/server/shared/Database/QueryResult.h +++ b/src/server/shared/Database/QueryResult.h @@ -33,29 +33,29 @@ class ResultSet { public: - ResultSet(MYSQL_RES *result, MYSQL_FIELD *fields, uint64 rowCount, uint32 fieldCount); + ResultSet(MYSQL_RES* result, MYSQL_FIELD* fields, uint64 rowCount, uint32 fieldCount); ~ResultSet(); bool NextRow(); - uint64 GetRowCount() const { return m_rowCount; } - uint32 GetFieldCount() const { return m_fieldCount; } + uint64 GetRowCount() const { return _rowCount; } + uint32 GetFieldCount() const { return _fieldCount; } - Field* Fetch() const { return m_currentRow; } + Field* Fetch() const { return _currentRow; } const Field & operator [] (uint32 index) const { - ASSERT(index < m_fieldCount); - return m_currentRow[index]; + ASSERT(index < _fieldCount); + return _currentRow[index]; } protected: - Field* m_currentRow; - uint64 m_rowCount; - uint32 m_fieldCount; + uint64 _rowCount; + Field* _currentRow; + uint32 _fieldCount; private: void CleanUp(); - MYSQL_RES *m_result; - MYSQL_FIELD *m_fields; + MYSQL_RES* _result; + MYSQL_FIELD* _fields; }; typedef ACE_Refcounted_Auto_Ptr<ResultSet, ACE_Null_Mutex> QueryResult; @@ -63,7 +63,7 @@ typedef ACE_Refcounted_Auto_Ptr<ResultSet, ACE_Null_Mutex> QueryResult; class PreparedResultSet { public: - PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES *result, uint64 rowCount, uint32 fieldCount); + PreparedResultSet(MYSQL_STMT* stmt, MYSQL_RES* result, uint64 rowCount, uint32 fieldCount); ~PreparedResultSet(); bool NextRow(); @@ -84,9 +84,9 @@ class PreparedResultSet } protected: + std::vector<Field*> m_rows; uint64 m_rowCount; uint64 m_rowPosition; - std::vector<Field*> m_rows; uint32 m_fieldCount; private: diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index e04225a94e1..b583d742748 100755 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -29,7 +29,7 @@ extern LoginDatabaseWorkerPool LoginDatabase; Log::Log() : raLogfile(NULL), logfile(NULL), gmLogfile(NULL), charLogfile(NULL), - dberLogfile(NULL), chatLogfile(NULL), arenaLogFile(NULL), sqlLogFile(NULL), sqlDevLogFile(NULL), + dberLogfile(NULL), chatLogfile(NULL), arenaLogFile(NULL), sqlLogFile(NULL), sqlDevLogFile(NULL), wardenLogFile(NULL), m_gmlog_per_account(false), m_enableLogDBLater(false), m_enableLogDB(false), m_colored(false) { @@ -73,6 +73,10 @@ Log::~Log() if (sqlDevLogFile != NULL) fclose(sqlDevLogFile); sqlDevLogFile = NULL; + + if (wardenLogFile != NULL) + fclose(wardenLogFile); + wardenLogFile = NULL; } void Log::SetLogLevel(char *Level) @@ -166,6 +170,7 @@ void Log::Initialize() arenaLogFile = openLogFile("ArenaLogFile", NULL, "a"); sqlLogFile = openLogFile("SQLDriverLogFile", NULL, "a"); sqlDevLogFile = openLogFile("SQLDeveloperLogFile", NULL, "a"); + wardenLogFile = openLogFile("Warden.LogFile",NULL,"a"); // Main log file settings m_logLevel = ConfigMgr::GetIntDefault("LogLevel", LOGL_NORMAL); @@ -1062,3 +1067,20 @@ void Log::outErrorST(const char * str, ...) ACE_Stack_Trace st; outError("%s [Stacktrace: %s]", nnew_str, st.c_str()); } + +void Log::outWarden(const char * str, ...) +{ + if (!str) + return; + + if (wardenLogFile) + { + outTimestamp(wardenLogFile); + va_list ap; + va_start(ap, str); + vfprintf(wardenLogFile, str, ap); + fprintf(wardenLogFile, "\n" ); + fflush(wardenLogFile); + va_end(ap); + } +} diff --git a/src/server/shared/Logging/Log.h b/src/server/shared/Logging/Log.h index 0489b84f7fe..cbaa2d80451 100755 --- a/src/server/shared/Logging/Log.h +++ b/src/server/shared/Logging/Log.h @@ -50,7 +50,8 @@ enum DebugLogFilters LOG_FILTER_LOOT = 0x00100000, // Loot related LOG_FILTER_GUILD = 0x00200000, // Guild related LOG_FILTER_TRANSPORTS = 0x00400000, // Transport related - LOG_FILTER_OPCODES = 0x00800000, // OpCodes + LOG_FILTER_WARDEN = 0x00800000, // Warden related + LOG_FILTER_OPCODES = 0x01000000, // OpCodes }; enum LogTypes @@ -137,6 +138,7 @@ class Log void outChat( const char * str, ... ) ATTR_PRINTF(2, 3); void outArena( const char * str, ... ) ATTR_PRINTF(2, 3); void outSQLDriver( const char* str, ... ) ATTR_PRINTF(2, 3); + void outWarden( const char * str, ... ) ATTR_PRINTF(2, 3); void outCharDump( const char * str, uint32 account_id, uint32 guid, const char * name ); void outOpCode(uint32 op, const char * name, bool smsg = true); @@ -170,6 +172,7 @@ class Log FILE* arenaLogFile; FILE* sqlLogFile; FILE* sqlDevLogFile; + FILE* wardenLogFile; // cache values for after initilization use (like gm log per account case) std::string m_logsDir; diff --git a/src/server/shared/Threading/Callback.h b/src/server/shared/Threading/Callback.h index fd7a1130fb4..3e1e7ac692f 100755 --- a/src/server/shared/Threading/Callback.h +++ b/src/server/shared/Threading/Callback.h @@ -96,7 +96,7 @@ class QueryCallback { return _stage; } - + //! Resets all underlying variables (param, result and stage) void Reset() { diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp index 6ae43bc6840..52ce74be8f8 100755 --- a/src/server/shared/Utilities/Util.cpp +++ b/src/server/shared/Utilities/Util.cpp @@ -16,6 +16,7 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <iostream> #include "Util.h" #include "utf8.h" #ifdef USE_SFMT_FOR_RNG @@ -529,3 +530,15 @@ void hexEncodeByteArray(uint8* bytes, uint32 arrayLen, std::string& result) result = ss.str(); } +std::string ByteArrayToHexStr(uint8* bytes, uint32 length) +{ + std::ostringstream ss; + for (uint32 i = 0; i < length; ++i) + { + char buffer[4]; + sprintf(buffer, "%02X ", bytes[i]); + ss << buffer; + } + + return ss.str(); +} diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index 684b26eea63..4c2c1936993 100755 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -378,6 +378,7 @@ bool IsIPAddress(char const* ipaddress); uint32 CreatePIDFile(const std::string& filename); void hexEncodeByteArray(uint8* bytes, uint32 arrayLen, std::string& result); +std::string ByteArrayToHexStr(uint8* bytes, uint32 length); #endif //handler for operations on large flags |
