28
28
CmdResult cmd_gline::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 :*** G-Line must contain a username, e.g. *@%s",user->nick,parameters[0]);
41
else if (strchr(parameters[0],'!'))
55
else if (strchr(target.c_str(),'!'))
43
user->WriteServ("NOTICE %s :*** G-Line cannot contain a nickname!",user->nick);
57
user->WriteServ("NOTICE %s :*** G-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_gline(duration,user->nick,parameters[2],parameters[0]))
62
if (ServerInstance->XLines->add_gline(duration,user->nick,parameters[2],target.c_str()))
50
64
int to_apply = APPLY_GLINES;
52
FOREACH_MOD(I_OnAddGLine,OnAddGLine(duration, user, parameters[2], parameters[0]));
66
FOREACH_MOD(I_OnAddGLine,OnAddGLine(duration, user, parameters[2], target.c_str()));
56
ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent G-line for %s.",user->nick,parameters[0]);
70
ServerInstance->SNO->WriteToSnoMask('x',"%s added permanent G-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 G-line for %s, expires on %s",user->nick,parameters[0],
76
ServerInstance->SNO->WriteToSnoMask('x',"%s added timed G-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 :*** G-Line for %s already exists",user->nick,parameters[0]);
84
user->WriteServ("NOTICE %s :*** G-Line for %s already exists",user->nick,target.c_str());
76
if (ServerInstance->XLines->del_gline(parameters[0]))
90
if (ServerInstance->XLines->del_gline(target.c_str()))
78
FOREACH_MOD(I_OnDelGLine,OnDelGLine(user, parameters[0]));
79
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed G-line on %s.",user->nick,parameters[0]);
92
FOREACH_MOD(I_OnDelGLine,OnDelGLine(user, target.c_str()));
93
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed G-line on %s.",user->nick,target.c_str());
83
user->WriteServ("NOTICE %s :*** G-line %s not found in list, try /stats g.",user->nick,parameters[0]);
97
user->WriteServ("NOTICE %s :*** G-line %s not found in list, try /stats g.",user->nick,target.c_str());