Skip to content

Commit cc660ce

Browse files
committed
Fixed server crash introduced in 45783b (Added password append option to enable http login from any ip: 'authserial <name> httppass')
1 parent 7460cc8 commit cc660ce

File tree

3 files changed

+46
-8
lines changed

3 files changed

+46
-8
lines changed

Server/mods/deathmatch/logic/CAccountManager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,11 +268,11 @@ void CAccountManager::Save ( CAccount* pAccount, bool bCheckForErrors )
268268

269269
if (bCheckForErrors)
270270
{
271-
m_pDatabaseManager->QueryWithCallbackf(m_hDbConnection, StaticDbCallback, this, strQuery);
271+
m_pDatabaseManager->QueryWithCallback(m_hDbConnection, StaticDbCallback, this, strQuery);
272272
}
273273
else
274274
{
275-
m_pDatabaseManager->Execf(m_hDbConnection, strQuery);
275+
m_pDatabaseManager->Exec(m_hDbConnection, strQuery);
276276
}
277277

278278
SaveAccountSerialUsage( pAccount );

Server/mods/deathmatch/logic/CDatabaseManager.cpp

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,19 @@ class CDatabaseManagerImpl : public CDatabaseManager
3434
virtual void DoPulse ( void );
3535
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername, const SString& strPassword, const SString& strOptions );
3636
virtual bool Disconnect ( SConnectionHandle hConnection );
37-
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
37+
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
3838
virtual SString PrepareStringf ( SConnectionHandle hConnection, const char* szQuery, ... );
39-
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
39+
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
4040
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... );
41-
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
41+
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
4242
virtual CDbJobData* QueryStartf ( SConnectionHandle hConnection, const char* szQuery, ... );
4343
virtual bool QueryPoll ( CDbJobData* pJobData, uint ulTimeout );
4444
virtual bool QueryFree ( CDbJobData* pJobData );
4545
virtual CDbJobData* GetQueryFromId ( SDbJobId id );
4646
virtual const SString& GetLastErrorMessage ( void ) { return m_strLastErrorMessage; }
4747
virtual bool IsLastErrorSuppressed ( void ) { return m_bLastErrorSuppressed; }
4848
virtual bool QueryWithResultf ( SConnectionHandle hConnection, CRegistryResult* pResult, const char* szQuery, ... );
49+
virtual bool QueryWithCallback ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void* pCallbackContext, const SString& strQuery, CLuaArguments* pArgs = nullptr );
4950
virtual bool QueryWithCallbackf ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void* pCallbackContext, const char* szQuery, ... );
5051
virtual void SetLogLevel ( EJobLogLevelType logLevel, const SString& strLogFilename );
5152

@@ -431,6 +432,42 @@ bool CDatabaseManagerImpl::QueryWithResultf ( SConnectionHandle hConnection, CRe
431432
}
432433

433434

435+
///////////////////////////////////////////////////////////////
436+
//
437+
// CDatabaseManagerImpl::QueryWithCallback
438+
//
439+
// Start a query and direct the result through a callback
440+
//
441+
///////////////////////////////////////////////////////////////
442+
bool CDatabaseManagerImpl::QueryWithCallback ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void* pCallbackContext, const SString& strQuery, CLuaArguments* pArgs )
443+
{
444+
ClearLastErrorMessage ();
445+
446+
// Check connection
447+
if ( !MapContains ( m_ConnectionTypeMap, hConnection ) )
448+
{
449+
SetLastErrorMessage ( "Invalid connection" );
450+
return false;
451+
}
452+
453+
// Insert arguments with correct escapement
454+
SString strEscapedQuery = InsertQueryArguments ( hConnection, strQuery, pArgs );
455+
456+
// Start query
457+
CDbJobData* pJobData = m_JobQueue->AddCommand ( EJobCommand::QUERY, hConnection, strEscapedQuery );
458+
if ( !pJobData )
459+
{
460+
SetLastErrorMessage( "Invalid connection" );
461+
return false;
462+
}
463+
464+
// Set callback vars
465+
pJobData->SetCallback ( pfnDbResult, pCallbackContext );
466+
467+
return true;
468+
}
469+
470+
434471
///////////////////////////////////////////////////////////////
435472
//
436473
// CDatabaseManagerImpl::QueryWithCallbackf

Server/mods/deathmatch/logic/CDatabaseManager.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,18 +150,19 @@ class CDatabaseManager
150150
virtual void DoPulse ( void ) = 0;
151151
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername = "", const SString& strPassword = "", const SString& strOptions = "" ) = 0;
152152
virtual bool Disconnect ( SConnectionHandle hConnection ) = 0;
153-
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
153+
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr ) = 0;
154154
virtual SString PrepareStringf ( SConnectionHandle hConnection, const char* szQuery, ... ) = 0;
155-
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
155+
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr ) = 0;
156156
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... ) = 0;
157-
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
157+
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr ) = 0;
158158
virtual CDbJobData* QueryStartf ( SConnectionHandle hConnection, const char* szQuery, ... ) = 0;
159159
virtual bool QueryPoll ( CDbJobData* pJobData, uint ulTimeout ) = 0;
160160
virtual bool QueryFree ( CDbJobData* pJobData ) = 0;
161161
virtual CDbJobData* GetQueryFromId ( SDbJobId id ) = 0;
162162
virtual const SString& GetLastErrorMessage ( void ) = 0;
163163
virtual bool IsLastErrorSuppressed ( void ) = 0;
164164
virtual bool QueryWithResultf ( SConnectionHandle hConnection, CRegistryResult* pResult, const char* szQuery, ... ) = 0;
165+
virtual bool QueryWithCallback ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void* pCallbackContext, const SString& strQuery, CLuaArguments* pArgs = nullptr ) = 0;
165166
virtual bool QueryWithCallbackf ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void* pCallbackContext, const char* szQuery, ... ) = 0;
166167
virtual void SetLogLevel ( EJobLogLevelType logLevel, const SString& strLogFilename ) = 0;
167168
};

0 commit comments

Comments
 (0)