DCCAllow() { }
- DCCAllow(std::string nick, std::string hm, time_t so, long ln) : nickname(nick), hostmask(hm), set_on(so), length(ln) { }
+ DCCAllow(const std::string &nick, const std::string &hm, const time_t so, const long ln) : nickname(nick), hostmask(hm), set_on(so), length(ln) { }
};
typedef std::vector<userrec *> userlist;
cmd_dccallow(InspIRCd* Me) : command_t(Me, "DCCALLOW", 0, 0)
{
this->source = "m_dccallow.so";
- syntax = "{[+|-]<nick> <time>}";
+ syntax = "{[+|-]<nick> <time>|HELP|LIST}";
}
CmdResult Handle(const char **parameters, int pcnt, userrec *user)
{
// display current DCCALLOW list
DisplayDCCAllowList(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
else if (pcnt > 0)
{
{
// list current DCCALLOW list
DisplayDCCAllowList(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
else if (!strcasecmp(parameters[0], "HELP"))
{
// display help
DisplayHelp(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
}
for (userlist::iterator j = ul.begin(); j != ul.end(); ++j)
{
userrec* u = (userrec*)(*j);
- if (u->nick == user->nick)
+ if (u == user)
{
ul.erase(j);
break;
if (!dl)
{
dl = new dccallowlist;
- user->Extend(std::string("dccallow_list"), dl);
+ user->Extend("dccallow_list", dl);
// add this user to the userlist
ul.push_back(user);
}
if (k->nickname == target->nick)
{
user->WriteServ("996 %s %s :%s is already on your DCCALLOW list", user->nick, user->nick, target->nick);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
+ }
+ else if (ServerInstance->MatchText(user->GetFullHost(), k->hostmask))
+ {
+ user->WriteServ("996 %s %s :You cannot add yourself to your own DCCALLOW list!", user->nick, user->nick);
+ return CMD_FAILURE;
}
}
std::string mask = std::string(target->nick)+"!"+std::string(target->ident)+"@"+std::string(target->dhost);
- std::string default_length = Conf->ReadValue("dccallow", "length", 0).c_str();
+ std::string default_length = Conf->ReadValue("dccallow", "length", 0);
long length;
- if (pcnt == 1 || ServerInstance->Duration(parameters[1]) < 1)
+ if (pcnt < 2)
{
length = ServerInstance->Duration(default_length.c_str());
}
- else if (parameters[1] == 0)
+ else if (!atoi(parameters[1]))
{
length = 0;
}
return CMD_FAILURE;
}
}
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
void DisplayHelp(userrec* user)
if (target_type == TYPE_USER)
{
userrec* u = (userrec*)dest;
+
+ /* Always allow a user to dcc themselves (although... why?) */
+ if (user == u)
+ return 0;
if ((text.length()) && (text[0] == '\1'))
{
for (userlist::iterator j = ul.begin(); j != ul.end(); ++j)
{
userrec* u = (userrec*)(*j);
- if (u->nick == user->nick)
+ if (u == user)
{
- ul.erase(j);
+ ul.erase(j);
break;
}
}
virtual Version GetVersion()
{
- return Version(1,0,0,0,VF_COMMON,API_VERSION);
+ return Version(1,1,0,0,VF_COMMON,API_VERSION);
}
};