projects
/
ircu2.10.12-pk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed ssl.c bug when ssl backend returns IO_BLOCKED but IO engine doesn't get informe...
[ircu2.10.12-pk.git]
/
ircd
/
m_clearmode.c
diff --git
a/ircd/m_clearmode.c
b/ircd/m_clearmode.c
index 4d0f17924ad13922f88ee67d461fa07a7abf21fc..2e02bb0253ca9acf7baf31c3d313a7eb7e3991f1 100644
(file)
--- 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',
static int flags[] = {
MODE_CHANOP, 'o',
MODE_VOICE, 'v',
+ MODE_HALFOP, 'h',
MODE_PRIVATE, 'p',
MODE_SECRET, 's',
MODE_MODERATED, 'm',
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_NOCOLOUR, 'c',
MODE_NOCTCP, 'C',
MODE_NOAMSGS, 'M',
+ MODE_BANEXCEPTION, 'e',
0x0, 0x0
};
int *flag_p;
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 */
}
/* Deal with users on the channel */
- if (del_mode & (MODE_BAN | MODE_
CHAN
OP | MODE_VOICE))
+ if (del_mode & (MODE_BAN | MODE_
BANEXCEPTION | MODE_CHANOP | MODE_HALF
OP | MODE_VOICE))
for (member = chptr->members; member; member = member->next_member) {
if (IsZombie(member)) /* we ignore zombies */
continue;
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 */
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;
}
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) {
/* 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;
mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
{
struct Channel *chptr;
- char *control = "ovpsmikbl"; /* default control string */
+ char *control = "ovpsmikbl
e
"; /* default control string */
const char *chname, *qreason;
int force = 0;
const char *chname, *qreason;
int force = 0;