Stop sending nicknames as the first argument to KILL.
authorMichael Poole <mdpoole@troilus.org>
Wed, 16 Nov 2005 04:20:43 +0000 (04:20 +0000)
committerMichael Poole <mdpoole@troilus.org>
Wed, 16 Nov 2005 04:20:43 +0000 (04:20 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1556 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/m_nick.c

index 382132f5262468a54dc6d4956cd881a4d23cca62..2444abdfb1558686c0ba0ac5a05b0cc8a3d384ea 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-11-15  Michael Poole <mdpoole@troilus.org>
+
+       * ircd/m_nick.c (ms_nick): Clarify message when an older nick
+       overrules a newer nick.  When killing a client for a nick
+       collision, make sure to use the numnick as the first argument.
+
 2005-11-14  Michael Poole <mdpoole@troilus.org>
 
        * ircd/channel.c (member_can_send_to_channel): After prodding from
index 8b5a659d99946d7acbdb8545b8bec2205f474832..2ac4fe88ab8efb2e15cfd907209ac3c823199ca0 100644 (file)
@@ -430,7 +430,7 @@ int ms_nick(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
                         "%C (%C %Tu <- %C %Tu)", sptr, acptr, cli_from(acptr),
                         cli_lastnick(acptr), cptr, lastnick);
   }
-  type = differ ? "older nick overruled" : "nick collision from same user@host";
+  type = differ ? "overruled by older nick" : "nick collision from same user@host";
   /*
    * Now remove (kill) the nick on our side if it is the youngest.
    * If no timestamp was received, we ignore the incoming nick
@@ -443,40 +443,32 @@ int ms_nick(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if ((differ && lastnick >= cli_lastnick(acptr)) ||
       (!differ && lastnick <= cli_lastnick(acptr)))
   {
-    /* We need to bounce this kill straight back... Although the nick message
-     * for acptr is probably waiting in their recvq from me, its also possible
-     * that sptr will change their nick on cptr before cptr receives the
-     * nick message for acptr, which would leave acptr and sptr both alive
-     * on cptr, but only acptr alive on me, i.e. desync. This extra kill
-     * message has been absent for a while in ircu although it was a major
-     * problem when it was tried on efnet, so I don't know how big an issue it
-     * is. Probably best that this be left here, anyway...
-     */
     ServerStats->is_kill++;
-    sendcmdto_one(&me, CMD_KILL, cptr, "%s :%s (%s)",
-                  nick, cli_name(&me), type);
-    /* But if this was a nick change and not a nick introduction,
-     * we also need to ensure that we remove our local state
-     * record of the original client... Also, the rest of the
-     * net should be informed...
-     */
     if (!IsServer(sptr))
     {
+      /* If this was a nick change and not a nick introduction, we
+       * need to ensure that we remove our record of the client, and
+       * send a KILL to the whole network.
+       */
       assert(!MyConnect(sptr));
       /* Inform the rest of the net... */
-      sendcmdto_serv_butone(&me, CMD_KILL, cptr, "%s :%s (%s)",
-                            nick, cli_name(&me), type);
+      sendcmdto_serv_butone(&me, CMD_KILL, 0, "%C :%s (%s)",
+                            sptr, cli_name(&me), type);
       /* Don't go sending off a QUIT message... */
       SetFlag(sptr, FLAG_KILLED);
       /* Remove them locally. */
       exit_client_msg(cptr, sptr, &me,
                       "Killed (%s (%s))",
                       feature_str(FEAT_HIS_SERVERNAME), type);
-      /*
-       * We have killed sptr off, zero out it's pointer so if it's used
-       * again we'll know about it --Bleep
+    }
+    else
+    {
+      /* If the origin is a server, this was a new client, so we only
+       * send the KILL in the direction it came from.  We have no
+       * client record that we would have to clean up.
        */
-      sptr = NULL;
+      sendcmdto_one(&me, CMD_KILL, cptr, "%s :%s (%s)",
+                    parv[parc - 2], cli_name(&me), type);
     }
     /* If the timestamps differ and we just killed sptr, we don't need to kill
      * acptr as well.
@@ -492,8 +484,8 @@ int ms_nick(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   /*
    * This exits the client we had before getting the NICK message
    */
-  sendcmdto_serv_butone(&me, CMD_KILL, NULL, "%C :%s"
-                        " (%s)", acptr, feature_str(FEAT_HIS_SERVERNAME),
+  sendcmdto_serv_butone(&me, CMD_KILL, NULL, "%C :%s (%s)",
+                        acptr, feature_str(FEAT_HIS_SERVERNAME),
                         type);
   exit_client_msg(cptr, acptr, &me, "Killed (%s (%s))",
                   feature_str(FEAT_HIS_SERVERNAME), type);