X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_passforward.cpp;h=08d3533cd120dfe5cc2c920e67a408acf7f48b3a;hb=58a0a7e01422e62de1565a8eb0a1febdc463d04d;hp=a1993c25a137eb814d1c48f5ba6f5cbcd8eb4ffe;hpb=ae61237cdc5e4d94681fc801d3076d202825ff45;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_passforward.cpp b/src/modules/m_passforward.cpp index a1993c25a..08d3533cd 100644 --- a/src/modules/m_passforward.cpp +++ b/src/modules/m_passforward.cpp @@ -1,64 +1,67 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ +/* + * InspIRCd -- Internet Relay Chat Daemon * - * InspIRCd: (C) 2002-2010 InspIRCd Development Team - * See: http://wiki.inspircd.org/Credits + * Copyright (C) 2010 Daniel De Graaf * - * This program is free but copyrighted software; see - * the file COPYING for details. + * 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 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 . */ + #include "inspircd.h" class ModulePassForward : public Module { - private: std::string nickrequired, forwardmsg, forwardcmd; public: - ModulePassForward() - { - OnRehash(NULL); - Implementation eventlist[] = { I_OnPostConnect, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 2); - } - - Version GetVersion() + Version GetVersion() CXX11_OVERRIDE { return Version("Sends server password to NickServ", VF_VENDOR); } - void OnRehash(User* user) + void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE { - ConfigReader Conf; - nickrequired = Conf.ReadValue("passforward", "nick", "NickServ", 0); - forwardmsg = Conf.ReadValue("passforward", "forwardmsg", "NOTICE $nick :*** Forwarding PASS to $nickrequired", 0); - forwardcmd = Conf.ReadValue("passforward", "cmd", "PRIVMSG $nickrequired :IDENTIFY $pass", 0); + ConfigTag* tag = ServerInstance->Config->ConfValue("passforward"); + nickrequired = tag->getString("nick", "NickServ"); + forwardmsg = tag->getString("forwardmsg", "NOTICE $nick :*** Forwarding PASS to $nickrequired"); + forwardcmd = tag->getString("cmd", "PRIVMSG $nickrequired :IDENTIFY $pass"); } - void FormatStr(std::string& result, const std::string& format, const std::string &nick, const std::string &pass) + void FormatStr(std::string& result, const std::string& format, const LocalUser* user) { for (unsigned int i = 0; i < format.length(); i++) { char c = format[i]; if (c == '$') { - if (format.substr(i, 13) == "$nickrequired") + if (!format.compare(i, 13, "$nickrequired", 13)) { result.append(nickrequired); i += 12; } - else if (format.substr(i, 5) == "$nick") + else if (!format.compare(i, 5, "$nick", 5)) { - result.append(nick); + result.append(user->nick); i += 4; } - else if (format.substr(i,5) == "$pass") + else if (!format.compare(i, 5, "$user", 5)) { - result.append(pass); + result.append(user->ident); + i += 4; + } + else if (!format.compare(i, 5, "$pass", 5)) + { + result.append(user->password); i += 4; } else @@ -69,29 +72,32 @@ class ModulePassForward : public Module } } - virtual void OnPostConnect(User* ruser) + void OnPostConnect(User* ruser) CXX11_OVERRIDE { LocalUser* user = IS_LOCAL(ruser); if (!user || user->password.empty()) return; + // If the connect class requires a password, don't forward it + if (!user->MyClass->config->getString("password").empty()) + return; + if (!nickrequired.empty()) { /* Check if nick exists and its server is ulined */ - User* u = ServerInstance->FindNick(nickrequired.c_str()); - if (!u || !ServerInstance->ULine(u->server)) + User* u = ServerInstance->FindNick(nickrequired); + if (!u || !u->server->IsULine()) return; } std::string tmp; - FormatStr(tmp,forwardmsg, user->nick, user->password); - user->WriteServ(tmp); + FormatStr(tmp, forwardmsg, user); + ServerInstance->Parser.ProcessBuffer(user, tmp); tmp.clear(); - FormatStr(tmp,forwardcmd, user->nick, user->password); - ServerInstance->Parser->ProcessBuffer(tmp,user); + FormatStr(tmp,forwardcmd, user); + ServerInstance->Parser.ProcessBuffer(user, tmp); } }; MODULE_INIT(ModulePassForward) -