]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Someone doesnt validate their input.... ;-p
[user/henk/code/inspircd.git] / src / users.cpp
index 3b6a101973a703592e2b7fb61b15d066705b8d17..fbbe0a25fa38842d8e1b3d70440e4ae75e0b2759 100644 (file)
@@ -62,42 +62,49 @@ typedef opertype_t operclass_t;
 opertype_t opertypes;
 operclass_t operclass;
 
-void ReadClassesAndTypes()
+bool InitTypes(const char* tag)
 {
-       char TypeName[MAXBUF],Classes[MAXBUF],ClassName[MAXBUF],CommandList[MAXBUF];
        for (opertype_t::iterator n = opertypes.begin(); n != opertypes.end(); n++)
        {
                if (n->second)
                        delete[] n->second;
        }
+       opertypes.clear();
+       return true;
+}
+
+bool InitClasses(const char* tag)
+{
        for (operclass_t::iterator n = operclass.begin(); n != operclass.end(); n++)
        {
                if (n->second)
                        delete[] n->second;
        }
-       opertypes.clear();
        operclass.clear();
-       for (int j =0; j < Config->ConfValueEnum("type",&Config->config_f); j++)
-       {
-               Config->ConfValue("type","name",j,TypeName,&Config->config_f);
-               Config->ConfValue("type","classes",j,Classes,&Config->config_f);
-               opertypes[TypeName] = strdup(Classes);
-               log(DEBUG,"Read oper TYPE '%s' with classes '%s'",TypeName,Classes);
-       }
-       for (int k =0; k < Config->ConfValueEnum("class",&Config->config_f); k++)
-       {
-               Config->ConfValue("class","name",k,ClassName,&Config->config_f);
-               Config->ConfValue("class","commands",k,CommandList,&Config->config_f);
-               operclass[ClassName] = strdup(CommandList);
-               log(DEBUG,"Read oper CLASS '%s' with commands '%s'",ClassName,CommandList);
-       }
+       return true;
+}
+
+bool DoType(const char* tag, char** entries, void** values, int* types)
+{
+       char* TypeName = (char*)values[0];
+       char* Classes = (char*)values[1];
+       opertypes[TypeName] = strdup(Classes);
+       log(DEBUG,"Read oper TYPE '%s' with classes '%s'",TypeName,Classes);
+       return true;
 }
 
-template<typename T> inline string ConvToStr(const T &in)
+bool DoClass(const char* tag, char** entries, void** values, int* types)
 {
-        stringstream tmp;
-        if (!(tmp << in)) return string();
-        return tmp.str();
+       char* ClassName = (char*)values[0];
+       char* CommandList = (char*)values[1];
+       operclass[ClassName] = strdup(CommandList);
+       log(DEBUG,"Read oper CLASS '%s' with commands '%s'",ClassName,CommandList);
+       return true;
+}
+
+bool DoneClassesAndTypes(const char* tag)
+{
+       return true;
 }
 
 userrec::userrec()
@@ -246,7 +253,7 @@ void userrec::RemoveInvite(irc::string &channel)
                }
 }
 
-bool userrec::HasPermission(std::string &command)
+bool userrec::HasPermission(const std::string &command)
 {
        char* mycmd;
        char* savept;
@@ -295,7 +302,7 @@ bool userrec::HasPermission(std::string &command)
 }
 
 
-bool userrec::AddBuffer(std::string a)
+bool userrec::AddBuffer(const std::string &a)
 {
         std::string b = "";
        char* n = (char*)a.c_str();
@@ -304,9 +311,7 @@ bool userrec::AddBuffer(std::string a)
                 if ((*i != '\r') && (*i != '\0') && (*i != 7))
                         b = b + *i;
        }
-        std::stringstream stream(recvq);
-        stream << b;
-        recvq = stream.str();
+       recvq.append(b);
        unsigned int i = 0;
        // count the size of the first line in the buffer.
        while (i < recvq.length())
@@ -349,13 +354,13 @@ std::string userrec::GetBuffer()
                 ret = ret + *line;
                 line++;
         }
-        if ((*line == '\n') || (*line == '\r'))
+        while ((*line == '\n') || (*line == '\r'))
                 line++;
         recvq = line;
         return ret;
 }
 
-void userrec::AddWriteBuf(std::string data)
+void userrec::AddWriteBuf(const std::string &data)
 {
        if (*this->GetWriteError())
                return;
@@ -397,7 +402,7 @@ void userrec::FlushWriteBuf()
        }
 }
 
-void userrec::SetWriteError(std::string error)
+void userrec::SetWriteError(const std::string &error)
 {
        log(DEBUG,"Setting error string for %s to '%s'",this->nick,error.c_str());
        // don't try to set the error twice, its already set take the first string.
@@ -438,8 +443,8 @@ void kill_link(userrec *user,const char* r)
         strlcpy(reason,r,MAXQUIT-1);
 
         log(DEBUG,"kill_link: %s '%s'",user->nick,reason);
-        Write(user->fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,reason);
-        log(DEBUG,"closing fd %d",user->fd);
+       if (IS_LOCAL(user))
+               Write(user->fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,reason);
 
         if (user->registered == 7) {
                purge_empty_chans(user);
@@ -451,7 +456,7 @@ void kill_link(userrec *user,const char* r)
 
         FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(user));
 
-        if (user->fd > -1)
+        if (IS_LOCAL(user))
         {
                if (Config->GetIOHook(user->port))
                {
@@ -472,7 +477,7 @@ void kill_link(userrec *user,const char* r)
         // if they were an oper with +s.
         if (user->registered == 7) {
                 // fix by brain: only show local quits because we only show local connects (it just makes SENSE)
-                if (user->fd > -1)
+                if (IS_LOCAL(user))
                         WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason);
                 AddWhoWas(user);
         }
@@ -480,7 +485,7 @@ void kill_link(userrec *user,const char* r)
         if (iter != clientlist.end())
         {
                 log(DEBUG,"deleting user hash value %lx",(unsigned long)user);
-                if (user->fd > -1)
+                if (IS_LOCAL(user))
                {
                         fd_ref_table[user->fd] = NULL;
                        if (find(local_users.begin(),local_users.end(),user) != local_users.end())
@@ -849,4 +854,3 @@ void force_nickchange(userrec* user,const char* newnick)
                 }
         }
 }
-