&& (!(check_modes & MODE_REGONLY) || IsAccount(member->user)))
continue;
sendcmdto_serv_butone(&me, CMD_KICK, NULL, "%H %C :Net Rider", chptr, member->user);
- sendcmdto_channel_butserv_butone(&me, CMD_KICK, chptr, NULL, 0, "%H %C :Net Rider", chptr, member->user);
+ sendcmdto_channel_butserv_butone(&his, CMD_KICK, chptr, NULL, 0, "%H %C :Net Rider", chptr, member->user);
make_zombie(member, member->user, &me, &me, chptr);
}
}
modebuf_mode(mbuf, MODE_DEL | chptr->mode.mode); /* wipeout modes */
chptr->mode.mode &= MODE_BURSTADDED | MODE_WASDELJOINS;
+ /* wipe out modes not represented in chptr->mode.mode */
+ if (chptr->mode.limit) {
+ modebuf_mode_uint(mbuf, MODE_DEL | MODE_LIMIT, chptr->mode.limit);
+ chptr->mode.limit = 0;
+ }
+ if (chptr->mode.key[0]) {
+ modebuf_mode_string(mbuf, MODE_DEL | MODE_KEY, chptr->mode.key, 0);
+ chptr->mode.key[0] = '\0';
+ }
+ if (chptr->mode.upass[0]) {
+ modebuf_mode_string(mbuf, MODE_DEL | MODE_UPASS, chptr->mode.upass, 0);
+ chptr->mode.upass[0] = '\0';
+ }
+ if (chptr->mode.apass[0]) {
+ modebuf_mode_string(mbuf, MODE_DEL | MODE_APASS, chptr->mode.apass, 0);
+ chptr->mode.apass[0] = '\0';
+ }
+
parse_flags |= (MODE_PARSE_SET | MODE_PARSE_WIPEOUT); /* wipeout keys */
/* mark bans for wipeout */
*chptr->topic = '\0';
*chptr->topic_nick = '\0';
chptr->topic_time = 0;
- sendcmdto_channel_butserv_butone(&me, CMD_TOPIC, chptr, NULL, 0,
+ sendcmdto_channel_butserv_butone(&his, CMD_TOPIC, chptr, NULL, 0,
"%H :%s", chptr, chptr->topic);
}
} else if (chptr->creationtime == timestamp) {
banstr[banpos++] = *ptr;
newban = make_ban(ban); /* create new ban */
-
- DupString(newban->who,
- cli_name(feature_bool(FEAT_HIS_BANWHO) ? &me : sptr));
+ strcpy(newban->who, "*");
newban->when = TStime();
newban->flags = BAN_BURSTED; /* set flags */
if (current_mode & CHFL_VOICE)
nickstr[nickpos++] = 'v';
if (current_mode & CHFL_CHANOP)
- nickpos += ircd_snprintf(0, nickstr + nickpos, sizeof(nickstr) - nickpos, "%u", oplevel);
+ {
+ if (chptr->mode.apass[0])
+ nickpos += ircd_snprintf(0, nickstr + nickpos, sizeof(nickstr) - nickpos, "%u", oplevel);
+ else
+ nickstr[nickpos++] = 'o';
+ }
} else if (current_mode & CHFL_CHANOP && oplevel != last_oplevel) { /* if just op level changed... */
nickstr[nickpos++] = ':'; /* add a specifier */
nickpos += ircd_snprintf(0, nickstr + nickpos, sizeof(nickstr) - nickpos, "%u", oplevel - last_oplevel);
modebuf_mode_client(mbuf, MODE_DEL | CHFL_CHANOP, member->user);
if (member->status & CHFL_VOICE)
modebuf_mode_client(mbuf, MODE_DEL | CHFL_VOICE, member->user);
- member->status = ((member->status & ~(CHFL_CHANOP | CHFL_VOICE)) |
- CHFL_DEOPPED);
+ member->status = (member->status
+ & ~(CHFL_CHANNEL_MANAGER | CHFL_CHANOP | CHFL_VOICE))
+ | CHFL_DEOPPED;
}
}
/* remove ban from channel */
if (lp->flags & (BAN_OVERLAPPED | BAN_BURST_WIPEOUT)) {
+ char *bandup;
+ DupString(bandup, lp->banstr);
modebuf_mode_string(mbuf, MODE_DEL | MODE_BAN,
- lp->banstr, 1); /* let it free banstr */
- lp->banstr = NULL; /* do not free this string */
+ bandup, 1);
*lp_p = lp->next; /* clip out of list */
free_ban(lp);
continue;