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:
parent
52ccba5d1e
commit
1e386fb7ac
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue