X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fusermanager.cpp;h=05f5d2c9dbcaa0c7437c6c44ad540214db513c9a;hb=7746307ab638030a4b0a8c2c3b4c577f380e29bb;hp=6889ddba369c757197800c114780665518e606c4;hpb=123eac3f25ce4dd3142b4ac66eb321f7df1e23e4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 6889ddba3..05f5d2c9d 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -11,14 +11,12 @@ * --------------------------------------------------- */ -/* $Core */ - #include "inspircd.h" #include "xline.h" #include "bancache.h" /* add a client connection to the sockets list */ -void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server) +void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server) { /* NOTE: Calling this one parameter constructor for User automatically * allocates a new UUID and places it in the hash_map. @@ -26,7 +24,7 @@ void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::soc LocalUser* New = NULL; try { - New = new LocalUser(); + New = new LocalUser(socket, client, server); } catch (...) { @@ -35,10 +33,6 @@ void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::soc return; } - New->SetFd(socket); - memcpy(&New->client_sa, client, sizeof(irc::sockets::sockaddrs)); - memcpy(&New->server_sa, server, sizeof(irc::sockets::sockaddrs)); - /* Give each of the modules an attempt to hook the user for I/O */ FOREACH_MOD(I_OnHookIO, OnHookIO(New, via)); @@ -58,12 +52,10 @@ void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::soc this->unregistered_count++; - (*(this->clientlist))[New->uuid] = New; - /* The users default nick is their UUID */ New->nick.assign(New->uuid, 0, ServerInstance->Config->Limits.NickMax); + (*(this->clientlist))[New->nick] = New; - New->server = ServerInstance->Config->ServerName; New->ident.assign("unknown"); New->registered = REG_NONE; @@ -81,13 +73,7 @@ void UserManager::AddUser(int socket, ClientListenSocket* via, irc::sockets::soc * First class check. We do this again in FullConnect after DNS is done, and NICK/USER is recieved. * See my note down there for why this is required. DO NOT REMOVE. :) -- w00t */ - ConnectClass* i = New->SetClass(); - - if (!i) - { - this->QuitUser(New, "Access denied by configuration"); - return; - } + New->SetClass(); /* * Check connect class settings and initialise settings into User. @@ -204,13 +190,14 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char if (IS_LOCAL(user)) { - FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(IS_LOCAL(user))); - user->DoWrite(); - if (user->GetIOHook()) + LocalUser* lu = IS_LOCAL(user); + FOREACH_MOD(I_OnUserDisconnect,OnUserDisconnect(lu)); + lu->DoWrite(); + if (lu->GetIOHook()) { try { - user->GetIOHook()->OnStreamSocketClose(user); + lu->GetIOHook()->OnStreamSocketClose(lu); } catch (CoreException& modexcept) { @@ -218,10 +205,8 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char } } - ServerInstance->SE->DelFd(user); - user->Close(); - // user->Close() will set fd to -1; this breaks IS_LOCAL. Fix - user->SetFd(INT_MAX); + ServerInstance->SE->DelFd(lu); + lu->Close(); } /* @@ -260,70 +245,41 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char void UserManager::AddLocalClone(User *user) { - int range = 32; clonemap::iterator x; - switch (user->client_sa.sa.sa_family) - { - case AF_INET6: - range = ServerInstance->Config->c_ipv6_range; - break; - case AF_INET: - range = ServerInstance->Config->c_ipv4_range; - break; - } - - x = local_clones.find(user->GetCIDRMask(range)); + x = local_clones.find(user->GetCIDRMask()); if (x != local_clones.end()) x->second++; else - local_clones[user->GetCIDRMask(range)] = 1; + local_clones[user->GetCIDRMask()] = 1; } void UserManager::AddGlobalClone(User *user) { - int range = 32; clonemap::iterator x; - switch (user->client_sa.sa.sa_family) - { - case AF_INET6: - range = ServerInstance->Config->c_ipv6_range; - break; - case AF_INET: - range = ServerInstance->Config->c_ipv4_range; - break; - } - x = global_clones.find(user->GetCIDRMask(range)); + x = global_clones.find(user->GetCIDRMask()); if (x != global_clones.end()) x->second++; else - global_clones[user->GetCIDRMask(range)] = 1; + global_clones[user->GetCIDRMask()] = 1; } void UserManager::RemoveCloneCounts(User *user) { - int range = 32; - switch (user->client_sa.sa.sa_family) - { - case AF_INET6: - range = ServerInstance->Config->c_ipv6_range; - break; - case AF_INET: - range = ServerInstance->Config->c_ipv4_range; - break; - } - - clonemap::iterator x = local_clones.find(user->GetCIDRMask(range)); - if (x != local_clones.end()) + if (IS_LOCAL(user)) { - x->second--; - if (!x->second) + clonemap::iterator x = local_clones.find(user->GetCIDRMask()); + if (x != local_clones.end()) { - local_clones.erase(x); + x->second--; + if (!x->second) + { + local_clones.erase(x); + } } } - clonemap::iterator y = global_clones.find(user->GetCIDRMask(range)); + clonemap::iterator y = global_clones.find(user->GetCIDRMask()); if (y != global_clones.end()) { y->second--; @@ -336,17 +292,7 @@ void UserManager::RemoveCloneCounts(User *user) unsigned long UserManager::GlobalCloneCount(User *user) { - int range = 32; - switch (user->client_sa.sa.sa_family) - { - case AF_INET6: - range = ServerInstance->Config->c_ipv6_range; - break; - case AF_INET: - range = ServerInstance->Config->c_ipv4_range; - break; - } - clonemap::iterator x = global_clones.find(user->GetCIDRMask(range)); + clonemap::iterator x = global_clones.find(user->GetCIDRMask()); if (x != global_clones.end()) return x->second; else @@ -355,17 +301,7 @@ unsigned long UserManager::GlobalCloneCount(User *user) unsigned long UserManager::LocalCloneCount(User *user) { - int range = 32; - switch (user->client_sa.sa.sa_family) - { - case AF_INET6: - range = ServerInstance->Config->c_ipv6_range; - break; - case AF_INET: - range = ServerInstance->Config->c_ipv4_range; - break; - } - clonemap::iterator x = local_clones.find(user->GetCIDRMask(range)); + clonemap::iterator x = local_clones.find(user->GetCIDRMask()); if (x != local_clones.end()) return x->second; else