]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Add checking on AddFd that was missing (it assumed, like everything else)
[user/henk/code/inspircd.git] / src / channels.cpp
index 632e198e53ea370e6765e351f3a94a29bca10a89..3671fdb6dc971d8476803065d09617863f124183 100644 (file)
@@ -348,11 +348,17 @@ chanrec* add_channel(userrec *user, const char* cn, const char* key, bool overri
                                        log(DEBUG,"add_channel: about to walk banlist");
                                        MOD_RESULT = 0;
                                        FOREACH_RESULT(I_OnCheckBan,OnCheckBan(user, Ptr));
+                                       char mask[MAXBUF];
+                                       sprintf(mask,"%s!%s@%s",user->nick, user->ident, user->GetIPString());
                                        if (!MOD_RESULT)
                                        {
                                                for (BanList::iterator i = Ptr->bans.begin(); i != Ptr->bans.end(); i++)
                                                {
-                                                       if ((match(user->GetFullHost(),i->data)) || (match(user->GetFullRealHost(),i->data)) || (match((char*)inet_ntoa(user->ip4),i->data)))
+                                                       /* This allows CIDR ban matching
+                                                        * 
+                                                        *          Full masked host                        Full unmasked host                     IP with/without CIDR
+                                                        */
+                                                       if ((match(user->GetFullHost(),i->data)) || (match(user->GetFullRealHost(),i->data)) || (match(mask, i->data, true)))
                                                        {
                                                                WriteServ(user->fd,"474 %s %s :Cannot join channel (You're banned)",user->nick, Ptr->name);
                                                                return NULL;