X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=b1aedde73132f856334235d52ce0967fff4b1969;hb=2df3ad5cfeaea6ca095695fa4b3c786ee8237080;hp=cb702245cbaf92e29f755966eadaf0329d19e61a;hpb=80015fe115f37243e7b75a48312edb5a029fa229;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index cb702245c..b1aedde73 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -4068,8 +4068,6 @@ int InspIRCd(void) result = read(count2a->second->fd, data, 65535); if (result) { - if (result > 0) - data[result] = '\0'; // perform a check on the raw buffer as an array (not a string!) to remove // characters 0 and 7 which are illegal in the RFC - replace them with spaces. // hopefully this should stop even more people whining about "Unknown command: *" @@ -4078,35 +4076,53 @@ int InspIRCd(void) if ((data[checker] == 0) || (data[checker] == 7)) data[checker] = ' '; } + if (result > 0) + data[result] = '\0'; userrec* current = count2a->second; int currfd = current->fd; - //char* l = strtok(data,"\n"); int floodlines = 0; current->AddBuffer(data); + if (current->recvq.length() > NetBufferSize) + { + if (current->registered == 7) + { + kill_link(current,"RecvQ exceeded"); + } + else + { + add_zline(120,ServerName,"Flood from unregistered connection",current->ip); + apply_lines(); + } + goto label; + } // while there are complete lines to process... while (current->BufferIsReady()) { floodlines++; if ((floodlines > current->flood) && (current->flood != 0)) { - 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 (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[NetBufferSize]; - memset(sanitized, 0, NetBufferSize); + char sanitized[MAXBUF]; // use GetBuffer to copy single lines into the sanitized string strlcpy(sanitized,current->GetBuffer().c_str(),MAXBUF); if (*sanitized) { - - // we're gonna re-scan to check if the nick is gone, after every // command - if it has, we're gonna bail bool find_again = false; process_buffer(sanitized,current); - // look for the user's record in case it's changed for (user_hash::iterator c2 = clientlist.begin(); c2 != clientlist.end(); c2++) { @@ -4122,7 +4138,6 @@ int InspIRCd(void) goto label; } - //l = strtok(NULL,"\n"); } goto label; }