X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_check.cpp;h=07276445f220e1c29132aecf8131221486b59738;hb=1c89cb1002c915a18abd1dda2204b5c3ea1b5515;hp=c1af8ead2070a3f07b5055c4384ec9666b5a277f;hpb=e336f4047eacfd09d4c57d61b348c9178d4573af;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_check.cpp b/src/modules/m_check.cpp index c1af8ead2..07276445f 100644 --- a/src/modules/m_check.cpp +++ b/src/modules/m_check.cpp @@ -1,19 +1,28 @@ -/* +------------------------------------+ - * | 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) 2009-2010 Daniel De Graaf + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2006-2007 Robin Burchell + * Copyright (C) 2006 Craig Edwards * - * 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" -/* $ModDesc: Provides the /check command to retrieve information on a user, channel, or IP address */ +/* $ModDesc: Provides the /CHECK command to retrieve information on a user, channel, hostname or IP address */ + +#include "inspircd.h" /** Handle /CHECK */ @@ -33,7 +42,7 @@ class CommandCheck : public Command return std::string(timebuf); } - void dumpExt(User* user, std::string checkstr, Extensible* ext) + void dumpExt(User* user, const std::string& checkstr, Extensible* ext) { std::stringstream dumpkeys; for(Extensible::ExtensibleStore::const_iterator i = ext->GetExtList().begin(); i != ext->GetExtList().end(); i++) @@ -59,7 +68,7 @@ class CommandCheck : public Command std::string checkstr; std::string chliststr; - checkstr = std::string(":") + ServerInstance->Config->ServerName + " 304 " + std::string(user->nick) + " :CHECK"; + checkstr = ":" + ServerInstance->Config->ServerName + " 304 " + user->nick + " :CHECK"; targuser = ServerInstance->FindNick(parameters[0]); targchan = ServerInstance->FindChan(parameters[0]); @@ -75,6 +84,7 @@ class CommandCheck : public Command if (targuser) { + LocalUser* loctarg = IS_LOCAL(targuser); /* /check on a user */ user->SendText(checkstr + " nuh " + targuser->GetFullHost()); user->SendText(checkstr + " realnuh " + targuser->GetFullRealHost()); @@ -85,7 +95,7 @@ class CommandCheck : public Command user->SendText(checkstr + " uid " + targuser->uuid); user->SendText(checkstr + " signon " + timestring(targuser->signon)); user->SendText(checkstr + " nickts " + timestring(targuser->age)); - if (IS_LOCAL(targuser)) + if (loctarg) user->SendText(checkstr + " lastmsg " + timestring(targuser->idle_lastmsg)); if (IS_AWAY(targuser)) @@ -100,17 +110,17 @@ class CommandCheck : public Command OperInfo* oper = targuser->oper; /* user is an oper of type ____ */ user->SendText(checkstr + " opertype " + oper->NameStr()); - if (IS_LOCAL(targuser)) + if (loctarg) { std::string umodes; std::string cmodes; for(char c='A'; c < 'z'; c++) { ModeHandler* mh = ServerInstance->Modes->FindMode(c, MODETYPE_USER); - if (mh && mh->NeedsOper() && oper->AllowedUserModes[c]) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_USER)) umodes.push_back(c); mh = ServerInstance->Modes->FindMode(c, MODETYPE_CHANNEL); - if (mh && mh->NeedsOper() && oper->AllowedChanModes[c]) + if (mh && mh->NeedsOper() && loctarg->HasModePermission(c, MODETYPE_CHANNEL)) cmodes.push_back(c); } user->SendText(checkstr + " modeperms user=" + umodes + " channel=" + cmodes); @@ -133,7 +143,6 @@ class CommandCheck : public Command } } - LocalUser* loctarg = IS_LOCAL(targuser); if (loctarg) { user->SendText(checkstr + " clientaddr " + irc::sockets::satouser(loctarg->client_sa)); @@ -190,7 +199,6 @@ class CommandCheck : public Command } irc::modestacker modestack(true); - std::string letter_b("b"); for(BanList::iterator b = targchan->bans.begin(); b != targchan->bans.end(); ++b) { modestack.Push('b', b->data); @@ -216,13 +224,13 @@ class CommandCheck : public Command if (InspIRCd::Match(a->second->host, parameters[0], ascii_case_insensitive_map) || InspIRCd::Match(a->second->dhost, parameters[0], ascii_case_insensitive_map)) { /* host or vhost matches mask */ - user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost()); + user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost() + " " + a->second->GetIPString() + " " + a->second->fullname); } /* IP address */ else if (InspIRCd::MatchCIDR(a->second->GetIPString(), parameters[0])) { /* same IP. */ - user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost()); + user->SendText(checkstr + " match " + ConvToStr(++x) + " " + a->second->GetFullRealHost() + " " + a->second->GetIPString() + " " + a->second->fullname); } } @@ -250,7 +258,11 @@ class ModuleCheck : public Module public: ModuleCheck() : mycommand(this) { - ServerInstance->AddCommand(&mycommand); + } + + void init() + { + ServerInstance->Modules->AddService(mycommand); } ~ModuleCheck() @@ -275,7 +287,7 @@ class ModuleCheck : public Module Version GetVersion() { - return Version("CHECK command, view user/channel details", VF_VENDOR|VF_OPTCOMMON); + return Version("CHECK command, view user, channel, IP address or hostname information", VF_VENDOR|VF_OPTCOMMON); } };