X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fchannel.c;h=3f563c326168645878d85aee5c29070dfae8deb4;hp=28c6547d5dd81a9d58a77dd6b909d03674bfcd49;hb=57bc53387d1284eb0a749b77f3ebefb57db44a21;hpb=931fd0f059fedf7837cd2cd51e23d4ba460cd3d8 diff --git a/ircd/channel.c b/ircd/channel.c index 28c6547..3f563c3 100644 --- a/ircd/channel.c +++ b/ircd/channel.c @@ -2339,17 +2339,17 @@ struct ParseState { struct Membership *member; int parc; char **parv; - unsigned int flags; - unsigned int dir; - unsigned int done; - unsigned int add; - unsigned int del; + ulong64 flags; + ulong64 dir; + ulong64 done; + ulong64 add; + ulong64 del; int args_used; int max_args; int numbans; struct Ban banlist[MAXPARA]; struct { - unsigned int flag; + ulong64 flag; unsigned short oplevel; struct Client *client; } cli_change[MAXPARA]; @@ -3133,16 +3133,12 @@ static void audit_chan_users(struct ParseState *state, ulong64 *flag_p) { sendcmdto_channel_butserv_butone(member->user, CMD_PART, member->channel, member->user, SKIP_OPS, "%H :%s", member->channel, "mode +u set."); } } - state->add |= flag_p[0]; - state->del &= ~flag_p[0]; } else { for(member = state->chptr->members; member; member = member->next_member) { if(!IsChanOp(member) && !HasVoice(member)) { sendcmdto_channel_butserv_butone(member->user, CMD_JOIN, member->channel, member->user, SKIP_OPS, ":%H", member->channel); } } - state->del |= flag_p[0]; - state->add &= ~flag_p[0]; } } @@ -3519,6 +3515,10 @@ mode_process_clients(struct ParseState *state) modebuf_mode_client(state->mbuf, state->cli_change[i].flag, state->cli_change[i].client, state->cli_change[i].oplevel); + + if(MyUser(member->user) && (member->channel->mode.mode & MODE_AUDITORIUM) && (state->cli_change[i].flag & MODE_CHANOP)) { + do_names(member->user, member->channel, NAMES_ALL|NAMES_EON|((member->status & MODE_CHANOP) ? 0 : NAMES_OPS)); + } } /* for (i = 0; state->cli_change[i].flags; i++) */ } @@ -3540,6 +3540,9 @@ mode_parse_mode(struct ParseState *state, ulong64 *flag_p) /* Local users are not permitted to change registration status */ if (flag_p[0] == MODE_REGISTERED && !(state->flags & MODE_PARSE_FORCE) && MyUser(state->sptr)) return; + + if(flag_p[0] == MODE_AUDITORIUM) + audit_chan_users(state, flag_p); if (state->dir == MODE_ADD) { state->add |= flag_p[0]; @@ -3674,9 +3677,6 @@ mode_parse(struct ModeBuf *mbuf, struct Client *cptr, struct Client *sptr, case 'l': /* deal with limits */ mode_parse_limit(&state, flag_p); break; - case 'u': /* deal with not oped members */ - audit_chan_users(&state, flag_p); - break; case 'a': /* deal with limits */ mode_parse_access(&state, flag_p); break; @@ -3947,7 +3947,7 @@ joinbuf_join(struct JoinBuf *jbuf, struct Channel *chan, unsigned int flags) } } - if((chan->mode.mode & MODE_DELJOINS) && !(flags & CHFL_VOICED_OR_OPPED)) { + if((chan->mode.mode & MODE_AUDITORIUM) && !(flags & CHFL_VOICED_OR_OPPED)) { //we have to send this JOIN event to ops only... sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_JOIN, chan, NULL, SKIP_NONOPS, "%H", chan); if(MyUser(jbuf->jb_source))