X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands.cpp;h=610b694bc31a8d033b491d4e1c73d3d5f6029ddc;hb=db11f2b24c6aeb5ab7ba4678638890bc68b1d0c1;hp=db2cd3624a1b0e064d3af694a3a92dab98f0a36d;hpb=30b22d2b48ecdeac906c69fb28d6df2ef782f792;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index db2cd3624..610b694bc 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -200,7 +200,6 @@ extern address_cache IP; void handle_join(char **parameters, int pcnt, userrec *user) { chanrec* Ptr; - int i = 0; if (loop_call(handle_join,parameters,pcnt,user,0,0,1)) return; @@ -213,8 +212,6 @@ void handle_join(char **parameters, int pcnt, userrec *user) void handle_part(char **parameters, int pcnt, userrec *user) { - chanrec* Ptr; - if (pcnt > 1) { if (loop_call(handle_part,parameters,pcnt,user,0,pcnt-2,0)) @@ -236,7 +233,7 @@ void handle_kick(char **parameters, int pcnt, userrec *user) if ((!u) || (!Ptr)) { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); return; } @@ -313,7 +310,6 @@ void handle_die(char **parameters, int pcnt, userrec *user) void handle_restart(char **parameters, int pcnt, userrec *user) { - char restart[1024]; char *argv[32]; log(DEFAULT,"Restart: %s",user->nick); if (!strcmp(parameters[0],restartpass)) @@ -389,12 +385,13 @@ void handle_kill(char **parameters, int pcnt, userrec *user) if (iter != clientlist.end()) { log(DEBUG,"deleting user hash value %d",iter->second); - if ((iter->second) && (user->registered == 7)) { - delete iter->second; - } clientlist.erase(iter); } - purge_empty_chans(); + if (u->registered == 7) + { + purge_empty_chans(u); + } + delete u; } else { @@ -408,7 +405,7 @@ void handle_kill(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } @@ -522,7 +519,7 @@ void handle_topic(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } return; @@ -572,7 +569,7 @@ void handle_topic(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } } @@ -603,7 +600,7 @@ void handle_names(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } @@ -651,7 +648,7 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) else { /* no such nick/channel */ - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } return; } @@ -691,7 +688,7 @@ void handle_privmsg(char **parameters, int pcnt, userrec *user) else { /* no such nick/channel */ - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } @@ -739,7 +736,7 @@ void handle_notice(char **parameters, int pcnt, userrec *user) else { /* no such nick/channel */ - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } return; } @@ -771,7 +768,7 @@ void handle_notice(char **parameters, int pcnt, userrec *user) else { /* no such nick/channel */ - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } @@ -834,7 +831,6 @@ void handle_time(char **parameters, int pcnt, userrec *user) void handle_whois(char **parameters, int pcnt, userrec *user) { userrec *dest; - char *t; if (loop_call(handle_whois,parameters,pcnt,user,0,pcnt-1,0)) return; @@ -874,13 +870,13 @@ void handle_whois(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } else { /* no such nick/channel */ - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } @@ -905,8 +901,8 @@ void handle_quit(char **parameters, int pcnt, userrec *user) reason[MAXQUIT-1] = '\0'; } - Write(user->fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,parameters[0]); - WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,parameters[0]); + Write(user->fd,"ERROR :Closing link (%s@%s) [%s%s]",user->ident,user->host,PrefixQuit,parameters[0]); + WriteOpers("*** Client exiting: %s!%s@%s [%s%s]",user->nick,user->ident,user->host,PrefixQuit,parameters[0]); WriteCommonExcept(user,"QUIT :%s%s",PrefixQuit,parameters[0]); char buffer[MAXBUF]; @@ -939,15 +935,12 @@ void handle_quit(char **parameters, int pcnt, userrec *user) if (iter != clientlist.end()) { clientlist.erase(iter); - log(DEBUG,"deleting user hash value %d",iter->second); - //if ((user) && (user->registered == 7)) { - //delete user; - //} } if (user->registered == 7) { - purge_empty_chans(); + purge_empty_chans(user); } + delete user; } void handle_who(char **parameters, int pcnt, userrec *user) @@ -1019,7 +1012,7 @@ void handle_who(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"401 %s %s :No suck nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); } } else @@ -1076,8 +1069,6 @@ void handle_wallops(char **parameters, int pcnt, userrec *user) void handle_list(char **parameters, int pcnt, userrec *user) { - chanrec* Ptr; - WriteServ(user->fd,"321 %s Channel :Users Name",user->nick); for (chan_hash::const_iterator i = chanlist.begin(); i != chanlist.end(); i++) { @@ -1289,7 +1280,7 @@ void handle_modules(char **parameters, int pcnt, userrec *user) strlcat(flagstate,", common",MAXBUF); if (V.Flags & VF_SERVICEPROVIDER) strlcat(flagstate,", service provider",MAXBUF); - if (!strlen(flagstate)) + if (!flagstate[0]) strcpy(flagstate," "); strlcpy(modulename,module_names[i].c_str(),256); if (strchr(user->modes,'o')) @@ -1301,6 +1292,7 @@ void handle_modules(char **parameters, int pcnt, userrec *user) WriteServ(user->fd,"900 %s :%s",user->nick,CleanFilename(modulename)); } } + WriteServ(user->fd,"901 %s :End of MODULES list",user->nick); } void handle_stats(char **parameters, int pcnt, userrec *user) @@ -1319,7 +1311,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) FOREACH_MOD OnStats(*parameters[0]); - if (!strcasecmp(parameters[0],"c")) + if (*parameters[0] == 'c') { for (int i = 0; i < ConfValueEnum("link",&config_f); i++) { @@ -1331,7 +1323,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } } - if (!strcasecmp(parameters[0],"i")) + if (*parameters[0] == 'i') { int idx = 0; for (ClassVector::iterator i = Classes.begin(); i != Classes.end(); i++) @@ -1341,7 +1333,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } } - if (!strcasecmp(parameters[0],"y")) + if (*parameters[0] == 'y') { int idx = 0; for (ClassVector::iterator i = Classes.begin(); i != Classes.end(); i++) @@ -1351,7 +1343,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } } - if (!strcmp(parameters[0],"U")) + if (*parameters[0] == 'U') { for (int i = 0; i < ConfValueEnum("uline",&config_f); i++) { @@ -1360,7 +1352,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } } - if (!strcmp(parameters[0],"P")) + if (*parameters[0] == 'P') { int idx = 0; for (user_hash::iterator i = clientlist.begin(); i != clientlist.end(); i++) @@ -1375,33 +1367,33 @@ void handle_stats(char **parameters, int pcnt, userrec *user) //249 [Brain] :bwoadway-monitor (~wgmon@204.152.186.58) Idle: 18 } - if (!strcmp(parameters[0],"k")) + if (*parameters[0] == 'k') { stats_k(user); } - if (!strcmp(parameters[0],"g")) + if (*parameters[0] == 'g') { stats_g(user); } - if (!strcmp(parameters[0],"q")) + if (*parameters[0] == 'q') { stats_q(user); } - if (!strcmp(parameters[0],"Z")) + if (*parameters[0] == 'Z') { stats_z(user); } - if (!strcmp(parameters[0],"e")) + if (*parameters[0] == 'e') { stats_e(user); } /* stats m (list number of times each command has been used, plus bytecount) */ - if (!strcmp(parameters[0],"m")) + if (*parameters[0] == 'm') { for (int i = 0; i < cmdlist.size(); i++) { @@ -1418,7 +1410,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } /* stats z (debug and memory info) */ - if (!strcmp(parameters[0],"z")) + if (*parameters[0] == 'z') { WriteServ(user->fd,"249 %s :Users(HASH_MAP) %d (%d bytes, %d buckets)",user->nick,clientlist.size(),clientlist.size()*sizeof(userrec),clientlist.bucket_count()); WriteServ(user->fd,"249 %s :Channels(HASH_MAP) %d (%d bytes, %d buckets)",user->nick,chanlist.size(),chanlist.size()*sizeof(chanrec),chanlist.bucket_count()); @@ -1431,7 +1423,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } /* stats o */ - if (!strcmp(parameters[0],"o")) + if (*parameters[0] == 'o') { for (int i = 0; i < ConfValueEnum("oper",&config_f); i++) { @@ -1446,7 +1438,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } /* stats l (show user I/O stats) */ - if (!strcmp(parameters[0],"l")) + if (*parameters[0] == 'l') { WriteServ(user->fd,"211 %s :server:port nick bytes_in cmds_in bytes_out cmds_out",user->nick); for (user_hash::iterator i = clientlist.begin(); i != clientlist.end(); i++) @@ -1464,7 +1456,7 @@ void handle_stats(char **parameters, int pcnt, userrec *user) } /* stats u (show server uptime) */ - if (!strcmp(parameters[0],"u")) + if (*parameters[0] == 'u') { time_t current_time = 0; current_time = TIME; @@ -1547,7 +1539,54 @@ void handle_squit(char **parameters, int pcnt, userrec *user) } else { - WriteServ(user->fd,"NOTICE :*** Remote SQUIT not supported yet."); + if (!strcasecmp("*",parameters[0])) + { + WriteServ(user->fd,"NOTICE %s :*** You cannot issue an SQUIT this wide! If this is REALLY what you want, use a less wide mask.",user->nick); + WriteOpers("*** WARNING! %s tried to SQUIT all servers at once!",user->nick); + return; + } + if (!strcasecmp(ServerName,parameters[0])) + { + WriteServ(user->fd,"NOTICE %s :*** To take the local server out of the mesh, just use /SQUIT with no parameters instead.",user->nick); + return; + } + bool have_this_server = true; + int n_count = 0; + std::string server_to_squit = ""; + while (have_this_server) + { + have_this_server = false; + for (int j = 0; j < 32; j++) + { + if (me[j] != NULL) + { + for (int x = 0; x < me[j]->connectors.size(); x++) + { + if (match(me[j]->connectors[x].GetServerName().c_str(),parameters[0])) + { + // found a valid ircd_connector. + have_this_server = true; + server_to_squit = me[j]->connectors[x].GetServerName().c_str(); + break; + } + } + } + } + if (have_this_server) + { + WriteOpers("SQUIT command issued by %s to remove %s from the mesh",user->nick,server_to_squit.c_str()); + WriteServ(user->fd,"NOTICE %s :*** Removing remote server %s.",user->nick,server_to_squit.c_str()); + char buffer[MAXBUF]; + snprintf(buffer,MAXBUF,"& %s",server_to_squit.c_str()); + NetSendToAll(buffer); + DoSplit(server_to_squit.c_str()); + n_count++; + } + } + if (!n_count) + { + WriteServ(user->fd,"402 %s %s :Your pattern did not match any servers.",user->nick,parameters[0]); + } } } @@ -1593,8 +1632,6 @@ void handle_map(char **parameters, int pcnt, userrec *user) bool is_uline(const char* server) { char ServName[MAXBUF]; - int i,j; - for (int i = 0; i < ConfValueEnum("uline",&config_f); i++) { ConfValue("uline","server",i,ServName,&config_f); @@ -1609,10 +1646,12 @@ int operstrcmp(char* data,char* input) { int MOD_RESULT = 0; FOREACH_RESULT(OnOperCompare(data,input)) + log(DEBUG,"operstrcmp: %d",MOD_RESULT); if (MOD_RESULT == 1) return 0; if (MOD_RESULT == -1) return 1; + log(DEBUG,"strcmp fallback: '%s' '%s' %d",data,input,strcmp(data,input)); return strcmp(data,input); } @@ -1624,7 +1663,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user) char TypeName[MAXBUF]; char HostName[MAXBUF]; char TheHost[MAXBUF]; - int i,j; + int j; bool found = false; bool fail2 = false; char global[MAXBUF]; @@ -1674,6 +1713,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user) NetSendToAll(global); FOREACH_MOD OnOper(user); log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType); + AddOper(user); } } else @@ -1706,7 +1746,7 @@ void handle_nick(char **parameters, int pcnt, userrec *user) log(DEBUG,"invalid parameter passed to handle_nick"); return; } - if (!strlen(parameters[0])) + if (!parameters[0][0]) { log(DEBUG,"zero length new nick passed to handle_nick"); return; @@ -1764,7 +1804,7 @@ void handle_nick(char **parameters, int pcnt, userrec *user) WriteCommon(user,"NICK %s",parameters[0]); - // Q token must go to ALL servers!!! + // N token must go to ALL servers!!! char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"n %s %s",user->nick,parameters[0]); NetSendToAll(buffer); @@ -1805,6 +1845,13 @@ void handle_nick(char **parameters, int pcnt, userrec *user) } +void handle_v(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +{ + char* servername = strtok(params," "); + char* versionstr = strtok(NULL,"\r\n"); + ircd_connector* cn = reply->FindHost(servername); + cn->SetVersionString(versionstr); +} void handle_V(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) { @@ -1816,18 +1863,25 @@ void handle_V(char token,char* params,serverrec* source,serverrec* reply, char* userrec* user = Find(src); if (user) { - userrec* dst = Find(dest); - - if (dst) + // notice all - only issuable by a server + if (strcmp(dest,"*")) { - WriteTo(user, dst, "NOTICE %s :%s", dst->nick, text); + NoticeAll(user,true,"%s",text); } else { - chanrec* d = FindChan(dest); - if (d) + userrec* dst = Find(dest); + if (dst) + { + WriteTo(user, dst, "NOTICE %s :%s", dst->nick, text); + } + else { - ChanExceptSender(d, user, "NOTICE %s :%s", d->name, text); + chanrec* d = FindChan(dest); + if (d) + { + ChanExceptSender(d, user, "NOTICE %s :%s", d->name, text); + } } } } @@ -2029,7 +2083,7 @@ void handle_K(char token,char* params,serverrec* source,serverrec* reply, char* { WriteTo(user, u, "KILL %s :%s!%s!%s!%s (%s)", u->nick, source->name, ServerName, user->dhost,user->nick,reason); WriteOpers("*** Remote kill from %s by %s: %s!%s@%s (%s)",source->name,user->nick,u->nick,u->ident,u->host,reason); - snprintf(kreason,MAXBUF,"[%s] Killed (%s (%s))",source->name,user->nick,reason); + snprintf(kreason,MAXBUF,"[%s] Killed (From: '%s' (%s))",source->name,user->nick,reason); kill_link(u,kreason); } } @@ -2057,13 +2111,14 @@ void handle_Q(char token,char* params,serverrec* source,serverrec* reply, char* if (iter != clientlist.end()) { log(DEBUG,"deleting user hash value %d",iter->second); - if ((iter->second) && (user->registered == 7)) { - delete iter->second; - } clientlist.erase(iter); } - purge_empty_chans(); + if (user->registered == 7) + { + purge_empty_chans(user); + } + delete user; } } @@ -2073,10 +2128,9 @@ void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* char* newnick = strtok(NULL," "); userrec* user = Find(oldnick); - + if (user) { - WriteCommon(user,"NICK %s",newnick); if (is_uline(tcp_host)) { int MOD_RESULT = 0; @@ -2095,8 +2149,9 @@ void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* // broadcast this because its a services thingy char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"n %s %s",user->nick,newnick); - NetSendToAll(buffer); + NetSendToAllExcept(tcp_host,buffer); } + WriteCommon(user,"NICK %s",newnick); user = ReHashNick(user->nick, newnick); if (!user) return; if (!user->nick) return; @@ -2204,6 +2259,7 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* strlcpy(clientlist[nick]->server, server,256); strlcpy(clientlist[nick]->ident, ident,10); // +1 char to compensate for tilde strlcpy(clientlist[nick]->fullname, gecos,128); + strlcpy(clientlist[nick]->ip,ipaddr,32); clientlist[nick]->signon = TS; clientlist[nick]->nping = 0; // this is ignored for a remote user anyway. clientlist[nick]->lastping = 1; @@ -2212,9 +2268,14 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* clientlist[nick]->idle_lastmsg = TIME; // this is unrealiable and wont actually be used locally for (int i = 0; i < MAXCHANS; i++) { - clientlist[nick]->chans[i].channel = NULL; - clientlist[nick]->chans[i].uc_modes = 0; - } + clientlist[nick]->chans[i].channel = NULL; + clientlist[nick]->chans[i].uc_modes = 0; + } + FOREACH_MOD OnGlobalConnect(clientlist[nick]); + if (strchr(clientlist[nick]->modes,'o')) + { + FOREACH_MOD OnGlobalOper(clientlist[nick]); + } } void handle_F(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) @@ -2423,7 +2484,7 @@ void handle_amp(char token,char* params,serverrec* source,serverrec* reply, char } } -long authcookie; +unsigned long authcookie; void handle_hash(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) { @@ -2434,6 +2495,7 @@ void handle_hash(char token,char* params,serverrec* source,serverrec* reply, cha char* create_time = strtok(NULL," "); char* duration = strtok(NULL," :"); char* reason = strtok(NULL,"\r\n"); + reason++; add_gline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask); // we must update the creation time on this gline // now that we've added it, or it wont expire at the right time. @@ -2475,6 +2537,7 @@ void handle_add_sqline(char token,char* params,serverrec* source,serverrec* repl char* create_time = strtok(NULL," "); char* duration = strtok(NULL," :"); char* reason = strtok(NULL,"\r\n"); + reason++; add_qline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask); // we must update the creation time on this gline // now that we've added it, or it wont expire at the right time. @@ -2517,6 +2580,7 @@ void handle_add_szline(char token,char* params,serverrec* source,serverrec* repl char* create_time = strtok(NULL," "); char* duration = strtok(NULL," :"); char* reason = strtok(NULL,"\r\n"); + reason++; add_zline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask); // we must update the creation time on this gline // now that we've added it, or it wont expire at the right time. @@ -2577,7 +2641,7 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // now broadcast this new servers address out to all servers that are linked to us, // except the newcomer. They'll all attempt to connect back to it. authcookie = rand()*rand(); - snprintf(buffer,MAXBUF,"~ %d",authcookie); + snprintf(buffer,MAXBUF,"~ %lu",(unsigned long)authcookie); NetSendToAll(buffer); break; // ~ @@ -2687,6 +2751,10 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve case 'V': handle_V(token,params,source,reply,tcp_host); break; + // v + case 'v': + handle_v(token,params,source,reply,tcp_host); + break; // L : // User parting a channel case 'L': @@ -2755,7 +2823,7 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve nb_start = 0; // tell all the other servers to use this authcookie to connect back again // got '+ test3.chatspike.net 7010 -2016508415' from test.chatspike.net - snprintf(buffer,MAXBUF,"+ %s %s %d %d",tcp_host,ipaddr,port,authcookie); + snprintf(buffer,MAXBUF,"+ %s %s %d %lu",tcp_host,ipaddr,port,(unsigned long)authcookie); NetSendToAllExcept(tcp_host,buffer); break; case '/': @@ -2817,7 +2885,7 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) { - if ((!strncmp(udp_msg,"USER ",5)) || (!strncmp(udp_msg,"NICK ",5))) + if ((!strncmp(udp_msg,"USER ",5)) || (!strncmp(udp_msg,"NICK ",5)) || (!strncmp(udp_msg,"PASS ",5)) || (!strncmp(udp_msg,"SERVER ",7))) { // a user on a server port, just close their connection. RemoveServer(tcp_host); @@ -2828,6 +2896,11 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) 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; @@ -2937,7 +3010,6 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) } - char* params = udp_msg + 2; char finalparam[1024]; strcpy(finalparam," :xxxx"); @@ -2997,6 +3069,8 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) char* revision = strtok(NULL," "); char* serverdesc = finalparam+2; + password = password; + WriteOpers("CONNECT from %s (%s) (their port: %d)",servername,tcp_host,atoi(myport)); ircd_connector* cn = serv->FindHost(servername); @@ -3082,6 +3156,8 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) char* servername = strtok(params," "); char* password = strtok(NULL," "); char* serverdesc = finalparam+2; + + password = password; // TODO: we should do a check here to ensure that this server is one we recently initiated a // link with, and didnt hear an 's' or 'E' back from yet (these are the only two valid responses @@ -3132,8 +3208,6 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) } } } - WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",tcp_host); - return; } } else { @@ -3164,7 +3238,7 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) char Link_SendPass[1024]; int LinkPort = 0; - log(DEBUG,"U-token linked server detected."); + log(DEBUG,"U-token linked server detected.\n\nservername='%s' password='%s'\n\n",servername,password); for (int j = 0; j < 32; j++) @@ -3210,6 +3284,7 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) if (!strcasecmp(me[j]->connectors[k].GetServerName().c_str(),tcp_host)) { char buffer[MAXBUF]; + log(DEBUG,"Found matching link block"); me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetServerName(servername); me[j]->connectors[k].SetState(STATE_SERVICES); @@ -3227,14 +3302,13 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) } } } - WriteOpers("\2WARNING!\2 %s sent us an authentication packet but we are not authenticating with this server right noe! Possible intrusion attempt!",tcp_host); - return; } } else { log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername); } } + log(DEBUG,"No matching link block found"); char buffer[MAXBUF]; sprintf(buffer,"E :Access is denied (no matching link block)"); serv->SendPacket(buffer,tcp_host); @@ -3250,9 +3324,6 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv) return; } else { - - serverrec* source_server = NULL; - for (int j = 0; j < 32; j++) { if (me[j] != NULL) @@ -3394,7 +3465,7 @@ void handle_gline(char **parameters, int pcnt, userrec *user) { add_gline(duration(parameters[1]),user->nick,parameters[2],parameters[0]); // # : - snprintf(netdata,MAXBUF,"# %s %s %ld %ld :%s",parameters[0],user->nick,TIME,duration(parameters[1]),parameters[2]); + snprintf(netdata,MAXBUF,"# %s %s %lu %lu :%s",parameters[0],user->nick,(unsigned long)TIME,(unsigned long)duration(parameters[1]),parameters[2]); NetSendToAll(netdata); if (!duration(parameters[1])) {