mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-12 12:09:03 -04:00
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:
parent
5b46e2717d
commit
cf6d6a0665
29
src/mode.cpp
29
src/mode.cpp
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user