X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=c780b8bf1c33c21cf9ca653ae9ac3aeaec32dc4f;hb=c2624f71e1260881610dc6109f0b3ad61ae4f31a;hp=47f699a91444c032b06999e3cd33debf2afddeba;hpb=aba25d142ea1505cc401cc087f3f02e5db72c02d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 47f699a91..c780b8bf1 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -120,6 +120,7 @@ int ep, lep, sep; #endif bool has_been_netsplit = false; +extern std::vector include_stack; typedef nspace::hash_map, irc::StrHashComp> user_hash; typedef nspace::hash_map, irc::StrHashComp> chan_hash; @@ -127,6 +128,7 @@ typedef nspace::hash_map, irc::InAddr_Has typedef nspace::hash_map, irc::StrHashComp> whowas_hash; typedef std::deque command_table; typedef std::map autoconnects; +typedef std::vector servernamelist; // This table references users by file descriptor. // its an array to make it VERY fast, as all lookups are referenced @@ -149,6 +151,7 @@ file_cache RULES; address_cache IP; ClassVector Classes; +servernamelist servernames; struct linger linger = { 0 }; char MyExecutable[1024]; @@ -179,6 +182,26 @@ void AddOper(userrec* user) all_opers.push_back(user); } +void AddServerName(std::string servername) +{ + for (servernamelist::iterator a = servernames.begin(); a < servernames.end(); a++) + { + if (*a == servername) + return; + } + servernames.push_back(servername); +} + +const char* FindServerNamePtr(std::string servername) +{ + for (servernamelist::iterator a = servernames.begin(); a < servernames.end(); a++) + { + if (*a == servername) + return a->c_str(); + } + return ""; +} + void DeleteOper(userrec* user) { for (std::vector::iterator a = all_opers.begin(); a < all_opers.end(); a++) @@ -241,6 +264,7 @@ void ReadConfig(bool bail, userrec* user) char AH[MAXBUF],AP[MAXBUF],AF[MAXBUF],DNT[MAXBUF],pfreq[MAXBUF],thold[MAXBUF],sqmax[MAXBUF],rqmax[MAXBUF]; ConnectClass c; std::stringstream errstr; + include_stack.clear(); if (!LoadConf(CONFIG_FILE,&config_f,&errstr)) { @@ -1397,16 +1421,16 @@ void AddClient(int socket, char* host, int port, bool iscached, char* ip) log(DEBUG,"AddClient: %lu %s %d %s",(unsigned long)socket,host,port,ip); clientlist[tempnick]->fd = socket; - strncpy(clientlist[tempnick]->nick, tn2,NICKMAX); - strncpy(clientlist[tempnick]->host, host,160); - strncpy(clientlist[tempnick]->dhost, host,160); - strncpy(clientlist[tempnick]->server, ServerName,256); - strncpy(clientlist[tempnick]->ident, "unknown",IDENTMAX); + strlcpy(clientlist[tempnick]->nick, tn2,NICKMAX); + strlcpy(clientlist[tempnick]->host, host,160); + strlcpy(clientlist[tempnick]->dhost, host,160); + clientlist[tempnick]->server = (char*)FindServerNamePtr(ServerName); + strlcpy(clientlist[tempnick]->ident, "unknown",IDENTMAX); clientlist[tempnick]->registered = 0; clientlist[tempnick]->signon = TIME+dns_timeout; clientlist[tempnick]->lastping = 1; clientlist[tempnick]->port = port; - strncpy(clientlist[tempnick]->ip,ip,16); + strlcpy(clientlist[tempnick]->ip,ip,16); // set the registration timeout for this user unsigned long class_regtimeout = 90; @@ -1583,6 +1607,7 @@ void FullConnectUser(userrec* user) // fix by brain: these should be AFTER the N token, so other servers know what the HELL we're on about... :) FOREACH_MOD OnUserConnect(user); + FOREACH_MOD OnGlobalConnect(user); WriteOpers("*** Client connecting on port %lu: %s!%s@%s [%s]",(unsigned long)user->port,user->nick,user->ident,user->host,user->ip); } @@ -2586,6 +2611,8 @@ int InspIRCd(char** argv, int argc) } log(DEBUG,"InspIRCd: startup: read config"); + AddServerName(ServerName); + int clientportcount = 0, serverportcount = 0; for (count = 0; count < ConfValueEnum("bind",&config_f); count++)