X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_kick.c;h=447329a90bf94a11b68a86d87df0be2b550856cf;hb=f6892ecd79c6113544106e32374075f489bf95a7;hp=f2a67d58754030540dc8b7edba39e5243c28cdbd;hpb=dc0367a5dc496477adc5afaee2c536e538df98b4;p=ircu2.10.12-pk.git diff --git a/ircd/m_kick.c b/ircd/m_kick.c index f2a67d5..447329a 100644 --- a/ircd/m_kick.c +++ b/ircd/m_kick.c @@ -124,7 +124,7 @@ int m_kick(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) return send_reply(sptr, ERR_NOSUCHCHANNEL, name); if (!(member2 = find_member_link(chptr, sptr)) || IsZombie(member2) - || (!IsChanOp(member2) && !(IsNetServ(sptr) && IsSecurityServ(sptr) && IsChannelService(sptr)))) + || (!IsChanOpOrHalfOp(member2) && !(IsNetServ(sptr) && IsSecurityServ(sptr) && IsChannelService(sptr)))) return send_reply(sptr, ERR_CHANOPRIVSNEEDED, name); if (!(who = find_chasing(sptr, parv[2], 0))) @@ -141,6 +141,10 @@ int m_kick(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) /* check if kicked user is actually on the channel */ if (!(member = find_member_link(chptr, who)) || IsZombie(member) || (IsInvisibleJoin(member) && IsDelayedJoin(member))) return send_reply(sptr, ERR_USERNOTINCHANNEL, cli_name(who), chptr->chname); + + /* Don't allow oped users to be kicked by halfops */ + if (IsChanOp(member) && !IsChanOp(member2) && who != sptr) + return send_reply(sptr, ERR_CHANOPRIVSNEEDED, name); /* Don't allow to kick member with a higher op-level, * or members with the same op-level unless both are MAXOPLEVEL.