]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_services_account.cpp
use documented "value" attribute instead of undocumented "newhost"
[user/henk/code/inspircd.git] / src / modules / m_services_account.cpp
index 57a08ada48e02c1395e3650dc489c89ab6b89c3e..635dc284b754c79f3cb409b53c200ea3acc5368a 100644 (file)
@@ -40,19 +40,17 @@ class Channel_r : public ModeHandler
                if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
                {
                        // Only change the mode if it's not redundant
-                       if ((adding && !channel->IsModeSet('r')) || (!adding && channel->IsModeSet('r')))
+                       if ((adding != channel->IsModeSet('r')))
                        {
                                channel->SetMode('r',adding);
                                return MODEACTION_ALLOW;
                        }
-
-                       return MODEACTION_DENY;
                }
                else
                {
                        source->WriteNumeric(500, "%s :Only a server may modify the +r channel mode", source->nick.c_str());
-                       return MODEACTION_DENY;
                }
+               return MODEACTION_DENY;
        }
 };
 
@@ -68,18 +66,17 @@ class User_r : public ModeHandler
        {
                if (!IS_LOCAL(source) || ServerInstance->ULine(source->nick.c_str()) || ServerInstance->ULine(source->server))
                {
-                       if ((adding && !dest->IsModeSet('r')) || (!adding && dest->IsModeSet('r')))
+                       if ((adding != dest->IsModeSet('r')))
                        {
                                dest->SetMode('r',adding);
                                return MODEACTION_ALLOW;
                        }
-                       return MODEACTION_DENY;
                }
                else
                {
                        source->WriteNumeric(500, "%s :Only a server may modify the +r user mode", source->nick.c_str());
-                       return MODEACTION_DENY;
                }
+               return MODEACTION_DENY;
        }
 };
 
@@ -192,7 +189,7 @@ class ModuleServicesAccount : public Module
                        if (c->IsModeSet('M') && !is_registered && res != MOD_RES_ALLOW)
                        {
                                // user messaging a +M channel and is not registered
-                               user->WriteNumeric(477, ""+std::string(user->nick)+" "+std::string(c->name)+" :You need to be identified to a registered account to message this channel");
+                               user->WriteNumeric(477, user->nick+" "+c->name+" :You need to be identified to a registered account to message this channel");
                                return MOD_RES_DENY;
                        }
                }
@@ -212,7 +209,11 @@ class ModuleServicesAccount : public Module
 
        ModResult OnCheckBan(User* user, Channel* chan, const std::string& mask)
        {
-               if (mask[1] == ':')
+               static bool checking = false;
+               if (checking)
+                       return MOD_RES_PASSTHRU;
+
+               if ((mask.length() > 2) && (mask[1] == ':'))
                {
                        if (mask[0] == 'R')
                        {
@@ -229,7 +230,11 @@ class ModuleServicesAccount : public Module
 
                                /* If we made it this far we know the user isn't registered
                                        so just deny if it matches */
-                               if (chan->GetExtBanStatus(user, 'U') == MOD_RES_DENY)
+                               checking = true;
+                               bool result = chan->CheckBan(user, mask.substr(2));
+                               checking = false;
+
+                               if (result)
                                        return MOD_RES_DENY;
                        }
                }