]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/channels.cpp
Move OnCheckBan into chanrec::IsBanned() so its always called for any attempt to...
[user/henk/code/inspircd.git] / src / channels.cpp
index 28052de98ce71de493096948711e88c828e35d3c..8e614a8a89267691239f1269f6c5cc27d4a0aec8 100644 (file)
@@ -301,17 +301,12 @@ chanrec* chanrec::JoinUser(InspIRCd* Instance, userrec *user, const char* cn, bo
                                }
                                if (Ptr->bans.size())
                                {
-                                       MOD_RESULT = 0;
-                                       FOREACH_RESULT_I(Instance,I_OnCheckBan,OnCheckBan(user, Ptr));
                                        char mask[MAXBUF];
-                                       sprintf(mask,"%s!%s@%s",user->nick, user->ident, user->GetIPString());
-                                       if (!MOD_RESULT)
+                                       snprintf(mask, MAXBUF, "%s!%s@%s",user->nick, user->ident, user->GetIPString());
+                                       if (Ptr->IsBanned(user))
                                        {
-                                               if (Ptr->IsBanned(user))
-                                               {
-                                                       user->WriteServ("474 %s %s :Cannot join channel (You're banned)",user->nick, Ptr->name);
-                                                       return NULL;
-                                               }
+                                               user->WriteServ("474 %s %s :Cannot join channel (You're banned)",user->nick, Ptr->name);
+                                               return NULL;
                                        }
                                }
                        }
@@ -400,13 +395,13 @@ chanrec* chanrec::ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* u
                switch (status)
                {
                        case '@':
-                               a->uc_modes = UCMODE_OP;
+                               a->uc_modes |= UCMODE_OP;
                        break;
                        case '%':
-                               a->uc_modes = UCMODE_HOP;
+                               a->uc_modes |= UCMODE_HOP;
                        break;
                        case '+':
-                               a->uc_modes = UCMODE_VOICE;
+                               a->uc_modes |= UCMODE_VOICE;
                        break;
                }
                ModeHandler* mh = Instance->Modes->FindPrefix(status);
@@ -443,18 +438,22 @@ chanrec* chanrec::ForceChan(InspIRCd* Instance, chanrec* Ptr,ucrec *a,userrec* u
 bool chanrec::IsBanned(userrec* user)
 {
        char mask[MAXBUF];
-       sprintf(mask,"%s!%s@%s",user->nick, user->ident, user->GetIPString());
-       for (BanList::iterator i = this->bans.begin(); i != this->bans.end(); i++)
+       int MOD_RESULT = 0;
+       FOREACH_RESULT_I(Instance,I_OnCheckBan,OnCheckBan(user, Ptr));
+       if (!MOD_RESULT)
        {
-               /* 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)))
+               snprintf(mask, MAXBUF, "%s!%s@%s", user->nick, user->ident, user->GetIPString());
+               for (BanList::iterator i = this->bans.begin(); i != this->bans.end(); i++)
                {
-                       return true;
+                       /* 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)))
+                       {
+                               return true;
+                       }
                }
-
        }
        return false;
 }