From a117dd48bea3e42d9d6d2a58c87d0a04edad8678 Mon Sep 17 00:00:00 2001 From: Daniel De Graaf Date: Sat, 21 Aug 2010 12:56:04 -0400 Subject: More config logging fixups --- src/modules/m_sqloper.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/modules/m_sqloper.cpp') 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; -- cgit v1.3.1-10-gc9f91