X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/625a2b1f99dc8cb84d864720da82d01d09ee38a9..8097430a810ac1535fe5304f74991b16ff58b064:/modules/m_invite.c diff --git a/modules/m_invite.c b/modules/m_invite.c index b8782d0..8dd0a73 100644 --- a/modules/m_invite.c +++ b/modules/m_invite.c @@ -145,11 +145,31 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char /* unconditionally require ops, unless the channel is +g */ /* treat remote clients as chanops */ - if(MyClient(source_p) && !is_chanop(msptr) && + if(MyClient(source_p) && !is_any_op(msptr) && !(chptr->mode.mode & MODE_FREEINVITE)) { - sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED), - me.name, source_p->name, parv[2]); + if(IsOverride(source_p)) + { + sendto_wallops_flags(UMODE_WALLOP, &me, + "%s is overriding INVITE [%s] on [%s]", + get_oper_name(source_p), target_p->name, chptr->chname); + sendto_server(NULL, chptr, NOCAPS, NOCAPS, + ":%s WALLOPS :%s is overriding INVITE [%s] on [%s]", + me.name, get_oper_name(source_p), target_p->name, chptr->chname); + } + else + { + sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED), + me.name, source_p->name, parv[2]); + return 0; + } + } + + if (IsSetNoInvite(target_p)) + { + sendto_one_numeric(source_p, ERR_NOINVITE, + form_str(ERR_NOINVITE), + target_p->name); return 0; }