]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
undo w00t's screwup
authorom <om@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 4 Apr 2006 02:20:59 +0000 (02:20 +0000)
committerom <om@e03df62e-2008-0410-955e-edbf42e46eb7>
Tue, 4 Apr 2006 02:20:59 +0000 (02:20 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3812 e03df62e-2008-0410-955e-edbf42e46eb7

src/channels.cpp
src/cmd_oper.cpp

index 5918a45689e2cd143f7315c0e41943dffd6f538c..3f2eca3f5f85ff33e12594c9ff5667e94dec9a15 100644 (file)
@@ -589,21 +589,21 @@ void server_kick_channel(userrec* user, chanrec* Ptr, char* reason, bool trigger
        }
 }
 
-void kick_channel(userrec *src,userrec *user, chanrec *chan, char* reason)
+void kick_channel(userrec *src,userrec *user, chanrec *Ptr, char* reason)
 {
-       if ((!src) || (!user) || (!chan) || (!reason))
+       if ((!src) || (!user) || (!Ptr) || (!reason))
        {
                log(DEFAULT,"*** BUG *** kick_channel was given an invalid parameter");
                return;
        }
 
-       log(DEBUG,"kick_channel: removing: %s %s %s",user->nick,chan->name,src->nick);
+       log(DEBUG,"kick_channel: removing: %s %s %s",user->nick,Ptr->name,src->nick);
 
        if (IS_LOCAL(src))
        {
-               if (!chan->HasUser(user))
+               if (!Ptr->HasUser(user))
                {
-                       WriteServ(src->fd,"441 %s %s %s :They are not on that channel",src->nick, user->nick, chan->name);
+                       WriteServ(src->fd,"441 %s %s %s :They are not on that channel",src->nick, user->nick, Ptr->name);
                        return;
                }
                int MOD_RESULT = 0;
@@ -611,28 +611,28 @@ void kick_channel(userrec *src,userrec *user, chanrec *chan, char* reason)
                if (!is_uline(src->server))
                {
                        MOD_RESULT = 0;
-                       FOREACH_RESULT(I_OnUserPreKick,OnUserPreKick(src,user,chan,reason));
+                       FOREACH_RESULT(I_OnUserPreKick,OnUserPreKick(src,user,Ptr,reason));
                        if (MOD_RESULT == 1)
                                return;
                }
                /* Set to -1 by OnUserPreKick if explicit allow was set */
                if (MOD_RESULT != -1)
                {
-                       FOREACH_RESULT(I_OnAccessCheck,OnAccessCheck(src,user,chan,AC_KICK));
+                       FOREACH_RESULT(I_OnAccessCheck,OnAccessCheck(src,user,Ptr,AC_KICK));
                        if ((MOD_RESULT == ACR_DENY) && (!is_uline(src->server)))
                                return;
        
                        if ((MOD_RESULT == ACR_DEFAULT) || (!is_uline(src->server)))
                        {
-                               if ((cstatus(src,chan) < STATUS_HOP) || (cstatus(src,chan) < cstatus(user,chan)))
+                               if ((cstatus(src,Ptr) < STATUS_HOP) || (cstatus(src,Ptr) < cstatus(user,Ptr)))
                                {
-                                       if (cstatus(src,chan) == STATUS_HOP)
+                                       if (cstatus(src,Ptr) == STATUS_HOP)
                                        {
-                                               WriteServ(src->fd,"482 %s %s :You must be a channel operator",src->nick, chan->name);
+                                               WriteServ(src->fd,"482 %s %s :You must be a channel operator",src->nick, Ptr->name);
                                        }
                                        else
                                        {
-                                               WriteServ(src->fd,"482 %s %s :You must be at least a half-operator",src->nick, chan->name);
+                                               WriteServ(src->fd,"482 %s %s :You must be at least a half-operator",src->nick, Ptr->name);
                                        }
                
                                        return;
@@ -641,34 +641,34 @@ void kick_channel(userrec *src,userrec *user, chanrec *chan, char* reason)
                }
        }
 
-       FOREACH_MOD(I_OnUserKick,OnUserKick(src,user,chan,reason));
+       FOREACH_MOD(I_OnUserKick,OnUserKick(src,user,Ptr,reason));
                        
        for (std::vector<ucrec*>::const_iterator i = user->chans.begin(); i != user->chans.end(); i++)
        {
                /* zap it from the channel list of the user */
-               if ((((ucrec*)(*i))->channel) && (((ucrec*)(*i))->channel == chan))
+               if ((((ucrec*)(*i))->channel) && (((ucrec*)(*i))->channel == Ptr))
                {
-                       WriteChannel(chan,src,"KICK %s %s :%s",chan->name, user->nick, reason);
+                       WriteChannel(Ptr,src,"KICK %s %s :%s",Ptr->name, user->nick, reason);
                        ((ucrec*)(*i))->uc_modes = 0;
                        ((ucrec*)(*i))->channel = NULL;
-                       log(DEBUG,"del_channel: unlinked: %s %s",user->nick,chan->name);
+                       log(DEBUG,"del_channel: unlinked: %s %s",user->nick,Ptr->name);
                        break;
                }
        }
 
-       if (!chan->DelUser(user))
+       if (!Ptr->DelUser(user))
        /* if there are no users left on the channel */
        {
-               chan_hash::iterator iter = chanlist.find(chan->name);
+               chan_hash::iterator iter = chanlist.find(Ptr->name);
 
-               log(DEBUG,"del_channel: destroying channel: %s",chan->name);
+               log(DEBUG,"del_channel: destroying channel: %s",Ptr->name);
 
                /* kill the record */
                if (iter != chanlist.end())
                {
-                       log(DEBUG,"del_channel: destroyed: %s",chan->name);
-                       FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(chan));
-                       delete chan;
+                       log(DEBUG,"del_channel: destroyed: %s",Ptr->name);
+                       FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(Ptr));
+                       delete Ptr;
                        chanlist.erase(iter);
                }
        }
index 2e9a0b457222da8d263d81674c5832947ef1e907..0c002612182fac29153386706f483857809ccef5 100644 (file)
@@ -85,6 +85,8 @@ void cmd_oper::Handle (char **parameters, int pcnt, userrec *user)
        char HostName[MAXBUF];
        char TheHost[MAXBUF];
        int j;
+       bool found = false;
+       bool fail2 = false;
 
        snprintf(TheHost,MAXBUF,"%s@%s",user->ident,user->host);
 
@@ -94,82 +96,66 @@ void cmd_oper::Handle (char **parameters, int pcnt, userrec *user)
                Config->ConfValue("oper","password",i,Password,&Config->config_f);
                Config->ConfValue("oper","type",i,OperType,&Config->config_f);
                Config->ConfValue("oper","host",i,HostName,&Config->config_f);
-
-               if (!strcmp(LoginName, parameters[0]))
+               if ((!strcmp(LoginName,parameters[0])) && (!operstrcmp(Password,parameters[1])) && (OneOfMatches(TheHost,HostName)))
                {
-                       /* login name matches */
-                       if (!operstrcmp(Password, parameters[1]))
+                       fail2 = true;
+                       for (j =0; j < Config->ConfValueEnum("type",&Config->config_f); j++)
                        {
-                               /* password matches */
-                               if (OneOfMatches(TheHost, HostName))
+                               Config->ConfValue("type","name",j,TypeName,&Config->config_f);
+
+                               if (!strcmp(TypeName,OperType))
                                {
-                                       for (j =0; j < Config->ConfValueEnum("type",&Config->config_f); j++)
+                                       /* found this oper's opertype */
+                                       Config->ConfValue("type","host",j,HostName,&Config->config_f);
+                                       if (*HostName)
+                                               ChangeDisplayedHost(user,HostName);
+                                       if (!isnick(TypeName))
                                        {
-                                               Config->ConfValue("type","name",j,TypeName,&Config->config_f);
-
-                                               if (!strcmp(TypeName,OperType))
-                                               {
-                                                       /* found this oper's opertype */
-                                                       Config->ConfValue("type","host",j,HostName,&Config->config_f);
-                                                       if (*HostName)
-                                                               ChangeDisplayedHost(user,HostName);
-                                                       if (!isnick(TypeName))
-                                                       {
-                                                               WriteServ(user->fd,"491 %s :Invalid oper type (oper types must follow the same syntax as nicknames)",user->nick);
-                                                               WriteOpers("*** CONFIGURATION ERROR! Oper type invalid for OperType '%s'",OperType);
-                                                               log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type erroneous.",user->nick,user->ident,user->host);
-                                                               return;
-                                                       }
-
-                                                       /* correct oper credentials */
-                                                       WriteOpers("*** %s (%s@%s) is now an IRC operator of type %s",user->nick,user->ident,user->host,OperType);
-                                                       WriteServ(user->fd,"381 %s :You are now an IRC operator of type %s",user->nick,OperType);
-
-                                                       if (!strchr(user->modes,'o'))
-                                                       {
-                                                               strcat(user->modes,"o");
-                                                               WriteServ(user->fd,"MODE %s :+o",user->nick);
-                                                               FOREACH_MOD(I_OnOper,OnOper(user,OperType));
-                                                               log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType);
-                                                               AddOper(user);
-                                                               FOREACH_MOD(I_OnPostOper,OnPostOper(user,OperType));
-                                                       }
-
-                                                       strlcpy(user->oper,TypeName,NICKMAX-1);
-                                                       return;
-                                               }
+                                               WriteServ(user->fd,"491 %s :Invalid oper type (oper types must follow the same syntax as nicknames)",user->nick);
+                                               WriteOpers("*** CONFIGURATION ERROR! Oper type invalid for OperType '%s'",OperType);
+                                               log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type erroneous.",user->nick,user->ident,user->host);
+                                               return;
                                        }
-
-                                       /* if we get to here, we have NOT found their opertype. */
-                                       WriteServ(user->fd,"491 %s :Your oper block does not have a valid opertype associated with it",user->nick);
-                                       WriteOpers("*** CONFIGURATION ERROR! Oper block mismatch for OperType %s",OperType);
-                                       log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host);
-                                       return;
-                               }
-                               else
-                               {
-                                       /* no host matches */
-                                       WriteServ(user->fd, "491 %s :Invalid Credentials", user->nick);
-                                       WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s (incorrect hostname)!", user->nick, user->ident, user->host);
-                                       log(DEFAULT, "OPER: Failed oper attempt by %s!%s@%s: host did not match.", user->nick, user->ident, user->host);
-                                       return;
+                                       strlcpy(user->oper,TypeName,NICKMAX-1);
+                                       found = true;
+                                       fail2 = false;
+                                       break;
                                }
                        }
-                       else
-                       {
-                               /* password WRONG */
-                               WriteServ(user->fd, "491 %s :Invalid Credentials", user->nick);
-                               WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s (incorrect password)!", user->nick, user->ident, user->host);
-                               log(DEFAULT, "OPER: Failed oper attempt by %s!%s@%s: password did not match.", user->nick, user->ident, user->host);
-                               return;
-                       }
+               }
+               if (found)
+                       break;
+       }
+       if (found)
+       {
+                /* correct oper credentials */
+                WriteOpers("*** %s (%s@%s) is now an IRC operator of type %s",user->nick,user->ident,user->host,OperType);
+                WriteServ(user->fd,"381 %s :You are now an IRC operator of type %s",user->nick,OperType);
+               if (!strchr(user->modes,'o'))
+               {
+                       strcat(user->modes,"o");
+                       WriteServ(user->fd,"MODE %s :+o",user->nick);
+                       FOREACH_MOD(I_OnOper,OnOper(user,OperType));
+                       log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType);
+                       AddOper(user);
+                       FOREACH_MOD(I_OnPostOper,OnPostOper(user,OperType));
+               }
+       }
+       else
+       {
+               if (!fail2)
+               {
+                       WriteServ(user->fd,"491 %s :Invalid oper credentials",user->nick);
+                       WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
+                       log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: user, host or password did not match.",user->nick,user->ident,user->host);
+               }
+               else
+               {
+                       WriteServ(user->fd,"491 %s :Your oper block does not have a valid opertype associated with it",user->nick);
+                       WriteOpers("*** CONFIGURATION ERROR! Oper block mismatch for OperType %s",OperType);
+                        log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host);
                }
        }
-
-       /* if we get here, invalid oper login */
-       WriteServ(user->fd, "491 %s :Invalid Credentials", user->nick);
-       WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s (incorrect oper (%s))!", user->nick, user->ident, user->host, parameters[0]);
-       log(DEFAULT, "OPER: Failed oper attempt by %s!%s@%s: incorrect oper (%s)", user->nick, user->ident, user->host, parameters[0]);
        return;
 }