From: attilamolnar Date: Wed, 21 Nov 2012 01:20:23 +0000 (+0100) Subject: Reorder local user initialization steps X-Git-Tag: v2.0.23~436 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=20ea635c9fcd0d559ff6fc2863ab581591bc4ef8;p=user%2Fhenk%2Fcode%2Finspircd.git Reorder local user initialization steps OnSetUserIP hook now runs after the user has a connect class and the g/k/z lines were checked (ip only, no host at that point) Fixes #360 reported by @JDowny Allows #336 --- diff --git a/src/usermanager.cpp b/src/usermanager.cpp index bb4d58d90..b6a33d2c4 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -146,6 +146,7 @@ void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs if (ServerInstance->Config->RawLog) New->WriteServ("NOTICE Auth :*** Raw I/O logging is enabled on this server. All messages, passwords, and commands are being recorded."); + FOREACH_MOD(I_OnSetUserIP,OnSetUserIP(New)); FOREACH_MOD(I_OnUserInit,OnUserInit(New)); if (ServerInstance->Config->NoUserDns) diff --git a/src/users.cpp b/src/users.cpp index 0c6204adb..92276d07c 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -225,25 +225,9 @@ LocalUser::LocalUser(int myfd, irc::sockets::sockaddrs* client, irc::sockets::so ident = "unknown"; lastping = 0; eh.SetFd(myfd); + memcpy(&client_sa, client, sizeof(irc::sockets::sockaddrs)); memcpy(&server_sa, servaddr, sizeof(irc::sockets::sockaddrs)); - - /* - * Initialize host and dhost here to the user's IP. - * It is important to do this before calling SetClientIP() - * as that passes execution to modules that expect these - * fields to be valid. - * - * We cannot call GetIPString() now as that will access - * client_sa, and that's only initialized after the first - * SetClientIP() call. - */ - - int port; - irc::sockets::satoap(*client, host, port); - if (host[0] == ':') - host.insert(0, 1, '0'); - dhost = host; - SetClientIP(*client); + dhost = host = GetIPString(); } User::~User() @@ -1005,12 +989,14 @@ irc::sockets::cidr_mask User::GetCIDRMask() bool User::SetClientIP(const char* sip) { cachedip.clear(); + cached_hostip.clear(); return irc::sockets::aptosa(sip, 0, client_sa); } void User::SetClientIP(const irc::sockets::sockaddrs& sa) { cachedip.clear(); + cached_hostip.clear(); memcpy(&client_sa, &sa, sizeof(irc::sockets::sockaddrs)); }