aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/Cryptography/WardenKeyGeneration.h73
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.h2
-rwxr-xr-xsrc/server/shared/Database/Implementation/LoginDatabase.cpp2
-rwxr-xr-xsrc/server/shared/Database/MySQLConnection.h7
-rwxr-xr-xsrc/server/shared/Database/QueryResult.cpp32
-rwxr-xr-xsrc/server/shared/Database/QueryResult.h26
-rwxr-xr-xsrc/server/shared/Logging/Log.cpp24
-rwxr-xr-xsrc/server/shared/Logging/Log.h5
-rwxr-xr-xsrc/server/shared/Threading/Callback.h2
-rwxr-xr-xsrc/server/shared/Utilities/Util.cpp13
-rwxr-xr-xsrc/server/shared/Utilities/Util.h1
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