X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=ircd%2Fm_clearmode.c;h=2e02bb0253ca9acf7baf31c3d313a7eb7e3991f1;hp=4d0f17924ad13922f88ee67d461fa07a7abf21fc;hb=e894de73de8e7846934ecdf4d7cc3a14d5635ce6;hpb=c3727b053aa20cecf3984cc0c9c23b0140edf52c diff --git a/ircd/m_clearmode.c b/ircd/m_clearmode.c index 4d0f179..2e02bb0 100644 --- a/ircd/m_clearmode.c +++ b/ircd/m_clearmode.c @@ -113,6 +113,7 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr, static int flags[] = { MODE_CHANOP, 'o', MODE_VOICE, 'v', + MODE_HALFOP, 'h', MODE_PRIVATE, 'p', MODE_SECRET, 's', MODE_MODERATED, 'm', @@ -127,6 +128,7 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr, MODE_NOCOLOUR, 'c', MODE_NOCTCP, 'C', MODE_NOAMSGS, 'M', + MODE_BANEXCEPTION, 'e', 0x0, 0x0 }; int *flag_p; @@ -193,12 +195,12 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr, } /* Deal with users on the channel */ - if (del_mode & (MODE_BAN | MODE_CHANOP | MODE_VOICE)) + if (del_mode & (MODE_BAN | MODE_BANEXCEPTION | MODE_CHANOP | MODE_HALFOP | MODE_VOICE)) for (member = chptr->members; member; member = member->next_member) { if (IsZombie(member)) /* we ignore zombies */ continue; - if (del_mode & MODE_BAN) /* If we cleared bans, clear the valid flags */ + if (del_mode & (MODE_BAN | MODE_BANEXCEPTION)) /* If we cleared bans, clear the valid flags */ ClearBanValid(member); /* Drop channel operator status */ @@ -206,6 +208,12 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr, modebuf_mode_client(&mbuf, MODE_DEL | MODE_CHANOP, member->user, MAXOPLEVEL + 1); member->status &= ~CHFL_CHANOP; } + + /* Drop halfop */ + if (IsHalfOp(member) && del_mode & MODE_HALFOP) { + modebuf_mode_client(&mbuf, MODE_DEL | MODE_HALFOP, member->user, MAXOPLEVEL + 1); + member->status &= ~CHFL_HALFOP; + } /* Drop voice */ if (HasVoice(member) && del_mode & MODE_VOICE) { @@ -278,7 +286,7 @@ int mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { struct Channel *chptr; - char *control = "ovpsmikbl"; /* default control string */ + char *control = "ovpsmikble"; /* default control string */ const char *chname, *qreason; int force = 0;