]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
A few anti-flood features
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 369c1f4c41d146e3d59226ed41a7dc905b85a1b3..2558f3efc57a6c40d828adcb7a087318b0c5969e 100644 (file)
@@ -4087,24 +4087,45 @@ int InspIRCd(void)
                                                        if (current->registered == 7)
                                                        {
                                                                kill_link(current,"RecvQ exceeded");
-                                                               goto label;
                                                        }
                                                        else
                                                        {
+                                                               WriteOpers("*** Excess flood from %s",current->ip);
+                                                               log(DEFAULT,"Excess flood from: %s",current->ip);
                                                                add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
                                                                apply_lines();
-                                                               goto label;
                                                        }
+                                                       goto label;
                                                }
                                                // while there are complete lines to process...
                                                while (current->BufferIsReady())
                                                {
                                                        floodlines++;
-                                                       if ((floodlines > current->flood) && (current->flood != 0))
+                                                       if (TIME > current->reset_due)
                                                        {
-                                                               log(DEFAULT,"Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
-                                                               WriteOpers("*** Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+                                                               current->reset_due = TIME+3;
+                                                               current->lines_in = 0;
+                                                       }
+                                                       current->lines_in++;
+                                                       if (current->lines_in > current->flood)
+                                                       {
+                                                               log(DEFAULT,"Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+                                                               WriteOpers("*** Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
                                                                kill_link(current,"Excess flood");
+                                                       }
+                                                       if ((floodlines > current->flood) && (current->flood != 0))
+                                                       {
+                                                               if (current->registered == 7)
+                                                               {
+                                                                       log(DEFAULT,"Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+                                                                       WriteOpers("*** Excess flood from: %s!%s@%s",current->nick,current->ident,current->host);
+                                                                       kill_link(current,"Excess flood");
+                                                               }
+                                                               else
+                                                               {
+                                                                       add_zline(120,ServerName,"Flood from unregistered connection",current->ip);
+                                                                       apply_lines();
+                                                               }
                                                                goto label;
                                                        }
                                                        char sanitized[MAXBUF];