summaryrefslogtreecommitdiffstats
path: root/src/modules/m_sqloper.cpp
diff options
context:
space:
mode:
authorGravatar Daniel De Graaf2010-08-21 12:56:04 -0400
committerGravatar Daniel De Graaf2010-08-21 12:56:04 -0400
commita117dd48bea3e42d9d6d2a58c87d0a04edad8678 (patch)
tree57e0bed65e1d4f2622fae93dad9ec2b015ee8a30 /src/modules/m_sqloper.cpp
parentMove spanningtree config to <spanningtree> from various other places (diff)
downloadinspircd++-a117dd48bea3e42d9d6d2a58c87d0a04edad8678.tar.gz
inspircd++-a117dd48bea3e42d9d6d2a58c87d0a04edad8678.tar.bz2
inspircd++-a117dd48bea3e42d9d6d2a58c87d0a04edad8678.zip
More config logging fixups
Diffstat (limited to 'src/modules/m_sqloper.cpp')
-rw-r--r--src/modules/m_sqloper.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/modules/m_sqloper.cpp b/src/modules/m_sqloper.cpp
index 86915af7b..6ea1fe398 100644
--- a/src/modules/m_sqloper.cpp
+++ b/src/modules/m_sqloper.cpp
@@ -44,8 +44,9 @@ class OpMeQuery : public SQLQuery
{
ServerInstance->Logs->Log("m_sqloper",DEBUG, "SQLOPER: result for %s", uid.c_str());
User* user = ServerInstance->FindNick(uid);
- if (!user)
+ if (!user || !IS_LOCAL(user))
return;
+ user->frozen = 0;
// multiple rows may exist
SQLEntries row;
@@ -76,21 +77,21 @@ class OpMeQuery : public SQLQuery
}
ServerInstance->Logs->Log("m_sqloper",DEBUG, "SQLOPER: no matches for %s (checked %d rows)", uid.c_str(), res.Rows());
// nobody succeeded... fall back to OPER
- fallback();
+ fallback(user);
}
void OnError(SQLerror& error)
{
ServerInstance->Logs->Log("m_sqloper",DEFAULT, "SQLOPER: query failed (%s)", error.Str());
- fallback();
- }
-
- void fallback()
- {
User* user = ServerInstance->FindNick(uid);
- if (!user)
+ if (!user || !IS_LOCAL(user))
return;
+ user->frozen = 0;
+ fallback(user);
+ }
+ void fallback(User* user)
+ {
Command* oper_command = ServerInstance->Parser->GetHandler("OPER");
if (oper_command)
@@ -160,6 +161,9 @@ public:
{
if (SQL)
{
+ // freeze the user's recvq while we wait for SQL
+ // this ensures that the result of the /OPER is returned in order
+ user->frozen = 1;
LookupOper(user, parameters[0], parameters[1]);
/* Query is in progress, it will re-invoke OPER if needed */
return MOD_RES_DENY;