]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/users.cpp
Prevent users from sending an empty TAGMSG.
[user/henk/code/inspircd.git] / src / users.cpp
index 01bad8b619bce48edbfc179b25eaf208fcafa199..4edfd574c1949badf7874edf2a919fc32870e88f 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->uline_count++;
+
        // Do not insert FakeUsers into the uuidlist so FindUUID() won't return them which is the desired behavior
        if (type != USERTYPE_SERVER)
        {
@@ -112,8 +127,8 @@ LocalUser::LocalUser(int myfd, irc::sockets::sockaddrs* client, irc::sockets::so
        ChangeRealHost(GetIPString(), true);
 }
 
-LocalUser::LocalUser(int myfd, const std::string& uuid, Serializable::Data& data)
-       : User(uuid, ServerInstance->FakeClient->server, USERTYPE_LOCAL)
+LocalUser::LocalUser(int myfd, const std::string& uid, Serializable::Data& data)
+       : User(uid, ServerInstance->FakeClient->server, USERTYPE_LOCAL)
        , eh(this)
        , already_sent(0)
 {
@@ -339,6 +354,9 @@ CullResult User::cull()
        if (client_sa.family() != AF_UNSPEC)
                ServerInstance->Users->RemoveCloneCounts(this);
 
+       if (server->IsULine() && ServerInstance->Users->uline_count)
+               ServerInstance->Users->uline_count--;
+
        return Extensible::cull();
 }
 
@@ -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)
@@ -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)
 {
 }