]> arthur.barton.de Git - ngircd-alex.git/commitdiff
Fix "MAXLIST=beI:50": the limit is the sum of all lists
authorAlexander Barton <alex@barton.de>
Mon, 23 Jan 2012 20:51:38 +0000 (21:51 +0100)
committerAlexander Barton <alex@barton.de>
Mon, 23 Jan 2012 20:51:38 +0000 (21:51 +0100)
"Modes which are specified in the same pair share the same maximum size",
so "beI:50" means a total of 50 entries, regardless of the list.

See <http://www.irc.org/tech_docs/draft-brocklesby-irc-isupport-03.txt>,
thanks to Cahata for reporting this!

src/ngircd/irc-mode.c

index ad83ae98a7aa93d0ee0931e5e6396de91cfa8d57..80b2949038b7cce6084537f771d21dd398f095a7 100644 (file)
@@ -857,6 +857,7 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
 {
        const char *mask;
        struct list_head *list;
+       long int current_count;
 
        assert(Client != NULL);
        assert(Channel != NULL);
@@ -864,6 +865,9 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
        assert(what == 'I' || what == 'b' || what == 'e');
 
        mask = Lists_MakeMask(Pattern);
+       current_count = Lists_Count(Channel_GetListInvites(Channel))
+                       + Lists_Count(Channel_GetListExcepts(Channel))
+                       + Lists_Count(Channel_GetListBans(Channel));
 
        switch(what) {
                case 'I':
@@ -880,7 +884,7 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
        if (Lists_CheckDupeMask(list, mask))
                return CONNECTED;
        if (Client_Type(Client) == CLIENT_USER &&
-           Lists_Count(list) >= MAX_HNDL_CHANNEL_LISTS)
+           current_count >= MAX_HNDL_CHANNEL_LISTS)
                return IRC_WriteStrClient(Client, ERR_LISTFULL_MSG,
                                          Client_ID(Client),
                                          Channel_Name(Channel), mask,