]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Add the missing VF_CORE flag to the core_whowas module.
[user/henk/code/inspircd.git] / src / users.cpp
index 69483ac9251d025458077cb8e5f8916ea03a9a42..72a6c23af9e0bcd49a0e4a0530fb73b760a27ea7 100644 (file)
@@ -1,13 +1,25 @@
 /*
  * InspIRCd -- Internet Relay Chat Daemon
  *
- *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
- *   Copyright (C) 2006-2009 Robin Burchell <robin+git@viroteck.net>
- *   Copyright (C) 2006-2007, 2009 Dennis Friis <peavey@inspircd.org>
- *   Copyright (C) 2008 John Brooks <john.brooks@dereferenced.net>
+ *   Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ *   Copyright (C) 2018 systocrat <systocrat@outlook.com>
+ *   Copyright (C) 2018 Dylan Frank <b00mx0r@aureus.pw>
+ *   Copyright (C) 2014 satmd <satmd@lain.at>
+ *   Copyright (C) 2013-2014, 2016-2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013 Daniel Vassdal <shutter@canternet.org>
+ *   Copyright (C) 2013 ChrisTX <xpipe@hotmail.de>
+ *   Copyright (C) 2013 Adam <Adam@anope.org>
+ *   Copyright (C) 2012-2016, 2018 Attila Molnar <attilamolnar@hush.com>
+ *   Copyright (C) 2012, 2019 Robby <robby@chatbelgie.be>
+ *   Copyright (C) 2012 DjSlash <djslash@djslash.org>
+ *   Copyright (C) 2011 jackmcbarn <jackmcbarn@inspircd.org>
+ *   Copyright (C) 2009-2011 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2009 Uli Schlachter <psychon@inspircd.org>
  *   Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
- *   Copyright (C) 2008 Oliver Lupton <oliverlupton@gmail.com>
- *   Copyright (C) 2003-2008 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2008 John Brooks <special@inspircd.org>
+ *   Copyright (C) 2007-2009 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007, 2009 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006-2009 Craig Edwards <brain@inspircd.org>
  *
  * This file is part of InspIRCd.  InspIRCd is free software: you can
  * redistribute it and/or modify it under the terms of the GNU General Public
@@ -78,6 +90,9 @@ User::User(const std::string& uid, Server* srv, UserType type)
 
        ServerInstance->Logs->Log("USERS", LOG_DEBUG, "New UUID for user: %s", uuid.c_str());
 
+       if (srv->IsULine())
+               ServerInstance->Users.all_ulines.push_back(this);
+
        // Do not insert FakeUsers into the uuidlist so FindUUID() won't return them which is the desired behavior
        if (type != USERTYPE_SERVER)
        {
@@ -339,6 +354,9 @@ CullResult User::cull()
        if (client_sa.family() != AF_UNSPEC)
                ServerInstance->Users->RemoveCloneCounts(this);
 
+       if (server->IsULine())
+               stdalgo::erase(ServerInstance->Users->all_ulines, this);
+
        return Extensible::cull();
 }
 
@@ -490,7 +508,7 @@ void LocalUser::CheckClass(bool clone_count)
        }
        else if (a->type == CC_DENY)
        {
-               ServerInstance->Users->QuitUser(this, a->config->getString("reason", "Unauthorised connection"));
+               ServerInstance->Users->QuitUser(this, a->config->getString("reason", "Unauthorised connection", 1));
                return;
        }
        else if (clone_count)
@@ -758,17 +776,16 @@ void LocalUser::SetClientIP(const irc::sockets::sockaddrs& sa)
                return;
 
        ServerInstance->Users->RemoveCloneCounts(this);
-
        User::SetClientIP(sa);
-
-       FOREACH_MOD(OnSetUserIP, (this));
-
        ServerInstance->Users->AddClone(this);
 
        // Recheck the connect class.
        this->MyClass = NULL;
        this->SetClass();
        this->CheckClass();
+
+       if (!quitting)
+               FOREACH_MOD(OnSetUserIP, (this));
 }
 
 void LocalUser::Write(const ClientProtocol::SerializedMessage& text)
@@ -854,7 +871,7 @@ void User::WriteNumeric(const Numeric::Numeric& numeric)
 
 void User::WriteRemoteNotice(const std::string& text)
 {
-       ServerInstance->PI->SendUserNotice(this, text);
+       ServerInstance->PI->SendMessage(this, text, MSG_NOTICE);
 }
 
 void LocalUser::WriteRemoteNotice(const std::string& text)
@@ -1138,9 +1155,9 @@ void LocalUser::SetClass(const std::string &explicit_name)
                                }
                        }
 
-                       if (regdone && !c->config->getString("password").empty())
+                       if (regdone && !c->password.empty())
                        {
-                               if (!ServerInstance->PassCompare(this, c->config->getString("password"), password, c->config->getString("hash")))
+                               if (!ServerInstance->PassCompare(this, c->password, password, c->passwordhash))
                                {
                                        ServerInstance->Logs->Log("CONNECTCLASS", LOG_DEBUG, "Bad password, skipping");
                                        continue;
@@ -1198,10 +1215,24 @@ const std::string& FakeUser::GetFullRealHost()
 }
 
 ConnectClass::ConnectClass(ConfigTag* tag, char t, const std::string& mask)
-       : config(tag), type(t), fakelag(true), name("unnamed"), registration_timeout(0), host(mask),
-       pingtime(0), softsendqmax(0), hardsendqmax(0), recvqmax(0),
-       penaltythreshold(0), commandrate(0), maxlocal(0), maxglobal(0), maxconnwarn(true), maxchans(ServerInstance->Config->MaxChans),
-       limit(0), resolvehostnames(true)
+       : config(tag)
+       , type(t)
+       , fakelag(true)
+       , name("unnamed")
+       , registration_timeout(0)
+       , host(mask)
+       , pingtime(0)
+       , softsendqmax(0)
+       , hardsendqmax(0)
+       , recvqmax(0)
+       , penaltythreshold(0)
+       , commandrate(0)
+       , maxlocal(0)
+       , maxglobal(0)
+       , maxconnwarn(true)
+       , maxchans(0)
+       , limit(0)
+       , resolvehostnames(true)
 {
 }
 
@@ -1259,4 +1290,6 @@ void ConnectClass::Update(const ConnectClass* src)
        limit = src->limit;
        resolvehostnames = src->resolvehostnames;
        ports = src->ports;
+       password = src->password;
+       passwordhash = src->passwordhash;
 }