]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Add Ankit to regular contributors list
[user/henk/code/inspircd.git] / src / users.cpp
index 0a196d798a440c539ed092f9f40140a02501cafe..fd71b07ad9a518b46a14f8461f0f110f43100751 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
  * See: http://www.inspircd.org/wiki/index.php/Credits
  *
  * This program is free but copyrighted software; see
@@ -90,6 +90,12 @@ std::string User::ProcessNoticeMasks(const char *sm)
                *c++;
        }
 
+       std::string s = this->FormatNoticeMasks();
+       if (s.length() == 0)
+       {
+               this->modes[UM_SNOMASK] = false;
+       }
+
        return output;
 }
 
@@ -203,12 +209,11 @@ void User::DecrementModes()
 User::User(InspIRCd* Instance, const std::string &uid) : ServerInstance(Instance)
 {
        server = (char*)Instance->FindServerNamePtr(Instance->Config->ServerName);
-       reset_due = ServerInstance->Time();
        age = ServerInstance->Time();
        Penalty = 0;
-       lines_in = lastping = signon = idle_lastmsg = nping = registered = 0;
+       lastping = signon = idle_lastmsg = nping = registered = 0;
        bytes_in = bytes_out = cmds_in = cmds_out = 0;
-       quietquit = OverPenalty = ExemptFromPenalty = quitting = exempt = haspassed = dns_done = false;
+       quietquit = quitting = exempt = haspassed = dns_done = false;
        fd = -1;
        recvq.clear();
        sendq.clear();
@@ -538,18 +543,15 @@ bool User::HasPrivPermission(const std::string &privstr, bool noisy)
 
        if (AllowedPrivs->find(privstr) != AllowedPrivs->end())
        {
-               ServerInstance->Logs->Log("PRIVS", DEBUG, "I do have it.");             
                return true;
        }
        else if (AllowedPrivs->find("*") != AllowedPrivs->end())
        {
-               ServerInstance->Logs->Log("PRIVS", DEBUG, "I allow all.");
                return true;
        }
 
        if (noisy)
                this->WriteServ("NOTICE %s :Oper type %s does not have access to priv %s", this->nick.c_str(), this->oper.c_str(), privstr.c_str());
-       ServerInstance->Logs->Log("PRIVS", DEBUG, "I don't have it...");
        return false;
 }
 
@@ -607,7 +609,7 @@ bool User::AddBuffer(const std::string &a)
                }
        }
 
-       if (this->MyClass && (recvq.length() > this->MyClass->GetRecvqMax()))
+       if (this->MyClass && !this->HasPrivPermission("users/flood/increased-buffers") && recvq.length() > this->MyClass->GetRecvqMax())
        {
                ServerInstance->Users->QuitUser(this, "RecvQ exceeded");
                ServerInstance->SNO->WriteToSnoMask('A', "User %s RecvQ of %lu exceeds connect class maximum of %lu",this->nick.c_str(),(unsigned long int)recvq.length(),this->MyClass->GetRecvqMax());
@@ -672,7 +674,7 @@ void User::AddWriteBuf(const std::string &data)
        if (this->quitting)
                return;
 
-       if (this->MyClass && (sendq.length() + data.length() > this->MyClass->GetSendqMax()))
+       if (this->MyClass && !this->HasPrivPermission("users/flood/increased-buffers") && sendq.length() + data.length() > this->MyClass->GetSendqMax())
        {
                /*
                 * Fix by brain - Set the error text BEFORE calling, because
@@ -834,6 +836,7 @@ void User::UnOper()
                 */
                this->oper.clear();
 
+
                /* Remove all oper only modes from the user when the deoper - Bug #466*/
                std::string moderemove("-");
 
@@ -844,12 +847,13 @@ void User::UnOper()
                                moderemove += letter;
                }
 
+
                std::vector<std::string> parameters;
                parameters.push_back(this->nick);
                parameters.push_back(moderemove);
 
                ServerInstance->Parser->CallHandler("MODE", parameters, this);
-                       
+
                /* remove the user from the oper list. Will remove multiple entries as a safeguard against bug #404 */
                ServerInstance->Users->all_opers.remove(this);
 
@@ -867,6 +871,7 @@ void User::UnOper()
 
                AllowedUserModes.reset();
                AllowedChanModes.reset();
+               this->modes[UM_OPERATOR] = 0;
        }
 }
 
@@ -1033,8 +1038,12 @@ bool User::ForceNickChange(const char* newnick)
 
        this->InvalidateCache();
 
+       this->Extend("NICKForced", "Enabled");
+
        FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(this, newnick));
 
+       this->Shrink("NICKForced");
+
        if (MOD_RESULT)
        {
                ServerInstance->stats->statsCollisions++;