diff --git a/NEWS.md b/NEWS.md index 2b117cb33..e4405ba52 100644 --- a/NEWS.md +++ b/NEWS.md @@ -55,6 +55,7 @@ bolded warnings in the full release notes below. - Add extensions/drain to reject new connections - Add extensions/filter to filter messages, parts and quits with a Hyperscan database - Add extensions/sasl\_usercloak to interpolate SASL account names into I-line spoofs +- oper:override now overrides chanop requirement with cmode +f (forward). ### conf - **Breaking:** Completely overhaul oper privs. All privset configs will need to be rewritten. diff --git a/ircd/chmode.c b/ircd/chmode.c index 65d145244..49d738d24 100644 --- a/ircd/chmode.c +++ b/ircd/chmode.c @@ -515,8 +515,9 @@ check_forward(struct Client *source_p, struct Channel *chptr, } if(MyClient(source_p) && !(targptr->mode.mode & MODE_FREETARGET)) { - if((msptr = find_channel_membership(targptr, source_p)) == NULL || - get_channel_access(source_p, targptr, msptr, MODE_QUERY, NULL) < CHFL_CHANOP) + if(!HasPrivilege(source_p, "oper:override") + && ((msptr = find_channel_membership(targptr, source_p)) == NULL || + get_channel_access(source_p, targptr, msptr, MODE_QUERY, NULL) < CHFL_CHANOP)) { sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED), me.name, source_p->name, targptr->chname);