Properly handle net rider kicks that are received after a normal kick for the same...
[ircu2.10.12-pk.git] / ircd / m_kick.c
index 2c95a8ea344906deb0f8a367ecf0662c92741398..c789e372acc6349cb2992e6dbedcd25dc1893478 100644 (file)
@@ -206,8 +206,21 @@ int ms_kick(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
     return 0;
 
   /* We go ahead and pass on the KICK for users not on the channel */
-  if (!(member = find_member_link(chptr, who)) || IsZombie(member))
+  member = find_member_link(chptr, who);
+  if (member && IsZombie(member))
+  {
+    /* We might get a KICK from a zombie's own server because the user
+     * net-rode during a burst (which always generates a KICK) *and*
+     * was kicked via another server.  In that case, we must remove
+     * the user from the channel.
+     */
+    if (sptr == cli_user(who)->server)
+    {
+      remove_user_from_channel(who, chptr);
+    }
+    /* Otherwise, we treat zombies like they are not channel members. */
     member = 0;
+  }
 
   /* Send HACK notice, but not for servers in BURST */
   /* 2002-10-17: Don't send HACK if the users local server is kicking them */