1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/* OperServ core functions
*
* (C) 2003-2011 Anope Team
* Contact us at team@anope.org
*
* Please read COPYING and README for further details.
*
* Based on the original code of Epona by Lara.
* Based on the original code of Services by Andy Church.
*/
/*************************************************************************/
#include "module.h"
class CommandOSNOOP : public Command
{
public:
CommandOSNOOP(Module *creator) : Command(creator, "operserv/noop", 2, 2)
{
this->SetDesc(_("Temporarily remove all O:lines of a server remotely"));
this->SetSyntax(_("SET \037server\037"));
this->SetSyntax(_("REVOKE \037server\037"));
}
void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms)
{
User *u = source.u;
const Anope::string &cmd = params[0];
const Anope::string &server = params[1];
Server *s = Server::Find(server);
if (s == NULL)
source.Reply(_("Server %s does not exist."), server.c_str());
else if (cmd.equals_ci("SET"))
{
/* Remove the O:lines */
ircdproto->SendSVSNOOP(s, true);
Log(LOG_ADMIN, u, this) << "SET on " << s->GetName();
source.Reply(_("All O:lines of \002%s\002 have been removed."), s->GetName().c_str());
Anope::string reason = "NOOP command used by " + u->nick;
/* Kill all the IRCops of the server */
for (Anope::insensitive_map<User *>::iterator it = UserListByNick.begin(); it != UserListByNick.end();)
{
User *u2 = it->second;
++it;
if (u2 && u2->HasMode(UMODE_OPER) && u2->server == s)
u2->Kill(Config->OperServ, reason);
}
}
else if (cmd.equals_ci("REVOKE"))
{
Log(LOG_ADMIN, u, this) << "REVOKE on " << s->GetName();
ircdproto->SendSVSNOOP(s, false);
source.Reply(_("All O:lines of \002%s\002 have been reset."), s->GetName().c_str());
}
else
this->OnSyntaxError(source, "");
return;
}
bool OnHelp(CommandSource &source, const Anope::string &subcommand)
{
this->SendSyntax(source);
source.Reply(" ");
source.Reply(_("\002NOOP SET\002 remove all O:lines of the given\n"
"\002server\002 and kill all IRCops currently on it to\n"
"prevent them from rehashing the server (because this\n"
"would just cancel the effect).\n"
"\002NOOP REVOKE\002 makes all removed O:lines available again\n"
"on the given \002server\002.\n"));
return true;
}
};
class OSNOOP : public Module
{
CommandOSNOOP commandosnoop;
public:
OSNOOP(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE),
commandosnoop(this)
{
this->SetAuthor("Anope");
ModuleManager::RegisterService(&commandosnoop);
}
};
MODULE_INIT(OSNOOP)
|