]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Switch from the Ubuntu 16.04 image to the 18.04 Ubuntu image.
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index 91f22928c31ffdf3fb82317dd6362427c00a398a..007f0efef0b084d5bd5231ad72359a8e3697c224 100644 (file)
@@ -4,7 +4,7 @@
  *   Copyright (C) 2019 Matt Schatz <genius3000@g3k.solutions>
  *   Copyright (C) 2018 linuxdaemon <linuxdaemon.irc@gmail.com>
  *   Copyright (C) 2016 Adam <Adam@anope.org>
- *   Copyright (C) 2013, 2017-2019 Sadie Powell <sadie@witchery.services>
+ *   Copyright (C) 2013, 2017-2020 Sadie Powell <sadie@witchery.services>
  *   Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
  *   Copyright (C) 2012, 2014, 2019 Robby <robby@chatbelgie.be>
  *   Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
@@ -154,6 +154,8 @@ class DCCAllowExt : public SimpleExtItem<dccallowlist>
                        list->push_back(dccallow);
                }
 
+               // The value was well formed.
+               set(user, list);
        }
 
        std::string ToInternal(const Extensible* container, void* item) const CXX11_OVERRIDE
@@ -187,7 +189,7 @@ class CommandDccallow : public Command
                , ext(Ext)
        {
                syntax = "[(+|-)<nick> [<time>]]|[LIST|HELP]";
-               /* XXX we need to fix this so it can work with translation stuff (i.e. move +- into a seperate param */
+               /* XXX we need to fix this so it can work with translation stuff (i.e. move +- into a separate param */
        }
 
        CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
@@ -206,13 +208,13 @@ class CommandDccallow : public Command
                        // if they didn't specify an action, this is probably a command
                        if (action != '+' && action != '-')
                        {
-                               if (!strcasecmp(parameters[0].c_str(), "LIST"))
+                               if (irc::equals(parameters[0], "LIST"))
                                {
                                        // list current DCCALLOW list
                                        DisplayDCCAllowList(user);
                                        return CMD_FAILURE;
                                }
-                               else if (!strcasecmp(parameters[0].c_str(), "HELP"))
+                               else if (irc::equals(parameters[0], "HELP"))
                                {
                                        // display help
                                        DisplayHelp(user);
@@ -350,7 +352,7 @@ class CommandDccallow : public Command
 
        void DisplayDCCAllowList(User* user)
        {
-                // display current DCCALLOW list
+               // display current DCCALLOW list
                user->WriteNumeric(RPL_DCCALLOWSTART, "Users on your DCCALLOW list:");
 
                dl = ext.get(user);
@@ -413,14 +415,16 @@ class ModuleDCCAllow : public Module
                        if (user == u)
                                return MOD_RES_PASSTHRU;
 
-                       if ((details.text.length()) && (details.text[0] == '\1'))
+                       std::string ctcpname;
+                       std::string ctcpbody;
+                       if (details.IsCTCP(ctcpname, ctcpbody))
                        {
                                Expire();
 
                                // :jamie!jamie@test-D4457903BA652E0F.silverdream.org PRIVMSG eimaj :DCC SEND m_dnsbl.cpp 3232235786 52650 9676
                                // :jamie!jamie@test-D4457903BA652E0F.silverdream.org PRIVMSG eimaj :VERSION
 
-                               if (strncmp(details.text.c_str(), "\1DCC ", 5) == 0)
+                               if (irc::equals(ctcpname, "DCC") && !ctcpbody.empty())
                                {
                                        dl = ext.get(u);
                                        if (dl && dl->size())
@@ -430,18 +434,17 @@ class ModuleDCCAllow : public Module
                                                                return MOD_RES_PASSTHRU;
                                        }
 
-                                       std::string buf = details.text.substr(5);
-                                       size_t s = buf.find(' ');
+                                       size_t s = ctcpbody.find(' ');
                                        if (s == std::string::npos)
                                                return MOD_RES_PASSTHRU;
 
-                                       const std::string type = buf.substr(0, s);
+                                       const std::string type = ctcpbody.substr(0, s);
 
-                                       if (stdalgo::string::equalsci(type, "SEND"))
+                                       if (irc::equals(type, "SEND"))
                                        {
                                                size_t first;
 
-                                               buf = buf.substr(s + 1);
+                                               std::string buf = ctcpbody.substr(s + 1);
 
                                                if (!buf.empty() && buf[0] == '"')
                                                {
@@ -489,7 +492,7 @@ class ModuleDCCAllow : public Module
                                                u->WriteNotice("If you trust " + user->nick + " and were expecting this, you can type /DCCALLOW HELP for information on the DCCALLOW system.");
                                                return MOD_RES_DENY;
                                        }
-                                       else if ((blockchat) && (stdalgo::string::equalsci(type, "CHAT")))
+                                       else if (blockchat && irc::equals(type, "CHAT"))
                                        {
                                                user->WriteNotice("The user " + u->nick + " is not accepting DCC CHAT requests from you.");
                                                u->WriteNotice(user->nick + " (" + user->ident + "@" + user->GetDisplayedHost() + ") attempted to initiate a DCC CHAT session, which was blocked.");
@@ -604,7 +607,7 @@ class ModuleDCCAllow : public Module
 
        Version GetVersion() CXX11_OVERRIDE
        {
-               return Version("Provides the DCCALLOW command", VF_COMMON | VF_VENDOR);
+               return Version("Allows the server administrator to configure what files are allowed to be sent via DCC SEND and allows users to configure who can send them DCC CHAT and DCC SEND requests.", VF_COMMON | VF_VENDOR);
        }
 };