]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands.cpp
Services speedups for stupid buffered i/o uplinks
[user/henk/code/inspircd.git] / src / commands.cpp
index 088dabe682c9884c580ad88085ef9bea2e4a349a..98a5809f64efd3cae267e42e2838b5f973564a4f 100644 (file)
@@ -93,7 +93,6 @@ extern bool nofork;
 
 extern time_t TIME;
 
-extern std::vector<int> fd_reap;
 extern std::vector<std::string> module_names;
 
 extern char MyExecutable[1024];
@@ -431,6 +430,7 @@ void handle_pass(char **parameters, int pcnt, userrec *user)
                WriteServ(user->fd,"462 %s :You may not reregister",user->nick);
                return;
        }
+       strlcpy(user->password,parameters[0],MAXBUF);
        if (!strcasecmp(parameters[0],Passwd(user)))
        {
                user->haspassed = true;
@@ -927,8 +927,14 @@ void handle_quit(char **parameters, int pcnt, userrec *user)
                AddWhoWas(user);
        }
 
+       FOREACH_MOD OnUserDisconnect(user);
+
        /* push the socket on a stack of sockets due to be closed at the next opportunity */
-       fd_reap.push_back(user->fd);
+       if (user->fd > -1)
+       {
+               shutdown(user->fd,2);
+               close(user->fd);
+       }
        
        if (iter != clientlist.end())
        {
@@ -1599,7 +1605,16 @@ bool is_uline(const char* server)
        }
        return false;
 }
-
+int operstrcmp(char* data,char* input)
+{
+       int MOD_RESULT = 0;
+       FOREACH_RESULT(OnOperCompare(data,input))
+       if (MOD_RESULT == 1)
+               return 0;
+       if (MOD_RESULT == -1)
+               return 1;
+       return strcmp(data,input);
+}
 
 void handle_oper(char **parameters, int pcnt, userrec *user)
 {
@@ -1622,7 +1637,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                ConfValue("oper","password",i,Password,&config_f);
                ConfValue("oper","type",i,OperType,&config_f);
                ConfValue("oper","host",i,HostName,&config_f);
-               if ((!strcmp(LoginName,parameters[0])) && (!strcmp(Password,parameters[1])) && (match(TheHost,HostName)))
+               if ((!strcmp(LoginName,parameters[0])) && (!operstrcmp(Password,parameters[1])) && (match(TheHost,HostName)))
                {
                        fail2 = true;
                        for (j =0; j < ConfValueEnum("type",&config_f); j++)
@@ -2810,9 +2825,15 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
        }
 
        char response[10240];
+       char old2[MAXBUF];
        char token = udp_msg[0];
        char* old = udp_msg;
 
+       if ((token != ':') && (strlen(udp_msg)>1) && (udp_msg[1] != ' '))
+       {
+               WriteOpers("*** Discarded %d chars illegal data from %s",strlen(udp_msg),tcp_host);
+       }
+
        if (token == ':') // leading :servername or details - strip them off (services does this, sucky)
        {
                char* src = udp_msg+1;
@@ -2922,7 +2943,6 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
                
        }
 
-
        char* params = udp_msg + 2;
        char finalparam[1024];
        strcpy(finalparam," :xxxx");