Alternatively, /n could still send NICK, but not prematurely set the variable.

-Truls

On Mon, Jan 26, 2015 at 3:23 AM, Troy Sankey <sankey...@gmail.com> wrote:
> Hi,
>
> If an error occurs changing nick (with /n) then it will become out of
> sync with the server.  Here are some of the consequences:
>
> * ii will log outgoing messages with the new nick, but others will
>   receive them from the old nick
> * private messaging breaks
>
> Conceivably, this issue is common on large networks where there is a
> high likelihood of nick collisions.  I noticed it on my own server where
> the maximum nick length is 9 characters, and I accidentally exceeded
> that.
>
> This patch removes the /n command, making /NICK the only way to change
> the nick.  This could make people angry, what do you think?  /me doesn't
> think there are many people using ii, so it won't make many people
> angry :-)
>
> Troy
>
>  FAQ  |    6 +++---
>  ii.c |   12 ++++--------
>  2 files changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/FAQ b/FAQ
> index 4aefa6a..a571dbe 100644
> --- a/FAQ
> +++ b/FAQ
> @@ -16,9 +16,9 @@ like a charm.
>
>  Which commands are supported?
>  -----------------------------
> -j (join or msg), t (topic), a (away), n (nick), l (leave). The missing are
> -obsolete or can be easily used by typing the IRC commands itself (i.e. /WHO
> -instead of /who).
> +j (join or msg), t (topic), a (away), l (leave). The missing are obsolete or
> +can be easily used by typing the IRC commands itself (i.e. /WHO instead of
> +/who).
>
>  How can I recognize queries?
>  ----------------------------
> diff --git a/ii.c b/ii.c
> index d93266c..b044b7f 100644
> --- a/ii.c
> +++ b/ii.c
> @@ -259,12 +259,6 @@ static void proc_channels_input(Channel *c, char *buf) {
>                         else
>                                 snprintf(message, PIPE_BUF, "AWAY :%s\r\n", 
> &buf[3]);
>                         break;
> -               case 'n':
> -                       if(strlen(buf)>=3){
> -                               snprintf(nick, sizeof(nick),"%s", &buf[3]);
> -                               snprintf(message, PIPE_BUF, "NICK %s\r\n", 
> &buf[3]);
> -                       }
> -                       break;
>                 case 'l':
>                         if(c->name[0] == 0)
>                                 return;
> @@ -357,9 +351,11 @@ static void proc_server_cmd(char *buf) {
>                 snprintf(message, PIPE_BUF, "-!- %s changed mode/%s -> %s 
> %s", argv[TOK_NICKSRV], argv[TOK_CMD + 1] ? argv[TOK_CMD + 1] : "" , 
> argv[TOK_CMD + 2]? argv[TOK_CMD + 2] : "", argv[TOK_CMD + 3] ? argv[TOK_CMD + 
> 3] : "");
>         else if(!strncmp("QUIT", argv[TOK_CMD], 5))
>                 snprintf(message, PIPE_BUF, "-!- %s(%s) has quit \"%s\"", 
> argv[TOK_NICKSRV], argv[TOK_USER], argv[TOK_TEXT] ? argv[TOK_TEXT] : "");
> -       else if(!strncmp("NICK", argv[TOK_CMD], 5))
> +       else if(!strncmp("NICK", argv[TOK_CMD], 5)) {
>                 snprintf(message, PIPE_BUF, "-!- %s changed nick to %s", 
> argv[TOK_NICKSRV], argv[TOK_TEXT]);
> +               if(!strcmp(argv[TOK_NICKSRV], nick))
> +                       snprintf(nick, sizeof(nick),"%s", argv[TOK_TEXT]);
> -       else if(!strncmp("TOPIC", argv[TOK_CMD], 6))
> +       } else if(!strncmp("TOPIC", argv[TOK_CMD], 6))
>                 snprintf(message, PIPE_BUF, "-!- %s changed topic to \"%s\"", 
> argv[TOK_NICKSRV], argv[TOK_TEXT] ? argv[TOK_TEXT] : "");
>         else if(!strncmp("KICK", argv[TOK_CMD], 5))
>                 snprintf(message, PIPE_BUF, "-!- %s kicked %s (\"%s\")", 
> argv[TOK_NICKSRV], argv[TOK_ARG], argv[TOK_TEXT] ? argv[TOK_TEXT] : "");

Reply via email to