Fix for MODE #chan +o- nick or +o-- nick, etc

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3443 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
brain 2006-03-03 18:03:45 +00:00
parent 5b46e2717d
commit cf6d6a0665

View File

@ -586,8 +586,9 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
modelist[--len] = '\0'; modelist[--len] = '\0';
bool next_cant_be_modifier = false; bool next_cant_be_modifier = false;
char* modechar;
for (char* modechar = modelist; *modechar; ptr++, modechar++) for (modechar = modelist; *modechar; ptr++, modechar++)
{ {
r = NULL; r = NULL;
@ -600,6 +601,9 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
if ((*modechar != '+') && (*modechar != '-')) if ((*modechar != '+') && (*modechar != '-'))
next_cant_be_modifier = false; next_cant_be_modifier = false;
if (((*modechar == '+') || (*modechar == '-')) && ((*(modechar+1) == 0) || (*(modechar+1) == '+') || (*(modechar+1) == '-')))
next_cant_be_modifier = true;
{ {
switch (*modechar) switch (*modechar)
{ {
@ -615,7 +619,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
} }
else else
{ {
strcat(outlist,"-"); charlcat(outlist,'-',MAXBUF);
} }
} }
mdir = 0; mdir = 0;
@ -635,7 +639,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
} }
else else
{ {
strcat(outlist,"+"); charlcat(outlist,'+',MAXBUF);
} }
} }
mdir = 1; mdir = 1;
@ -788,7 +792,7 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
FOREACH_RESULT(I_OnRawMode,OnRawMode(user, chan, 'k', parameters[param], true, 1)); FOREACH_RESULT(I_OnRawMode,OnRawMode(user, chan, 'k', parameters[param], true, 1));
if (!MOD_RESULT) if (!MOD_RESULT)
{ {
strcat(outlist,"k"); charlcat(outlist,'k',MAXBUF);
char key[MAXBUF]; char key[MAXBUF];
strlcpy(key,parameters[param++],32); strlcpy(key,parameters[param++],32);
strlcpy(outpars[pc++],key,MAXBUF); strlcpy(outpars[pc++],key,MAXBUF);
@ -1123,12 +1127,11 @@ void ModeParser::ProcessModes(char **parameters,userrec* user,chanrec *chan,int
} }
} }
/* this ensures only the *valid* modes are sent out onto the network */ /* This means the mode line is something like: "+o-", we have to take the last char off.
/*int xt = strlen(outlist)-1; if ((*--modechar == '-') || (*modechar == '+'))
while ((outlist[xt] == '-') || (outlist[xt] == '+'))
{ {
outlist[xt] = '\0'; log(DEBUG,"Cut off trailing modifier");
xt = strlen(outlist)-1; *modechar = 0;
}*/ }*/
/* The mode change must be at least two characters long (+ or - and at least one mode) */ /* The mode change must be at least two characters long (+ or - and at least one mode) */
if (((*outlist == '+') || (*outlist == '-')) && *(outlist+1)) if (((*outlist == '+') || (*outlist == '-')) && *(outlist+1))
@ -1335,7 +1338,7 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user)
} }
else else
{ {
strcat(outpars,"+"); charlcat(outpars,'+',MAXBUF);
} }
} }
direction = 1; direction = 1;
@ -1352,7 +1355,7 @@ void cmd_mode::Handle (char **parameters, int pcnt, userrec *user)
} }
else else
{ {
strcat(outpars,"-"); charlcat(outpars,'-',MAXBUF);
} }
} }
direction = 0; direction = 0;
@ -1602,7 +1605,7 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user)
} }
else else
{ {
strcat(outpars,"+"); charlcat(outpars,'+',MAXBUF);
} }
} }
direction = 1; direction = 1;
@ -1619,7 +1622,7 @@ void ModeParser::ServerMode(char **parameters, int pcnt, userrec *user)
} }
else else
{ {
strcat(outpars,"-"); charlcat(outpars,'-',MAXBUF);
} }
} }
direction = 0; direction = 0;