X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommands.cpp;h=3a9399f7c5b9ae455c931710b229ab84858c23c8;hb=c2624f71e1260881610dc6109f0b3ad61ae4f31a;hp=b5959eb89843edcc44c8d4fbecfa6e216208a5c4;hpb=5fc34ac352c7c6bdd4019901d950981172b045aa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index b5959eb89..3a9399f7c 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]); @@ -1152,8 +1163,8 @@ void handle_user(char **parameters, int pcnt, userrec *user) } else { strcpy(user->ident,"~"); /* we arent checking ident... but these days why bother anyway? */ - strlcat(user->ident,parameters[0],IDENTMAX); - strlcpy(user->fullname,parameters[3],128); + strlcat(user->ident,parameters[0],IDENTMAX+1); + strlcpy(user->fullname,parameters[3],MAXGECOS); user->registered = (user->registered | 1); } } @@ -1217,12 +1228,12 @@ void handle_away(char **parameters, int pcnt, userrec *user) { if (pcnt) { - strlcpy(user->awaymsg,parameters[0],512); + strlcpy(user->awaymsg,parameters[0],MAXAWAY); WriteServ(user->fd,"306 %s :You have been marked as being away",user->nick); } else { - strlcpy(user->awaymsg,"",512); + strlcpy(user->awaymsg,"",MAXAWAY); WriteServ(user->fd,"305 %s :You are no longer marked as being away",user->nick); } } @@ -1737,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; @@ -2274,6 +2286,11 @@ void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* if (!user->nick) return; strlcpy(user->nick, newnick,NICKMAX); log(DEBUG,"new nick set: %s",user->nick); + if (user->registered == 7) + { + FOREACH_MOD OnUserPostNick(user,oldnick); + } + } } @@ -2394,9 +2411,9 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* strlcpy(clientlist[nick]->nick, nick,NICKMAX); strlcpy(clientlist[nick]->host, host,160); strlcpy(clientlist[nick]->dhost, dhost,160); - strlcpy(clientlist[nick]->server, server,256); - strlcpy(clientlist[nick]->ident, ident,10); // +1 char to compensate for tilde - strlcpy(clientlist[nick]->fullname, gecos,128); + clientlist[nick]->server = (char*)FindServerNamePtr(server); + strlcpy(clientlist[nick]->ident, ident,IDENTMAX+1); // +1 char to compensate for tilde + strlcpy(clientlist[nick]->fullname, gecos,MAXGECOS); strlcpy(clientlist[nick]->ip,ipaddr,16); clientlist[nick]->signon = TS; clientlist[nick]->nping = 0; // this is ignored for a remote user anyway. @@ -2436,7 +2453,7 @@ void handle_a(char token,char* params,serverrec* source,serverrec* reply, char* userrec* user = Find(nick); if (user) - strlcpy(user->fullname,gecos,MAXBUF); + strlcpy(user->fullname,gecos,MAXGECOS); } void handle_b(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) @@ -2865,8 +2882,8 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // ? // ping case '?': - snprintf(buffer,MAXBUF,":%s !",CreateSum(),tcp_host); - serv->SendPacket(buffer,tcp_host); + snprintf(buffer,MAXBUF,"%s !",CreateSum().c_str()); + reply->SendPacket(buffer,tcp_host); break; // ? // pong @@ -3250,6 +3267,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp me[j]->connectors[k].SetServerName(servername); me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetState(STATE_CONNECTED); + AddServerName(servername); NetSendMyRoutingTable(); return; } @@ -3316,7 +3334,6 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp } } - char Link_ServerName[1024]; char Link_IPAddr[1024]; char Link_Port[1024]; @@ -3346,6 +3363,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp if (!strcasecmp(serv->connectors[t].GetServerName().c_str(),servername)) { serv->connectors[t].SetState(STATE_CONNECTED); + AddServerName(servername); } } @@ -3412,6 +3430,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp char buffer[MAXBUF]; me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetState(STATE_CONNECTED); + AddServerName(servername); snprintf(buffer,MAXBUF,"%s X 0",CreateSum().c_str()); serv->SendPacket(buffer,tcp_host); DoSync(me[j],tcp_host); @@ -3505,6 +3524,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetServerName(servername); me[j]->connectors[k].SetState(STATE_SERVICES); + AddServerName(servername); snprintf(buffer,MAXBUF,"%s X 0",CreateSum().c_str()); serv->SendPacket(buffer,servername); snprintf(buffer,MAXBUF,"%s s %s %s %lu :%s",CreateSum().c_str(),ServerName,Link_SendPass,LinkPort,ServerDesc);