diff options
author | Attila Molnar <attilamolnar@hush.com> | 2015-12-07 10:11:09 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2015-12-07 10:11:09 +0100 |
commit | 6bc4db5e922dd49a46684c9b4e417cac36a71942 (patch) | |
tree | 985e110a44a6b504589c0fadbc69b8dd494e5b93 | |
parent | 5b138fa099e1c1557362fe72a4b146a0750dde9c (diff) |
Do not insert FakeUsers into UserManager::uuidlist
Inserting them causes FindUUID() and FindNick() to return server users which is not what modules want
-rw-r--r-- | src/modules/m_spanningtree/treeserver.cpp | 4 | ||||
-rw-r--r-- | src/users.cpp | 11 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp index 0750e755c..48f16c9df 100644 --- a/src/modules/m_spanningtree/treeserver.cpp +++ b/src/modules/m_spanningtree/treeserver.cpp @@ -285,10 +285,6 @@ TreeServer::~TreeServer() void TreeServer::RemoveHash() { - // XXX: Erase server from UserManager::uuidlist now, to allow sid reuse in the current main loop - // iteration, before the cull list is applied - ServerInstance->Users->uuidlist.erase(sid); - Utils->sidlist.erase(sid); Utils->serverlist.erase(GetName()); } diff --git a/src/users.cpp b/src/users.cpp index 93fd8d065..fd4afbcef 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -74,8 +74,12 @@ User::User(const std::string& uid, Server* srv, int type) ServerInstance->Logs->Log("USERS", LOG_DEBUG, "New UUID for user: %s", uuid.c_str()); - if (!ServerInstance->Users->uuidlist.insert(std::make_pair(uuid, this)).second) - throw CoreException("Duplicate UUID "+std::string(uuid)+" in User constructor"); + // Do not insert FakeUsers into the uuidlist so FindUUID() won't return them which is the desired behavior + if (type != USERTYPE_SERVER) + { + if (!ServerInstance->Users.uuidlist.insert(std::make_pair(uuid, this)).second) + throw CoreException("Duplicate UUID in User constructor: " + uuid); + } } LocalUser::LocalUser(int myfd, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* servaddr) @@ -312,8 +316,7 @@ CullResult FakeUser::cull() { // Fake users don't quit, they just get culled. quitting = true; - // Fake users are not inserted into UserManager::clientlist, they're only in the uuidlist - // and they are removed from there by the linking mod when the server splits + // Fake users are not inserted into UserManager::clientlist or uuidlist, so we don't need to modify those here return User::cull(); } |