]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Close the local link that sends a TS5 NICK introduction.
authorJilles Tjoelker <redacted>
Fri, 16 Jan 2009 22:08:05 +0000 (23:08 +0100)
committerJilles Tjoelker <redacted>
Fri, 16 Jan 2009 22:08:05 +0000 (23:08 +0100)
This is no longer supported and was already broken,
sending out a UID message without UID parameter to
other servers.

modules/core/m_nick.c

index 9db4a7702521bec5792b927f7f76faa0d1dec57c..8ad74bc7077868734ec89189ead4e1dae4fa2527 100644 (file)
@@ -68,7 +68,7 @@ static void bad_nickname(struct Client *, const char *);
 
 struct Message nick_msgtab = {
        "NICK", 0, 0, 0, MFLG_SLOW,
-       {{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 8}, mg_ignore, {m_nick, 0}}
+       {{mr_nick, 0}, {m_nick, 0}, {mc_nick, 3}, {ms_nick, 0}, mg_ignore, {m_nick, 0}}
 };
 struct Message uid_msgtab = {
        "UID", 0, 0, 0, MFLG_SLOW,
@@ -255,23 +255,12 @@ m_nick(struct Client *client_p, struct Client *source_p, int parc, const char *p
        return 0;
 }
 
-/* ms_nick()
+/* mc_nick()
  *      
  * server -> server nick change
  *    parv[0] = sender prefix
  *    parv[1] = nickname
  *    parv[2] = TS when nick change
- *
- * server introducing new nick
- *    parv[0] = sender prefix
- *    parv[1] = nickname
- *    parv[2] = hop count
- *    parv[3] = TS
- *    parv[4] = umode
- *    parv[5] = username
- *    parv[6] = hostname
- *    parv[7] = server
- *    parv[8] = ircname
  */
 static int
 mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
@@ -316,78 +305,21 @@ mc_nick(struct Client *client_p, struct Client *source_p, int parc, const char *
 static int
 ms_nick(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
-       struct Client *target_p;
-       time_t newts = 0;
-       char squitreason[100];
-
-       if(parc != 9)
-       {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                    "Dropping server %s due to (invalid) command 'NICK' "
-                                    "with %d arguments (expecting 9)", client_p->name, parc);
-               ilog(L_SERVER, "Excess parameters (%d) for command 'NICK' from %s.",
-                    parc, client_p->name);
-               rb_snprintf(squitreason, sizeof squitreason,
-                               "Excess parameters (%d) to %s command, expecting %d",
-                               parc, "NICK", 9);
-               exit_client(client_p, client_p, client_p, squitreason);
-               return 0;
-       }
-
-       /* if nicks empty, erroneous, or too long, kill */
-       if(!clean_nick(parv[1], 0))
-       {
-               bad_nickname(client_p, parv[1]);
-               return 0;
-       }
+       const char *nick, *server;
 
-       /* invalid username or host? */
-       if(!clean_username(parv[5]) || !clean_host(parv[6]))
-       {
-               ServerStats.is_kill++;
-               sendto_realops_snomask(SNO_DEBUG, L_ALL,
-                                    "Bad user@host: %s@%s From: %s(via %s)",
-                                    parv[5], parv[6], parv[7], client_p->name);
-               sendto_one(client_p, ":%s KILL %s :%s (Bad user@host)", me.name, parv[1], me.name);
-               return 0;
-       }
+       nick = parc > 1 ? parv[1] : "?";
+       server = parc > 7 ? parv[7] : "?";
 
-       /* check the length of the clients gecos */
-       if(strlen(parv[8]) > REALLEN)
-       {
-               char *s = LOCAL_COPY(parv[8]);
-               /* why exactly do we care? --fl */
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                    "Long realname from server %s for %s", parv[7], parv[1]);
-
-               s[REALLEN] = '\0';
-               parv[8] = s;
-       }
-
-       newts = atol(parv[3]);
-
-       target_p = find_named_client(parv[1]);
+       sendto_wallops_flags(UMODE_WALLOP, &me,
+                       "Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
+                       client_p->name, nick, server);
+       sendto_server(NULL, NULL, CAP_TS6, NOCAPS,
+                       ":%s WALLOPS :Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
+                       me.id, client_p->name, nick, server);
+       ilog(L_SERVER, "Link %s cancelled, TS5 nickname %s on %s introduced (old server?)",
+                       client_p->name, nick, server);
 
-       /* if the nick doesnt exist, allow it and process like normal */
-       if(target_p == NULL)
-       {
-               register_client(client_p, NULL, parv[1], newts, parc, parv);
-       }
-       else if(IsUnknown(target_p))
-       {
-               exit_client(NULL, target_p, &me, "Overridden");
-               register_client(client_p, NULL, parv[1], newts, parc, parv);
-       }
-       else if(target_p == source_p)
-       {
-               /* client changing case of nick */
-               if(strcmp(target_p->name, parv[1]))
-                       register_client(client_p, NULL, parv[1], newts, parc, parv);
-       }
-       /* we've got a collision! */
-       else
-               perform_nick_collides(source_p, client_p, target_p, parc, parv,
-                                     newts, parv[1], NULL);
+       exit_client(client_p, client_p, &me, "TS5 nickname introduced");
 
        return 0;
 }