X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=c780b8bf1c33c21cf9ca653ae9ac3aeaec32dc4f;hb=c2624f71e1260881610dc6109f0b3ad61ae4f31a;hp=43142f8932a2b1cb643554fff62da1688a31bdcb;hpb=bf6ec00f3dc5ae23da1e8a4e20d44555eca0593a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 43142f893..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)) { @@ -1310,10 +1334,10 @@ void AddWhoWas(userrec* u) whowas_hash::iterator iter = whowas.find(u->nick); WhoWasUser *a = new WhoWasUser(); strlcpy(a->nick,u->nick,NICKMAX); - strlcpy(a->ident,u->ident,15); + strlcpy(a->ident,u->ident,IDENTMAX); strlcpy(a->dhost,u->dhost,160); strlcpy(a->host,u->host,160); - strlcpy(a->fullname,u->fullname,128); + strlcpy(a->fullname,u->fullname,MAXGECOS); strlcpy(a->server,u->server,256); a->signon = u->signon; @@ -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",15); + 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++)