]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Fix for bug #605 reported by MacGuyver, if a line is expired when we are adding anoth...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 22 Sep 2008 01:11:23 +0000 (01:11 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Mon, 22 Sep 2008 01:11:23 +0000 (01:11 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10589 e03df62e-2008-0410-955e-edbf42e46eb7

src/modules/m_spanningtree/addline.cpp
src/xline.cpp

index 08f8857974afeec92aed1c3419a964b6b4689ed8..e2f4002ce99957962b49853e0c64aeeb36d96fe4 100644 (file)
@@ -58,7 +58,7 @@ bool TreeSocket::AddLine(const std::string &prefix, std::deque<std::string> &par
                return true;
        }
        xl->SetCreateTime(atoi(params[3].c_str()));
-       if (ServerInstance->XLines->AddLine(xl,NULL))
+       if (ServerInstance->XLines->AddLine(xl, NULL))
        {
                if (xl->duration)
                {
index 0c6965fe31b03b7f8aaac6b1a30c5be035ae180f..bc1cf9183963227dae2fa7ab7b83c09e9d4845c1 100644 (file)
@@ -170,7 +170,16 @@ bool XLineManager::AddLine(XLine* line, User* user)
        ServerInstance->BanCache->RemoveEntries(line->type, false); // XXX perhaps remove ELines here?
 
        if (DelLine(line->Displayable(), line->type, user, true))
-               return false;
+       {
+               /* Line exists, check if its an expired line */
+               ContainerIter x = lookup_lines.find(line->type);
+               LookupIter i = x->second.find(line->Displayable());
+
+               if (i->second->duration && ServerInstance->Time() > i->second->expiry)
+                       ExpireLine(x, i);
+               else
+                       return false;
+       }
 
        /*ELine* item = new ELine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());*/
        XLineFactory* xlf = GetFactory(line->type);