]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_filter.h
Someone is getting slapped for this; the new hidesplits/hidebans behavior doesn't...
[user/henk/code/inspircd.git] / src / modules / m_filter.h
index 28259277617ff98afe13478582bb43aaba1541c8..896c75dc25732b361c84d53b0c915fc3553680dd 100644 (file)
@@ -284,7 +284,11 @@ int FilterBase::OnPreCommand(const std::string &command, const char** parameters
                                }
                                if (f->action == "gline")
                                {
-                                       if (ServerInstance->XLines->add_gline(f->gline_time, ServerInstance->Config->ServerName, f->reason.c_str(), user->MakeHostIP()))
+                                       /* Note: We gline *@IP so that if their host doesnt resolve the gline still applies. */
+                                       std::string wild = "*@";
+                                       wild.append(user->GetIPString());
+
+                                       if (ServerInstance->XLines->add_gline(f->gline_time, ServerInstance->Config->ServerName, f->reason.c_str(), wild.c_str()))
                                        {
                                                ServerInstance->XLines->apply_lines(APPLY_GLINES);
                                                FOREACH_MOD(I_OnAddGLine,OnAddGLine(f->gline_time, NULL, f->reason, user->MakeHostIP()));
@@ -311,7 +315,13 @@ Version FilterBase::GetVersion()
 std::string FilterBase::EncodeFilter(FilterResult* filter)
 {
        std::ostringstream stream;
-       stream << filter->freeform << " " << filter->action << " " << filter->gline_time << " " << filter->reason;
+       std::string x = filter->freeform;
+
+       for (std::string::iterator n = x.begin(); n != x.end(); n++)
+               if (*n == ' ')
+                       *n = '\7';
+
+       stream << x << " " << filter->action << " " << filter->gline_time << " " << filter->reason;
        return stream.str();
 }
 
@@ -319,10 +329,16 @@ FilterResult FilterBase::DecodeFilter(const std::string &data)
 {
        FilterResult res;
        std::istringstream stream(data);
+
        stream >> res.freeform;
        stream >> res.action;
        stream >> res.gline_time;
        res.reason = stream.str();
+
+       for (std::string::iterator n = res.freeform.begin(); n != res.freeform.end(); n++)
+               if (*n == '\7')
+                       *n = ' ';
+
        return res;
 }