]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Port bindings for gnutls now bind via ip:port, rather than on all ports for that...
[user/henk/code/inspircd.git] / src / users.cpp
index 43ebfe0a3a2df1d6ac71b648d6afb0d498f7537f..f8a95af49a195197042218fb16176f955030c39d 100644 (file)
@@ -193,11 +193,10 @@ User::User(InspIRCd* Instance, const std::string &uid) : ServerInstance(Instance
        Visibility = NULL;
        ip = NULL;
        MyClass = NULL;
+       io = NULL;
        AllowedUserModes = NULL;
        AllowedChanModes = NULL;
        AllowedOperCommands = NULL;
-       memset(AllowedUserModes, 0, sizeof(AllowedUserModes));
-       memset(AllowedChanModes, 0, sizeof(AllowedChanModes));
        chans.clear();
        invites.clear();
        memset(modes,0,sizeof(modes));
@@ -235,13 +234,13 @@ User::~User()
 
        if (this->AllowedUserModes)
        {
-               delete AllowedUserModes;
+               delete[] AllowedUserModes;
                AllowedUserModes = NULL;
        }
 
        if (this->AllowedChanModes)
        {
-               delete AllowedChanModes;
+               delete[] AllowedChanModes;
                AllowedChanModes = NULL;
        }
 
@@ -729,7 +728,7 @@ void User::Oper(const std::string &opertype, const std::string &opername)
                                        {
                                                if (*c == '*')
                                                {
-                                                       memset(this->AllowedUserModes, (int)(true), sizeof(this->AllowedUserModes));
+                                                       memset(this->AllowedUserModes, (int)(true), 64);
                                                }
                                                else
                                                {
@@ -740,7 +739,7 @@ void User::Oper(const std::string &opertype, const std::string &opername)
                                        {
                                                if (*c == '*')
                                                {
-                                                       memset(this->AllowedChanModes, (int)(true), sizeof(this->AllowedChanModes));
+                                                       memset(this->AllowedChanModes, (int)(true), 64);
                                                }
                                                else
                                                {
@@ -794,6 +793,17 @@ void User::UnOper()
                        delete AllowedOperCommands;
                        AllowedOperCommands = NULL;
                }
+               if (AllowedUserModes)
+               {
+                       delete[] AllowedUserModes;
+                       AllowedUserModes = NULL;
+               }
+               if (AllowedChanModes)
+               {
+                       delete[] AllowedChanModes;
+                       AllowedChanModes = NULL;
+               }
+
        }
 }
 
@@ -1156,14 +1166,14 @@ void User::Write(std::string text)
                return;
        }
 
-       if (ServerInstance->Config->GetIOHook(this->GetPort()))
+       if (this->io)
        {
                /* XXX: The lack of buffering here is NOT a bug, modules implementing this interface have to
                 * implement their own buffering mechanisms
                 */
                try
                {
-                       ServerInstance->Config->GetIOHook(this->GetPort())->OnRawSocketWrite(this->fd, text.data(), text.length());
+                       this->io->OnRawSocketWrite(this->fd, text.data(), text.length());
                }
                catch (CoreException& modexcept)
                {