diff options
author | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-11-15 12:18:08 +0000 |
---|---|---|
committer | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2008-11-15 12:18:08 +0000 |
commit | 60a55fcf16b6c3e282400d2820b023a00543fb56 (patch) | |
tree | c9291d4818c507b7fcff1a685fd1a20f3d4024fc /src | |
parent | cc5bc5b3637c1ec79c59406a6f4b8997f44b4e81 (diff) |
Fix crash-on-squit with insp12: problem is that an sid was passed in as source for do_server(), which apparantly wasn't much liked.. it also now throws an exception if a nonexistant (to anope) uplink is found, because that would cause weird problems later on.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1688 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/servers.c | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/src/servers.c b/src/servers.c index cf4cbf162..2de1d1489 100644 --- a/src/servers.c +++ b/src/servers.c @@ -122,6 +122,7 @@ Server *new_server(Server * server_uplink, const char *name, const char *desc, { Server *serv; + alog("Creating %s(%s) uplinked to %s", name, suid, server_uplink ? server_uplink->name : "No uplink"); serv = (Server *)scalloc(sizeof(Server), 1); if (!name) name = ""; @@ -182,6 +183,8 @@ static void delete_server(Server * serv, const char *quitreason) Server *s, *snext; User *u, *unext; NickAlias *na; + + alog("Deleting %s(%s) uplinked to %s(%s)", serv->name, serv->suid, serv->uplink ? serv->uplink->name : "NOTHING", serv->uplink ? serv->uplink->suid : "NOSUIDUPLINK"); if (!serv) { if (debug) { @@ -260,24 +263,30 @@ Server *findserver(Server * s, const char *name) return NULL; } - if (debug >= 3) { - alog("debug: findserver(%p)", name); - } - while (s && (stricmp(s->name, name) != 0)) { - if (s->links) { + alog("findserver(%s)", name); + + while (s && (stricmp(s->name, name) != 0)) + { + alog("Compared %s, not a match", s->name); + if (s->links) + { sl = findserver(s->links, name); - if (sl) { + if (sl) + { s = sl; - } else { + } + else + { s = s->next; } - } else { + } + else + { s = s->next; } } - if (debug >= 3) { - alog("debug: findserver(%s) -> %p", name, (void *) s); - } + + alog("debug: findserver(%s) -> %p", name, (void *) s); return s; } @@ -297,24 +306,30 @@ Server *findserver_uid(Server * s, const char *name) return NULL; } - if (debug >= 3) { - alog("debug: findserver_uid(%p)", name); - } - while (s && s->suid && (stricmp(s->suid, name) != 0)) { - if (s->links) { + alog("debug: findserver_uid(%s)", name); + + while (s && s->suid && (stricmp(s->suid, name) != 0)) + { + alog("Compared %s, not a match", s->suid); + if (s->links) + { sl = findserver_uid(s->links, name); - if (sl) { + if (sl) + { s = sl; - } else { + } + else + { s = s->next; } - } else { + } + else + { s = s->next; } } - if (debug >= 3) { - alog("debug: findserver_uid(%s) -> %p", name, (void *) s); - } + + alog("debug: findserver_uid(%s) -> %p", name, (void *) s); return s; } @@ -369,6 +384,12 @@ void do_server(const char *source, const char *servername, const char *hops, s = me_server; else s = findserver(servlist, source); + + if (s == NULL) + s = findserver_uid(servlist, source); + + if (s == NULL) + throw CoreException("Recieved a server from a nonexistant uplink?"); new_server(s, servername, descript, 0, numeric); send_event(EVENT_SERVER_CONNECT, 1, servername); |