X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_customtitle.cpp;h=0caa2d6f5f223ad6e89969e32755ab3af563b9e8;hb=f51d9ad5ab7015f78a29039ca7ed169b281ff6bb;hp=12460953618dc75caecafd190182e394ff261a35;hpb=31e2d052252c4113ae9ea63844f60df7759a03be;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_customtitle.cpp b/src/modules/m_customtitle.cpp index 124609536..0caa2d6f5 100644 --- a/src/modules/m_customtitle.cpp +++ b/src/modules/m_customtitle.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2008 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -12,23 +12,21 @@ */ #include "inspircd.h" -#include "users.h" -#include "channels.h" -#include "modules.h" #include "wildcard.h" /* $ModDesc: Provides the TITLE command which allows setting of CUSTOM WHOIS TITLE line */ /** Handle /TITLE */ -class cmd_title : public command_t +class CommandTitle : public Command { public: - cmd_title (InspIRCd* Instance) : command_t(Instance,"TITLE",0,2) + CommandTitle (InspIRCd* Instance) : Command(Instance,"TITLE",0,2) { this->source = "m_customtitle.so"; syntax = " "; + TRANSLATE3(TR_NICK, TR_TEXT, TR_END); } bool OneOfMatches(const char* host, const char* ip, const char* hostlist) @@ -45,7 +43,7 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) return false; } - CmdResult Handle(const char** parameters, int pcnt, userrec* user) + CmdResult Handle(const char** parameters, int pcnt, User* user) { if (!IS_LOCAL(user)) return CMD_LOCALONLY; @@ -61,11 +59,12 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) { std::string name = Conf.ReadValue("title", "name", "", i); std::string pass = Conf.ReadValue("title", "password", "", i); + std::string hash = Conf.ReadValue("title", "hash", "", i); std::string host = Conf.ReadValue("title", "host", "*@*", i); std::string title = Conf.ReadValue("title", "title", "", i); std::string vhost = Conf.ReadValue("title", "vhost", "", i); - if (!strcmp(name.c_str(),parameters[0]) && !strcmp(pass.c_str(),parameters[1]) && OneOfMatches(TheHost,TheIP,host.c_str()) && !title.empty()) + if (!strcmp(name.c_str(),parameters[0]) && !ServerInstance->PassCompare(user, pass.c_str(), parameters[1], hash.c_str()) && OneOfMatches(TheHost,TheIP,host.c_str()) && !title.empty()) { std::string* text; user->GetExt("ctitle", text); @@ -73,7 +72,7 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) if (text) { user->Shrink("ctitle"); - DELETE(text); + delete text; } text = new std::string(title); @@ -92,7 +91,7 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) if (!ServerInstance->ULine(user->server)) // Ulines set TITLEs silently - ServerInstance->WriteOpers("*** %s used TITLE to set custom title '%s'",user->nick,title.c_str()); + ServerInstance->SNO->WriteToSnoMask('A', "%s used TITLE to set custom title '%s'",user->nick,title.c_str()); user->WriteServ("NOTICE %s :Custom title set to '%s'",user->nick, title.c_str()); @@ -102,7 +101,7 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) if (!ServerInstance->ULine(user->server)) // Ulines also fail TITLEs silently - ServerInstance->WriteOpers("*** Failed TITLE attempt by %s!%s@%s using login '%s'",user->nick,user->ident,user->host,parameters[0]); + ServerInstance->SNO->WriteToSnoMask('A', "Failed TITLE attempt by %s!%s@%s using login '%s'",user->nick,user->ident,user->host,parameters[0]); user->WriteServ("NOTICE %s :Invalid title credentials",user->nick); return CMD_SUCCESS; @@ -112,23 +111,21 @@ bool OneOfMatches(const char* host, const char* ip, const char* hostlist) class ModuleCustomTitle : public Module { - cmd_title* mycommand; + CommandTitle* mycommand; public: ModuleCustomTitle(InspIRCd* Me) : Module(Me) { - mycommand = new cmd_title(ServerInstance); + mycommand = new CommandTitle(ServerInstance); ServerInstance->AddCommand(mycommand); + Implementation eventlist[] = { I_OnDecodeMetaData, I_OnWhoisLine, I_OnSyncUserMetaData, I_OnUserQuit, I_OnCleanup }; + ServerInstance->Modules->Attach(eventlist, this, 5); } - void Implements(char* List) - { - List[I_OnDecodeMetaData] = List[I_OnWhoisLine] = List[I_OnSyncUserMetaData] = List[I_OnUserQuit] = List[I_OnCleanup] = 1; - } // :kenny.chatspike.net 320 Brain Azhrarn :is getting paid to play games. - int OnWhoisLine(userrec* user, userrec* dest, int &numeric, std::string &text) + int OnWhoisLine(User* user, User* dest, int &numeric, std::string &text) { /* We use this and not OnWhois because this triggers for remote, too */ if (numeric == 312) @@ -146,11 +143,11 @@ class ModuleCustomTitle : public Module } // Whenever the linking module wants to send out data, but doesnt know what the data - // represents (e.g. it is metadata, added to a userrec or chanrec by a module) then + // represents (e.g. it is metadata, added to a User or Channel by a module) then // this method is called. We should use the ProtoSendMetaData function after we've // corrected decided how the data should look, to send the metadata on its way if // it is ours. - virtual void OnSyncUserMetaData(userrec* user, Module* proto, void* opaque, const std::string &extname, bool displayable) + virtual void OnSyncUserMetaData(User* user, Module* proto, void* opaque, const std::string &extname, bool displayable) { // check if the linking module wants to know about OUR metadata if (extname == "ctitle") @@ -168,14 +165,14 @@ class ModuleCustomTitle : public Module } // when a user quits, tidy up their metadata - virtual void OnUserQuit(userrec* user, const std::string &message, const std::string &oper_message) + virtual void OnUserQuit(User* user, const std::string &message, const std::string &oper_message) { std::string* ctitle; user->GetExt("ctitle", ctitle); if (ctitle) { user->Shrink("ctitle"); - DELETE(ctitle); + delete ctitle; } } @@ -184,13 +181,13 @@ class ModuleCustomTitle : public Module { if (target_type == TYPE_USER) { - userrec* user = (userrec*)item; + User* user = (User*)item; std::string* ctitle; user->GetExt("ctitle", ctitle); if (ctitle) { user->Shrink("ctitle"); - DELETE(ctitle); + delete ctitle; } } } @@ -207,7 +204,7 @@ class ModuleCustomTitle : public Module // check if its our metadata key, and its associated with a user if ((target_type == TYPE_USER) && (extname == "ctitle")) { - userrec* dest = (userrec*)target; + User* dest = (User*)target; // if they dont already have an ctitle field, accept the remote server's std::string* text; if (!dest->GetExt("ctitle", text))