Make NJOIN handler more fault-tolerant

Don't crash the daemon when the NJOIN handler can't join the new client
to a channel (when the Channel_Join() function failed) but try to KILL this
client -- which is the only possible reaction besides crashing: otherwise
the network would get out of sync.
This commit is contained in:
Alexander Barton 2015-12-13 21:56:07 +01:00
parent 52ccba5d1e
commit 1e386fb7ac
1 changed files with 11 additions and 1 deletions

View File

@ -31,6 +31,7 @@
#include "parse.h"
#include "numeric.h"
#include "ngircd.h"
#include "irc.h"
#include "irc-info.h"
#include "irc-write.h"
#include "op.h"
@ -282,7 +283,16 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req )
goto skip_njoin;
}
Channel_Join(c, channame);
if (Channel_Join(c, channame)) {
/* Failed to join channel. Ooops!? */
Log(LOG_ALERT,
"Failed to join client \"%s\" to channel \"%s\" (NJOIN): killing it!",
ptr, channame);
IRC_KillClient(NULL, NULL, ptr, "Internal NJOIN error!");
Log(LOG_DEBUG, "... done.");
goto skip_njoin;
}
chan = Channel_Search(channame);
assert(chan != NULL);