28
28
CmdResult cmd_kline::Handle (const char** parameters, int pcnt, userrec *user)
30
std::string target = parameters[0];
32
IdentHostPair ih = ServerInstance->XLines->IdentSplit(parameters[0]);
35
userrec* find = ServerInstance->FindNick(target.c_str());
38
std::string c = std::string("*@") + find->GetIPString();
40
ih.second = find->GetIPString();
44
ih = ServerInstance->XLines->IdentSplit(target.c_str());
48
user->WriteServ("NOTICE %s :*** Target not found", user->nick);
33
52
if (ServerInstance->HostMatchesEveryone(ih.first+"@"+ih.second,user))
34
53
return CMD_FAILURE;
36
if (!strchr(parameters[0],'@'))
38
user->WriteServ("NOTICE %s :*** K-Line must contain a username, e.g. *@%s",user->nick,parameters[0]);
41
else if (strchr(parameters[0],'!'))
55
if (strchr(target.c_str(),'!'))
43
user->WriteServ("NOTICE %s :*** K-Line cannot contain a nickname!",user->nick);
57
user->WriteServ("NOTICE %s :*** K-Line cannot operate on nick!user@host masks",user->nick);
44
58
return CMD_FAILURE;
47
61
long duration = ServerInstance->Duration(parameters[1]);
48
if (ServerInstance->XLines->add_kline(duration,user->nick,parameters[2],parameters[0]))
62
if (ServerInstance->XLines->add_kline(duration,user->nick,parameters[2],target.c_str()))
50
64
int to_apply = APPLY_KLINES;
52
FOREACH_MOD(I_OnAddKLine,OnAddKLine(duration, user, parameters[2], parameters[0]));
66
FOREACH_MOD(I_OnAddKLine,OnAddKLine(duration, user, parameters[2], target.c_str()));
56
ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent K-line for %s.",user->nick,parameters[0]);
70
ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent K-line for %s.",user->nick,target.c_str());
57
71
to_apply |= APPLY_PERM_ONLY;
61
75
time_t c_requires_crap = duration + ServerInstance->Time();
62
ServerInstance->SNO->WriteToSnoMask('x',"%s added timed K-line for %s, expires on %s",user->nick,parameters[0],
76
ServerInstance->SNO->WriteToSnoMask('x',"%s added timed K-line for %s, expires on %s",user->nick,target.c_str(),
63
77
ServerInstance->TimeString(c_requires_crap).c_str());
70
user->WriteServ("NOTICE %s :*** K-Line for %s already exists",user->nick,parameters[0]);
84
user->WriteServ("NOTICE %s :*** K-Line for %s already exists",user->nick,target.c_str());
75
if (ServerInstance->XLines->del_kline(parameters[0]))
89
if (ServerInstance->XLines->del_kline(target.c_str()))
77
FOREACH_MOD(I_OnDelKLine,OnDelKLine(user, parameters[0]));
78
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed K-line on %s.",user->nick,parameters[0]);
91
FOREACH_MOD(I_OnDelKLine,OnDelKLine(user, target.c_str()));
92
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed K-line on %s.",user->nick,target.c_str());
82
user->WriteServ("NOTICE %s :*** K-Line %s not found in list, try /stats k.",user->nick,parameters[0]);
96
user->WriteServ("NOTICE %s :*** K-Line %s not found in list, try /stats k.",user->nick,target.c_str());