/* * invex_regonly.c Allow invite exemptions to bypass registered-only (+r) */ #include "stdinc.h" #include "modules.h" #include "hook.h" #include "channel.h" #include "s_conf.h" #include "numeric.h" static void h_can_join(void *); mapi_hfn_list_av1 invex_regonly_hfnlist[] = { { "can_join", h_can_join }, { NULL, NULL } }; DECLARE_MODULE_AV1(invex_regonly, NULL, NULL, NULL, NULL, invex_regonly_hfnlist, "$Revision$"); static void h_can_join(void *data_) { hook_data_channel *data = data_; struct Client *source_p = data->client; struct Channel *chptr = data->chptr; struct Ban *invex = NULL; struct matchset ms; rb_dlink_node *ptr; if(data->approved != ERR_NEEDREGGEDNICK) return; if(!ConfigChannel.use_invex) return; matchset_for_client(source_p, &ms); RB_DLINK_FOREACH(ptr, chptr->invexlist.head) { invex = ptr->data; if (matches_mask(&ms, invex->banstr) || match_extban(invex->banstr, source_p, chptr, CHFL_INVEX)) { data->approved = 0; break; } } }