]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_cgiirc.cpp
m_remove, m_services_account Don't check whether nicks are u-lined, checking the...
[user/henk/code/inspircd.git] / src / modules / m_cgiirc.cpp
index f1ead276d504415c31b3f005b9abae0dd8409262..fc55cc47fa268652e2672ef90aeb276b08664c71 100644 (file)
@@ -1,23 +1,29 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2007-2008 John Brooks <john.brooks@dereferenced.net>
+ *   Copyright (C) 2008 Pippijn van Steenhoven <pip88nl@gmail.com>
+ *   Copyright (C) 2006-2008 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2007 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
+ *   Copyright (C) 2006 Oliver Lupton <oliverlupton@gmail.com>
  *
- *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ * 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
+ * License as published by the Free Software Foundation, version 2.
  *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
  *
- * ---------------------------------------------------
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "inspircd.h"
 
-#ifndef WINDOWS
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
+#include "inspircd.h"
 
 /* $ModDesc: Change user's hosts connecting from known CGI:IRC hosts */
 
@@ -169,16 +175,10 @@ public:
                ServerInstance->Extensions.Register(&cmd.realip);
                ServerInstance->Extensions.Register(&cmd.webirc_hostname);
                ServerInstance->Extensions.Register(&cmd.webirc_ip);
+               ServerInstance->Extensions.Register(&waiting);
 
-               Implementation eventlist[] = { I_OnRehash, I_OnUserRegister, I_OnCheckReady, I_OnUserConnect };
-               ServerInstance->Modules->Attach(eventlist, this, 4);
-       }
-
-       void Prioritize()
-       {
-               ServerInstance->Modules->SetPriority(this, I_OnUserConnect, PRIORITY_FIRST);
-               Module* umodes = ServerInstance->Modules->Find("m_conn_umodes.so");
-               ServerInstance->Modules->SetPriority(this, I_OnUserConnect, PRIORITY_BEFORE, &umodes);
+               Implementation eventlist[] = { I_OnRehash, I_OnUserRegister, I_OnCheckReady };
+               ServerInstance->Modules->Attach(eventlist, this, 3);
        }
 
        void OnRehash(User* user)
@@ -233,6 +233,32 @@ public:
        {
                if (waiting.get(user))
                        return MOD_RES_DENY;
+
+               std::string *webirc_ip = cmd.webirc_ip.get(user);
+               if (!webirc_ip)
+                       return MOD_RES_PASSTHRU;
+
+               ServerInstance->Users->RemoveCloneCounts(user);
+               user->SetClientIP(webirc_ip->c_str());
+               cmd.webirc_ip.unset(user);
+
+               std::string* webirc_hostname = cmd.webirc_hostname.get(user);
+               if (webirc_hostname && webirc_hostname->length() < 64)
+                       user->host = user->dhost = *webirc_hostname;
+               else
+                       user->host = user->dhost = user->GetIPString();
+
+               user->InvalidateCache();
+               cmd.webirc_hostname.unset(user);
+
+               ServerInstance->Users->AddLocalClone(user);
+               ServerInstance->Users->AddGlobalClone(user);
+               user->SetClass();
+               user->CheckClass();
+               user->CheckLines(true);
+               if (user->quitting)
+                       return MOD_RES_DENY;
+
                return MOD_RES_PASSTHRU;
        }
 
@@ -275,31 +301,6 @@ public:
                return MOD_RES_PASSTHRU;
        }
 
-       virtual void OnUserConnect(LocalUser* user)
-       {
-               std::string *webirc_hostname = cmd.webirc_hostname.get(user);
-               std::string *webirc_ip = cmd.webirc_ip.get(user);
-               if (webirc_hostname && webirc_hostname->length() < 64)
-               {
-                       user->host = *webirc_hostname;
-                       user->dhost = *webirc_hostname;
-                       user->InvalidateCache();
-               }
-               if (webirc_ip)
-               {
-                       ServerInstance->Users->RemoveCloneCounts(user);
-                       user->SetClientIP(webirc_ip->c_str());
-                       user->InvalidateCache();
-                       cmd.webirc_ip.unset(user);
-                       ServerInstance->Users->AddLocalClone(user);
-                       ServerInstance->Users->AddGlobalClone(user);
-                       user->SetClass();
-                       user->CheckClass();
-                       user->CheckLines(true);
-               }
-               cmd.webirc_hostname.unset(user);
-       }
-
        bool CheckPass(LocalUser* user)
        {
                if(IsValidHost(user->password))