X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Ftreesocket2.cpp;h=8700d57a28286d32089f0f4ac434305944ba0bae;hb=8c2d96013084de950e3a63be4ae6ed626c4093ab;hp=c2bd83e53d64b1de07b1498e43a9138024b20540;hpb=a09949ae8654bde17627a0ea3dc162482e4df264;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index c2bd83e53..8700d57a2 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -361,6 +361,17 @@ bool TreeSocket::ProcessLine(std::string &line) { return this->Admin(prefix, params); } + else if (command == "MAP") + { + User* user = Instance->FindNick(prefix); + if (user) + { + const char* ptrs[127]; + for (size_t n = 0; (n < params.size()) && (n < 127); ++n) + ptrs[n] = params[n].c_str(); + return Utils->Creator->HandleMap(ptrs, params.size(), user); + } + } else if (command == "SERVER") { return this->RemoteServer(prefix,params); @@ -381,10 +392,6 @@ bool TreeSocket::ProcessLine(std::string &line) { return this->ForceTopic(prefix,params); } - else if (command == "REHASH") - { - return this->RemoteRehash(prefix,params); - } else if (command == "METADATA") { return this->MetaData(prefix,params); @@ -441,11 +448,12 @@ bool TreeSocket::ProcessLine(std::string &line) { if (params.size() == 3) { + TreeServer* pf = Utils->FindServer(prefix); User* user = this->Instance->FindNick(params[1]); Channel* chan = this->Instance->FindChan(params[0]); - if (user && chan) + if (pf && user && chan) { - if (!chan->ServerKickUser(user, params[2].c_str(), false)) + if (!chan->ServerKickUser(user, params[2].c_str(), false, pf->GetName().c_str())) /* Yikes, the channels gone! */ delete chan; } @@ -469,12 +477,6 @@ bool TreeSocket::ProcessLine(std::string &line) } return true; } - else if (command == "OPERNOTICE") - { - if (params.size() >= 1) - Instance->SNO->WriteToSnoMask('A', "From " + (ServerSource ? ServerSource->GetName().c_str() : prefix) + ": " + params[0]); - return Utils->DoOneToAllButSenderRaw(line, sourceserv, prefix, command, params); - } else if (command == "MODENOTICE") { if (params.size() >= 2) @@ -517,7 +519,6 @@ bool TreeSocket::ProcessLine(std::string &line) } else if (command == "ENCAP") { - ServerSource->FinishBurst(); return this->Encap(prefix, params); } else if (command == "MODE") @@ -600,18 +601,20 @@ bool TreeSocket::ProcessLine(std::string &line) switch (this->Instance->CallCommandHandler(command.c_str(), strparams, params.size(), who)) { case CMD_INVALID: - // command is irc::string, hence ugliness + /* + * XXX: command is irc::string, hence ugliness + */ this->SendError("Unrecognised or malformed command '" + std::string(command.c_str()) + "' -- possibly loaded mismatched modules"); return false; break; - /* - * CMD_LOCALONLY is aliased to CMD_FAILURE, so this won't go out onto the network. - */ case CMD_FAILURE: + /* + * CMD_LOCALONLY is aliased to CMD_FAILURE, so this won't go out onto the network. + */ return true; break; default: - /* CMD_SUCCESS and CMD_USER_DELETED fall through here */ + /* CMD_SUCCESS falls through here */ break; } @@ -676,18 +679,19 @@ void TreeSocket::OnClose() int TreeSocket::OnIncomingConnection(int newsock, char* ip) { - /* To prevent anyone from attempting to flood opers/DDoS by connecting to the server port, - * or discovering if this port is the server port, we don't allow connections from any - * IPs for which we don't have a link block. - */ bool found = false; found = (std::find(Utils->ValidIPs.begin(), Utils->ValidIPs.end(), ip) != Utils->ValidIPs.end()); if (!found) { for (std::vector::iterator i = Utils->ValidIPs.begin(); i != Utils->ValidIPs.end(); i++) - if (irc::sockets::MatchCIDR(ip, (*i).c_str())) + { + if ((*i) == "*" || irc::sockets::MatchCIDR(ip, (*i).c_str())) + { found = true; + break; + } + } if (!found) {