]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Fix bug #509 reported by Casey: bans were not applied on non-opped users (1.2 only)
[user/henk/code/inspircd.git] / src / users.cpp
index df7a36683eee15b117e91630d0e27b53bb56bfe4..09b96ce6bf14eebd0de3f0d43b5ee3bd1b8c64b0 100644 (file)
 #include "bancache.h"
 #include "commands/cmd_whowas.h"
 
-static unsigned long already_sent[MAX_DESCRIPTORS] = {0};
+static unsigned long* already_sent = NULL;
+
+
+void InitializeAlreadySent(SocketEngine* SE)
+{
+       already_sent = new unsigned long[SE->GetMaxFds()];
+}
 
 /* XXX: Used for speeding up WriteCommon operations */
 unsigned long uniq_id = 0;
@@ -308,8 +314,11 @@ char* User::MakeHostIP()
 
 void User::CloseSocket()
 {
-       ServerInstance->SE->Shutdown(this, 2);
-       ServerInstance->SE->Close(this);
+       if (this->fd > -1)
+       {
+               ServerInstance->SE->Shutdown(this, 2);
+               ServerInstance->SE->Close(this);
+       }
 }
 
 char* User::GetFullHost()
@@ -907,12 +916,11 @@ void User::FullConnect()
 
        this->WriteServ("NOTICE Auth :Welcome to \002%s\002!",ServerInstance->Config->Network);
        this->WriteNumeric(001, "%s :Welcome to the %s IRC Network %s!%s@%s",this->nick, ServerInstance->Config->Network, this->nick, this->ident, this->host);
-       this->WriteNumeric(002, "%s :Your host is %s, running version %s",this->nick,ServerInstance->Config->ServerName,VERSION);
+       this->WriteNumeric(002, "%s :Your host is %s, running version InspIRCd-1.2",this->nick,ServerInstance->Config->ServerName);
        this->WriteNumeric(003, "%s :This server was created %s %s", this->nick, __TIME__, __DATE__);
-       this->WriteNumeric(004, "%s %s %s %s %s %s", this->nick, ServerInstance->Config->ServerName, VERSION, ServerInstance->Modes->UserModeList().c_str(), ServerInstance->Modes->ChannelModeList().c_str(), ServerInstance->Modes->ParaModeList().c_str());
+       this->WriteNumeric(004, "%s %s InspIRCd-1.2 %s %s %s", this->nick, ServerInstance->Config->ServerName, ServerInstance->Modes->UserModeList().c_str(), ServerInstance->Modes->ChannelModeList().c_str(), ServerInstance->Modes->ParaModeList().c_str());
 
        ServerInstance->Config->Send005(this);
-
        this->WriteNumeric(42, "%s %s :your unique ID", this->nick, this->uuid);
 
 
@@ -1322,6 +1330,9 @@ void User::WriteCommon(const std::string &text)
 
        uniq_id++;
 
+       if (!already_sent)
+               InitializeAlreadySent(ServerInstance->SE);
+
        /* We dont want to be doing this n times, just once */
        snprintf(tb,MAXBUF,":%s %s",this->GetFullHost(),text.c_str());
        std::string out = tb;
@@ -1376,6 +1387,10 @@ void User::WriteCommonQuit(const std::string &normal_text, const std::string &op
                return;
 
        uniq_id++;
+
+       if (!already_sent)
+               InitializeAlreadySent(ServerInstance->SE);
+
        snprintf(tb1,MAXBUF,":%s QUIT :%s",this->GetFullHost(),normal_text.c_str());
        snprintf(tb2,MAXBUF,":%s QUIT :%s",this->GetFullHost(),oper_text.c_str());
        std::string out1 = tb1;
@@ -1407,6 +1422,10 @@ void User::WriteCommonExcept(const std::string &text)
                return;
 
        uniq_id++;
+
+       if (!already_sent)
+               InitializeAlreadySent(ServerInstance->SE);
+
        snprintf(tb1,MAXBUF,":%s %s",this->GetFullHost(),text.c_str());
        out1 = tb1;
 
@@ -1430,7 +1449,7 @@ void User::WriteCommonExcept(const std::string &text)
 
 void User::WriteWallOps(const std::string &text)
 {
-       if (!IS_OPER(this) && IS_LOCAL(this))
+       if (!IS_LOCAL(this))
                return;
 
        std::string wallop("WALLOPS :");
@@ -1446,6 +1465,9 @@ void User::WriteWallOps(const std::string &text)
 
 void User::WriteWallOps(const char* text, ...)
 {
+       if (!IS_LOCAL(this))
+               return;
+
        char textbuffer[MAXBUF];
        va_list argsPtr;