]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Merge pull request #2 from briancollins/master
authorAlexander Barton <alex@barton.de>
Tue, 11 Sep 2012 18:29:14 +0000 (11:29 -0700)
committerAlexander Barton <alex@barton.de>
Tue, 11 Sep 2012 18:29:14 +0000 (11:29 -0700)
Fix IRC_Send_NAMES not sending correct prefix for certain clients.

1  2 
src/ngircd/irc-info.c

diff --combined src/ngircd/irc-info.c
index 6eb8d9421922e8606e0e5cbd83729f1c90c7d4b5,89d2deef1fc2b647cf3fbfee543329d85e4fada8..fc04773ae14ef307d1ac5adb0b53f2a18a64dd03
@@@ -848,8 -848,6 +848,8 @@@ IRC_WHO_Channel(CLIENT *Client, CHANNE
        assert( Client != NULL );
        assert( Chan != NULL );
  
 +      IRC_SetPenalty(Client, 1);
 +
        is_member = Channel_IsMemberOf(Chan, Client);
  
        /* Secret channel? */
  
                is_visible = strchr(client_modes, 'i') == NULL;
                if (is_member || is_visible) {
 -                      if (IRC_CheckListTooBig(Client, count, MAX_RPL_WHO, "WHO"))
 -                              break;
 -
                        strcpy(flags, who_flags_status(client_modes));
                        if (is_ircop)
                                strlcat(flags, "*", sizeof(flags));
                        count++;
                }
        }
 +
 +      /* If there are a lot of clients, augment penalty a bit */
 +      if (count > MAX_RPL_WHO)
 +              IRC_SetPenalty(Client, 1);
 +
        return IRC_WriteStrClient(Client, RPL_ENDOFWHO_MSG, Client_ID(Client),
                                  Channel_Name(Chan));
  }
@@@ -915,7 -911,6 +915,7 @@@ IRC_WHO_Mask(CLIENT *Client, char *Mask
        if (Mask)
                ngt_LowerStr(Mask);
  
 +      IRC_SetPenalty(Client, 3);
        for (c = Client_First(); c != NULL; c = Client_Next(c)) {
                if (Client_Type(c) != CLIENT_USER)
                        continue;
@@@ -1019,11 -1014,13 +1019,11 @@@ IRC_WHO(CLIENT *Client, REQUEST *Req
                chan = Channel_Search(Req->argv[0]);
                if (chan) {
                        /* Members of a channel have been requested */
 -                      IRC_SetPenalty(Client, 1);
                        return IRC_WHO_Channel(Client, chan, only_ops);
                }
                if (strcmp(Req->argv[0], "0") != 0) {
                        /* A mask has been given. But please note this RFC
                         * stupidity: "0" is same as no arguments ... */
 -                      IRC_SetPenalty(Client, 3);
                        return IRC_WHO_Mask(Client, Req->argv[0], only_ops);
                }
        }
@@@ -1114,12 -1111,6 +1114,12 @@@ IRC_WHOIS_SendReply(CLIENT *Client, CLI
                                Client_ID(from), Client_ID(c)))
                return DISCONNECTED;
  
 +      /* IRC-Bot? */
 +      if (Client_HasMode(c, 'B') &&
 +          !IRC_WriteStrClient(from, RPL_WHOISBOT_MSG,
 +                              Client_ID(from), Client_ID(c)))
 +              return DISCONNECTED;
 +
        /* Connected using SSL? */
        if (Conn_UsesSSL(Client_Conn(c)) &&
            !IRC_WriteStrClient(from, RPL_WHOISSSL_MSG, Client_ID(from),
@@@ -1486,15 -1477,7 +1486,15 @@@ Show_MOTD_Sendline(CLIENT *Client, cons
  static bool
  Show_MOTD_End(CLIENT *Client)
  {
 -      return IRC_WriteStrClient( Client, RPL_ENDOFMOTD_MSG, Client_ID( Client ));
 +      if (!IRC_WriteStrClient(Client, RPL_ENDOFMOTD_MSG, Client_ID(Client)))
 +              return DISCONNECTED;
 +
 +      if (*Conf_CloakHost)
 +              return IRC_WriteStrClient(Client, RPL_HOSTHIDDEN_MSG,
 +                                        Client_ID(Client),
 +                                        Client_Hostname(Client));
 +
 +      return CONNECTED;
  }
  
  #ifdef SSL_SUPPORT
@@@ -1595,10 -1578,10 +1595,10 @@@ IRC_Send_NAMES(CLIENT * Client, CHANNE
                if (is_member || is_visible) {
                        if (str[strlen(str) - 1] != ':')
                                strlcat(str, " ", sizeof(str));
-                       if (Client_Cap(cl) & CLIENT_CAP_MULTI_PREFIX) {
-                               if (strchr(Channel_UserModes(Chan, cl), 'o') &&
-                                   strchr(Channel_UserModes(Chan, cl), 'v'))
-                                       strlcat(str, "@+", sizeof(str));
+                       if (Client_Cap(Client) & CLIENT_CAP_MULTI_PREFIX && 
+                                       strchr(Channel_UserModes(Chan, cl), 'o') &&
+                                       strchr(Channel_UserModes(Chan, cl), 'v')) {
+                               strlcat(str, "@+", sizeof(str));
                        } else {
                                if (strchr(Channel_UserModes(Chan, cl), 'o'))
                                        strlcat(str, "@", sizeof(str));