summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-07-10 20:58:29 -0400
committerAdam <Adam@anope.org>2010-07-10 20:58:29 -0400
commitfa622aae38b7aa11ecab78412e91e262ae6fb3e3 (patch)
treeaaf62febc418af7de308f41f8140b1f5b031909d /src
parent07ec79e8818d62ba1225674891eaf7fbd3e89bbd (diff)
Fixed tracking of introducing and quitting juped servers
Diffstat (limited to 'src')
-rw-r--r--src/core/os_jupe.cpp2
-rw-r--r--src/servers.cpp34
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;