git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1935
c9e4aea6-c8fd-4c43-8297-
357d70d61c8c
+2010-01-06 Michael Poole <mdpoole@troilus.org>
+
+ * ircd/m_burst.c (ms_burst): Gracefully handle the case where a
+ server sends us a too-large oplevel. Forward oplevels whenever
+ they are in use, not just when the channel is +A.
+
2010-01-04 Kevin L. Mitchell <klmitch@mit.edu>
* ircd/m_xquery.c (ms_xquery): Resolving my patches with
2010-01-04 Kevin L. Mitchell <klmitch@mit.edu>
* ircd/m_xquery.c (ms_xquery): Resolving my patches with
} while (IsDigit(*ptr));
--ptr;
oplevel += level_increment;
} while (IsDigit(*ptr));
--ptr;
oplevel += level_increment;
+ if (oplevel > MAXOPLEVEL) {
+ protocol_violation(sptr, "Invalid cumulative oplevel %u during burst", oplevel);
+ oplevel = MAXOPLEVEL;
+ break;
+ }
}
else { /* I don't recognize that flag */
protocol_violation(sptr, "Invalid flag '%c' in nick part of burst", *ptr);
}
else { /* I don't recognize that flag */
protocol_violation(sptr, "Invalid flag '%c' in nick part of burst", *ptr);
nickstr[nickpos++] = 'v';
if (current_mode & CHFL_CHANOP)
{
nickstr[nickpos++] = 'v';
if (current_mode & CHFL_CHANOP)
{
- if (chptr->mode.apass[0])
+ if (oplevel != MAXOPLEVEL)
nickpos += ircd_snprintf(0, nickstr + nickpos, sizeof(nickstr) - nickpos, "%u", oplevel);
else
nickstr[nickpos++] = 'o';
nickpos += ircd_snprintf(0, nickstr + nickpos, sizeof(nickstr) - nickpos, "%u", oplevel);
else
nickstr[nickpos++] = 'o';