From: Michael Poole Date: Mon, 6 Jul 2009 01:27:24 +0000 (+0000) Subject: Fix SF bug #2596914 (/mode +v nick:level gives oplevel). X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=commitdiff_plain;h=a0e139d590e06d8e915de8c61b84137c553df033 Fix SF bug #2596914 (/mode +v nick:level gives oplevel). git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1915 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index a865be6..0167084 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-07-05 Michael Poole + + * ircd/channel.c (mode_parse_client): Ignore anything after a + colon when the mode is CHFL_VOICE or the mode is being removed. + 2009-07-04 Michael Poole * ircd/s_auth.c (find_conf_client): New function. diff --git a/ircd/channel.c b/ircd/channel.c index ee5a887..a7ae512 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -2989,17 +2989,19 @@ mode_parse_client(struct ParseState *state, int *flag_p) if (colon != NULL) { *colon++ = '\0'; req_oplevel = atoi(colon); - if (!(state->flags & MODE_PARSE_FORCE) + if (*flag_p == CHFL_VOICE || state->dir == MODE_DEL) { + /* Ignore the colon and its argument. */ + } else if (!(state->flags & MODE_PARSE_FORCE) && state->member && (req_oplevel < OpLevel(state->member) || (req_oplevel == OpLevel(state->member) && OpLevel(state->member) < MAXOPLEVEL) - || req_oplevel > MAXOPLEVEL)) + || req_oplevel > MAXOPLEVEL)) { send_reply(state->sptr, ERR_NOTLOWEROPLEVEL, t_str, state->chptr->chname, OpLevel(state->member), req_oplevel, "op", OpLevel(state->member) == req_oplevel ? "the same" : "a higher"); - else if (req_oplevel <= MAXOPLEVEL) + } else if (req_oplevel <= MAXOPLEVEL) oplevel = req_oplevel; } /* find client we're manipulating */