]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/mode.cpp
Tweaks to closed socket detection
[user/henk/code/inspircd.git] / src / mode.cpp
index 993f6cd74b4ce67fc42cb20bd64032ce92cefd5b..40ef66f0db76e75bb9a146cf0b5a3e3e0363aeec 100644 (file)
@@ -96,10 +96,9 @@ char* ModeParser::GiveOps(userrec *user,char *dest,chanrec *chan,int status)
                        if ((d->chans[i].channel != NULL) && (chan != NULL))
                        if (!strcasecmp(d->chans[i].channel->name,chan->name))
                        {
-                       if (d->chans[i].uc_modes & UCMODE_OP)
+                               if (d->chans[i].uc_modes & UCMODE_OP)
                                {
                                        /* mode already set on user, dont allow multiple */
-                                       log(DEFAULT,"The target user given to GiveOps was already opped on the channel");
                                        return NULL;
                                }
                                d->chans[i].uc_modes = d->chans[i].uc_modes | UCMODE_OP;
@@ -452,7 +451,14 @@ char* ModeParser::AddBan(userrec *user,char *dest,chanrec *chan,int status)
 
        b.set_time = TIME;
        strlcpy(b.data,dest,MAXBUF);
-       strlcpy(b.set_by,user->nick,NICKMAX);
+       if (*user->nick)
+       {
+               strlcpy(b.set_by,user->nick,NICKMAX-1);
+       }
+       else
+       {
+               strlcpy(b.set_by,Config->ServerName,NICKMAX-1);
+       }
        chan->bans.push_back(b);
        return dest;
 }
@@ -583,6 +589,12 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
        {
                r = NULL;
 
+               /* If we have more than MAXMODES changes in one line,
+                * drop all after the MAXMODES
+                */
+               if (pc > MAXMODES-1)
+                       break;
+
                {
                        switch (*modechar)
                        {
@@ -623,6 +635,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                        log(DEBUG,"Ops");
                                        if ((param >= pcnt)) break;
                                        log(DEBUG,"Enough parameters left");
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                MOD_RESULT = 0;
@@ -654,6 +667,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                        
                                case 'h':
                                        if (((param >= pcnt)) || (!Config->AllowHalfop)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -684,6 +698,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                
                                case 'v':
                                        if ((param >= pcnt)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -713,6 +728,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
                                
                                case 'b':
                                        if ((param >= pcnt)) break;
+                                       r = NULL;
                                        if (mdir == 1)
                                        {
                                                 MOD_RESULT = 0;
@@ -1199,7 +1215,7 @@ bool ModeParser::ProcessModuleUmode(char umode, userrec* source, void* dest, boo
        if (!source)
        {
                s2 = new userrec;
-               strlcpy(s2->nick,Config->ServerName,NICKMAX);
+               strlcpy(s2->nick,Config->ServerName,NICKMAX-1);
                strlcpy(s2->modes,"o",52);
                s2->fd = -1;
                source = s2;