diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-02-08 18:14:12 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-02-08 18:14:12 +0000 |
commit | 3b9cf59ba05e57fe16ff13b2782bc90e4a0685a5 (patch) | |
tree | 07351cd9350aa8a8e847f4c18fe868c4f6a89e14 /src/modules/m_spanningtree.cpp | |
parent | 1674c21da1f2539806250982dc91ac7ad8a24984 (diff) |
Checks to not propogate invalid or already-existing Xlines
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3143 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_spanningtree.cpp')
-rw-r--r-- | src/modules/m_spanningtree.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index e1dbb5291..2aadd97f0 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -1554,35 +1554,42 @@ class TreeSocket : public InspSocket if (params.size() < 6) return true; + bool propogate = false; + switch (*(params[0].c_str())) { case 'Z': - add_zline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + propogate = add_zline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); zline_set_creation_time((char*)params[1].c_str(), atoi(params[3].c_str())); break; case 'Q': - add_qline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + propogate = add_qline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); qline_set_creation_time((char*)params[1].c_str(), atoi(params[3].c_str())); break; case 'E': - add_eline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + propogate = add_eline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); eline_set_creation_time((char*)params[1].c_str(), atoi(params[3].c_str())); break; case 'G': - add_gline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + propogate = add_gline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); gline_set_creation_time((char*)params[1].c_str(), atoi(params[3].c_str())); break; case 'K': - add_kline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + propogate = add_kline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str()); + kline_set_creation_time((char*)params[1].c_str(), atoi(params[3].c_str())); break; default: /* Just in case... */ Srv->SendOpers("*** \2WARNING\2: Invalid xline type '"+params[0]+"' sent by server "+prefix+", ignored!"); + propogate = false; break; } /* Send it on its way */ - params[5] = ":" + params[5]; - DoOneToAllButSender(prefix,"ADDLINE",params,prefix); + if (propogate) + { + params[5] = ":" + params[5]; + DoOneToAllButSender(prefix,"ADDLINE",params,prefix); + } return true; } |