"Brain would then be able to send you files. They would have to",
"resend the file again if the server gave them an error message",
"before you added them to your DCCALLOW list.",
- "DCCALLOW entries will be temporary by default, if you want to add",
+ "DCCALLOW entries will be temporary. If you want to add",
"them to your DCCALLOW list until you leave IRC, type:",
"/DCCALLOW +Brain 0",
"To remove the user from your DCCALLOW list, type:",
"/DCCALLOW LIST",
"NOTE: If the user leaves IRC or changes their nickname",
" they will be removed from your DCCALLOW list.",
- " your DCCALLOW list will be deleted when you leave IRC."
+ " Your DCCALLOW list will be deleted when you leave IRC."
};
class BannedFileList
public:
unsigned int maxentries;
+ unsigned long defaultlength;
CommandDccallow(Module* parent, DCCAllowExt& Ext)
: Command(parent, "DCCALLOW", 0)
, ext(Ext)
CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
{
- /* syntax: DCCALLOW [+|-]<nick> (<time>) */
+ /* syntax: DCCALLOW [(+|-)<nick> [<time>]]|[LIST|HELP] */
if (!parameters.size())
{
// display current DCCALLOW list
}
std::string mask = target->nick+"!"+target->ident+"@"+target->GetDisplayedHost();
- std::string default_length = ServerInstance->Config->ConfValue("dccallow")->getString("length");
-
unsigned long length;
if (parameters.size() < 2)
{
- length = InspIRCd::Duration(default_length);
+ length = defaultlength;
}
- else if (!atoi(parameters[1].c_str()))
+ else if (!InspIRCd::IsValidDuration(parameters[1]))
{
- length = 0;
+ user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, InspIRCd::Format("%s is not a valid DCCALLOW duration", parameters[1].c_str()));
+ return CMD_FAILURE;
}
else
{
- length = InspIRCd::Duration(parameters[1]);
+ if (!InspIRCd::Duration(parameters[1], length))
+ {
+ user->WriteNotice("*** Invalid duration for DCC allow");
+ return CMD_FAILURE;
+ }
}
if (!InspIRCd::IsValidMask(mask))
if (length > 0)
{
- user->WriteNumeric(RPL_DCCALLOWTIMED, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for %ld seconds", target->nick.c_str(), length));
+ user->WriteNumeric(RPL_DCCALLOWTIMED, user->nick, InspIRCd::Format("Added %s to DCCALLOW list for %s", target->nick.c_str(), InspIRCd::DurationString(length).c_str()));
}
else
{
{
DCCAllowExt ext;
CommandDccallow cmd;
+ bool blockchat;
+ std::string defaultaction;
public:
ModuleDCCAllow()
: ext("dccallow", ExtensionItem::EXT_USER, this)
, cmd(this, ext)
+ , blockchat(false)
{
}
const std::string type = buf.substr(0, s);
- ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow");
- bool blockchat = conftag->getBool("blockchat");
-
if (stdalgo::string::equalsci(type, "SEND"))
{
size_t first;
if (s == std::string::npos)
return MOD_RES_PASSTHRU;
- std::string defaultaction = conftag->getString("action");
std::string filename = buf.substr(first, s);
bool found = false;
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
- ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
- cmd.maxentries = tag->getUInt("maxentries", 20);
-
- bfl.clear();
+ bannedfilelist newbfl;
ConfigTagList tags = ServerInstance->Config->ConfTags("banfile");
for (ConfigIter i = tags.first; i != tags.second; ++i)
{
BannedFileList bf;
bf.filemask = i->second->getString("pattern");
bf.action = i->second->getString("action");
- bfl.push_back(bf);
+ newbfl.push_back(bf);
}
+ bfl.swap(newbfl);
+
+ ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
+ cmd.maxentries = tag->getUInt("maxentries", 20);
+ cmd.defaultlength = tag->getDuration("length", 0);
+ blockchat = tag->getBool("blockchat");
+ defaultaction = tag->getString("action");
}
Version GetVersion() CXX11_OVERRIDE
{
- return Version("Provides support for the /DCCALLOW command", VF_COMMON | VF_VENDOR);
+ return Version("Provides the DCCALLOW command", VF_COMMON | VF_VENDOR);
}
};