X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands.cpp;h=ae4b97c3e1289b81297ee835fea4744196abf7ae;hb=bf6ec00f3dc5ae23da1e8a4e20d44555eca0593a;hp=612444cb026ebeb2e89a50e47f4c324bcd42ce80;hpb=88a4177e285d65affeb2c2b97e308449a2c0cd4c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index 612444cb0..ae4b97c3e 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -16,10 +16,10 @@ using namespace std; +#include "inspircd_config.h" #include "inspircd.h" #include "inspircd_io.h" #include "inspircd_util.h" -#include "inspircd_config.h" #include #include #include @@ -528,7 +528,7 @@ void handle_topic(char **parameters, int pcnt, userrec *user) strlcpy(topic,parameters[1],MAXBUF); if (strlen(topic)>MAXTOPIC) { - topic[MAXTOPIC-1] = '\0'; + topic[MAXTOPIC] = '\0'; } if (!strcasecmp(user->server,ServerName)) @@ -990,7 +990,10 @@ void handle_who(char **parameters, int pcnt, userrec *user) WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, Ptr ? Ptr->name : "*", i->second->ident, i->second->dhost, i->second->server, i->second->nick, tmp, i->second->fullname); n_list++; if (n_list > MaxWhoResults) + { + WriteServ(user->fd,"523 %s WHO :Command aborted: More results than configured limit",user->nick); break; + } } } } @@ -1009,6 +1012,7 @@ void handle_who(char **parameters, int pcnt, userrec *user) Ptr = FindChan(parameters[0]); if (Ptr) { + int n_list = 0; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { if ((has_channel(i->second,Ptr)) && (isnick(i->second->nick))) @@ -1023,6 +1027,13 @@ void handle_who(char **parameters, int pcnt, userrec *user) if (strchr(i->second->modes,'o')) { strlcat(tmp, "*", 9); } strlcat(tmp, cmode(i->second, Ptr),5); WriteServ(user->fd,"352 %s %s %s %s %s %s %s :0 %s",user->nick, Ptr->name, i->second->ident, i->second->dhost, i->second->server, i->second->nick, tmp, i->second->fullname); + n_list++; + if (n_list > MaxWhoResults) + { + WriteServ(user->fd,"523 %s WHO :Command aborted: More results than configured limit",user->nick); + break; + } + } } WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); @@ -1662,7 +1673,8 @@ void handle_map(char **parameters, int pcnt, userrec *user) { for (int k = 0; k < me[j]->connectors.size(); k++) { - snprintf(line,MAXBUF,"006 %s :%c%c%s",user->nick,islast(me[j]->connectors[k].GetServerName().c_str()),me[j]->connectors[k].GetState() == STATE_CONNECTED ? '-' : '*',me[j]->connectors[k].GetServerName().c_str()); + int state = me[j]->connectors[k].GetState(); + snprintf(line,MAXBUF,"006 %s :%c%s%s",user->nick,islast(me[j]->connectors[k].GetServerName().c_str()),state == STATE_NOAUTH_INBOUND || state == STATE_NOAUTH_OUTBOUND ? "-*" : "--", me[j]->connectors[k].GetServerName().c_str()); while (strlen(line) < 50) strcat(line," "); WriteServ(user->fd,"%s%d (%.2f%%)",line,map_count(me[j]->connectors[k].GetServerName().c_str()),(float)(((float)map_count(me[j]->connectors[k].GetServerName().c_str())/(float)registered_usercount())*100)); @@ -1736,7 +1748,8 @@ void handle_oper(char **parameters, int pcnt, userrec *user) snprintf(global,MAXBUF,"| %s %s",user->nick,TypeName); NetSendToAll(global); ConfValue("type","host",j,HostName,&config_f); - ChangeDisplayedHost(user,HostName); + if (*HostName) + ChangeDisplayedHost(user,HostName); strlcpy(user->oper,TypeName,NICKMAX); found = true; fail2 = false; @@ -2864,7 +2877,8 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // ? // ping case '?': - reply->SendPacket("!",tcp_host); + snprintf(buffer,MAXBUF,"%s !",CreateSum().c_str()); + reply->SendPacket(buffer,tcp_host); break; // ? // pong @@ -3287,6 +3301,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Server %s already exists!",servername); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); RemoveServer(tcp_host); return; } @@ -3297,6 +3312,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Version number mismatch"); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); RemoveServer(tcp_host); RemoveServer(servername); return; @@ -3351,6 +3367,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Access is denied (no matching link block)"); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); WriteOpers("CONNECT from %s denied, no matching link block",servername); RemoveServer(tcp_host); RemoveServer(servername); @@ -3424,6 +3441,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Access is denied (no matching link block)"); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); WriteOpers("CONNECT from %s denied, no matching link block",servername); RemoveServer(tcp_host); RemoveServer(servername); @@ -3462,6 +3480,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Access is denied (Server exists in the mesh)"); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); WriteOpers("CONNECT from %s denied, \"%s\" already exists!",tcp_host,servername); RemoveServer(tcp_host); return; @@ -3522,6 +3541,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"E :Access is denied (no matching link block)"); serv->SendPacket(buffer,tcp_host); + serv->FlushWriteBuffers(); WriteOpers("CONNECT from %s denied, no matching link block",servername); RemoveServer(tcp_host); RemoveServer(servername);