]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
m_spanningtree Add source server parameter to CommandFJOIN::Builder constructor
[user/henk/code/inspircd.git] / src / users.cpp
index 8d22d166ced3500ccfdc7c57ebe367bb5c9cabbb..9dcbcae0c9fbcc704f49cc9d1d52f5fd012ef60f 100644 (file)
@@ -97,8 +97,6 @@ LocalUser::LocalUser(int myfd, irc::sockets::sockaddrs* client, irc::sockets::so
 
 User::~User()
 {
-       if (ServerInstance->FindUUID(uuid))
-               ServerInstance->Logs->Log("USERS", LOG_DEFAULT, "User destructor for %s called without cull", uuid.c_str());
 }
 
 const std::string& User::MakeHost()
@@ -340,7 +338,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
-       ServerInstance->Users->uuidlist.erase(uuid);
+       // and they are removed from there by the linking mod when the server splits
        return User::cull();
 }
 
@@ -451,21 +449,16 @@ void User::UnOper()
 
 
        /* Remove all oper only modes from the user when the deoper - Bug #466*/
-       std::string moderemove("-");
-
-       for (unsigned char letter = 'A'; letter <= 'z'; letter++)
+       Modes::ChangeList changelist;
+       const ModeParser::ModeHandlerMap& usermodes = ServerInstance->Modes->GetModes(MODETYPE_USER);
+       for (ModeParser::ModeHandlerMap::const_iterator i = usermodes.begin(); i != usermodes.end(); ++i)
        {
-               ModeHandler* mh = ServerInstance->Modes->FindMode(letter, MODETYPE_USER);
-               if (mh && mh->NeedsOper())
-                       moderemove += letter;
+               ModeHandler* mh = i->second;
+               if (mh->NeedsOper())
+                       changelist.push_remove(mh);
        }
 
-
-       std::vector<std::string> parameters;
-       parameters.push_back(this->nick);
-       parameters.push_back(moderemove);
-
-       ServerInstance->Modes->Process(parameters, this);
+       ServerInstance->Modes->Process(this, NULL, this, changelist);
 
        // Remove the user from the oper list
        stdalgo::vector::swaperase(ServerInstance->Users->all_opers, this);