mirror of
https://github.com/osmarks/ngircd.git
synced 2025-09-10 06:16:01 +00:00
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:
@@ -31,6 +31,7 @@
|
|||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
#include "numeric.h"
|
#include "numeric.h"
|
||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
|
#include "irc.h"
|
||||||
#include "irc-info.h"
|
#include "irc-info.h"
|
||||||
#include "irc-write.h"
|
#include "irc-write.h"
|
||||||
#include "op.h"
|
#include "op.h"
|
||||||
@@ -282,7 +283,16 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req )
|
|||||||
goto skip_njoin;
|
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);
|
chan = Channel_Search(channame);
|
||||||
assert(chan != NULL);
|
assert(chan != NULL);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user