diff options
author | Adam <Adam@anope.org> | 2010-07-10 20:58:29 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-07-10 20:58:29 -0400 |
commit | fa622aae38b7aa11ecab78412e91e262ae6fb3e3 (patch) | |
tree | aaf62febc418af7de308f41f8140b1f5b031909d | |
parent | 07ec79e8818d62ba1225674891eaf7fbd3e89bbd (diff) |
Fixed tracking of introducing and quitting juped servers
-rw-r--r-- | src/core/os_jupe.cpp | 2 | ||||
-rw-r--r-- | src/servers.cpp | 34 |
2 files changed, 20 insertions, 16 deletions
diff --git a/src/core/os_jupe.cpp b/src/core/os_jupe.cpp index 8718f95d8..341e2b28d 100644 --- a/src/core/os_jupe.cpp +++ b/src/core/os_jupe.cpp @@ -36,7 +36,7 @@ class CommandOSJupe : public Command snprintf(rbuf, sizeof(rbuf), "Juped by %s%s%s", u->nick.c_str(), reason ? ": " : "", reason ? reason : ""); if (server) ircdproto->SendSquit(jserver, rbuf); - Server *juped_server = new Server(Me, jserver, 0, rbuf, ircd->ts6 ? ts6_sid_retrieve() : ""); + Server *juped_server = new Server(Me, jserver, 1, rbuf, ircd->ts6 ? ts6_sid_retrieve() : ""); juped_server->SetFlag(SERVER_JUPED); ircdproto->SendServer(juped_server); diff --git a/src/servers.cpp b/src/servers.cpp index d1f094dbb..69562e9c2 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -66,16 +66,19 @@ Server::Server(Server *uplink, const std::string &name, unsigned int hops, const /* Add this server to our uplinks leaf list */ if (UplinkServer) + { UplinkServer->AddLink(this); - if (Me && UplinkServer && Me == UplinkServer) - { - /* Bring in our pseudo-clients */ - introduce_user(""); + /* Check to be sure the uplink server only has one uplink, otherwise we introduce our clients if we jupe servers */ + if (Me == UplinkServer && UplinkServer->GetLinks()->size() == 1) + { + /* Bring in our pseudo-clients */ + introduce_user(""); - /* And some IRCds needs Global joined in the logchan */ - if (LogChan && ircd->join2msg) - Global->Join(Config.LogChannel); + /* And some IRCds needs Global joined in the logchan */ + if (LogChan && ircd->join2msg) + Global->Join(Config.LogChannel); + } } } @@ -199,15 +202,13 @@ void Server::AddLink(Server *s) /* This is only used for Me, initially we start services with an uplink of NULL, then * connect to the server which introduces itself and has us as the uplink, which calls this */ - if (!UplinkServer) + if (this == Me && !UplinkServer) UplinkServer = s; - else - { - if (!Links) - Links = new std::list<Server *>(); + + if (!Links) + Links = new std::list<Server *>(); - Links->push_back(s); - } + Links->push_back(s); Alog() << "Server " << s->GetName() << " introduced from " << GetName(); } @@ -298,8 +299,10 @@ bool Server::IsULined() const */ Server *Server::Find(const std::string &name, Server *s) { + Alog(LOG_DEBUG) << "Server::Find called for " << name; + if (!s) - s = Me->GetUplink(); + s = Me; if (s->GetName() == name || s->GetSID() == name) return s; @@ -311,6 +314,7 @@ Server *Server::Find(const std::string &name, Server *s) if (serv->GetName() == name || serv->GetSID() == name) return serv; + Alog(LOG_DEBUG) << "Server::Find checking " << serv->GetName() << " server tree for " << name; Server *server = Server::Find(name, serv); if (server) return server; |