X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/df7e3dabce92bfa83d59e93cb8cf112e632a757b..6ac21a70e238ca31704f4a5be3a3b71af2c2d2d0:/ircd/modules.c diff --git a/ircd/modules.c b/ircd/modules.c index 1add7c6b..e4dc728b 100644 --- a/ircd/modules.c +++ b/ircd/modules.c @@ -41,7 +41,7 @@ #include #ifndef LT_MODULE_EXT -# error "Charybdis requires loadable module support." +# error "Solanum requires loadable module support." #endif rb_dlink_list module_list; @@ -51,6 +51,7 @@ static const char *core_module_table[] = { "m_ban", "m_die", "m_error", + "m_identified", "m_join", "m_kick", "m_kill", @@ -297,6 +298,10 @@ load_one_module(const char *path, int origin, bool coremodule) } sendto_realops_snomask(SNO_GENERAL, L_ALL, "Cannot locate module %s", path); + + if (server_state_foreground) + ierror("cannot locate module %s", path); + return false; } @@ -405,8 +410,7 @@ unload_one_module(const char *name, bool warn) continue; } - if (m->cap_id != NULL) - capability_orphan(idx, m->cap_name); + capability_orphan(idx, m->cap_name); } } break; @@ -536,6 +540,38 @@ load_a_module(const char *path, bool warn, int origin, bool core) { struct mapi_mheader_av2 *mheader = (struct mapi_mheader_av2 *)(void *)mapi_version; /* see above */ + if(mheader->mapi_cap_list) + { + mapi_cap_list_av2 *m; + for (m = mheader->mapi_cap_list; m->cap_name; ++m) + { + struct CapabilityIndex *idx; + int result; + + switch (m->cap_index) + { + case MAPI_CAP_CLIENT: + idx = cli_capindex; + break; + case MAPI_CAP_SERVER: + idx = serv_capindex; + break; + default: + sendto_realops_snomask(SNO_GENERAL, L_ALL, + "Unknown/unsupported CAP index found of type %d on capability %s when loading %s", + m->cap_index, m->cap_name, mod_displayname); + ilog(L_MAIN, + "Unknown/unsupported CAP index found of type %d on capability %s when loading %s", + m->cap_index, m->cap_name, mod_displayname); + continue; + } + + result = capability_put(idx, m->cap_name, m->cap_ownerdata); + if (m->cap_id != NULL) + *(m->cap_id) = result; + } + } + /* XXX duplicated code :( */ if(mheader->mapi_register && (mheader->mapi_register() == -1)) { @@ -544,6 +580,26 @@ load_a_module(const char *path, bool warn, int origin, bool core) sendto_realops_snomask(SNO_GENERAL, L_ALL, "Module %s indicated failure during load.", mod_displayname); + if(mheader->mapi_cap_list) + { + mapi_cap_list_av2 *m; + for (m = mheader->mapi_cap_list; m->cap_name; ++m) + { + struct CapabilityIndex *idx; + switch (m->cap_index) + { + case MAPI_CAP_CLIENT: + idx = cli_capindex; + break; + case MAPI_CAP_SERVER: + idx = serv_capindex; + break; + default: + continue; + } + capability_orphan(idx, m->cap_name); + } + } lt_dlclose(tmpptr); rb_free(mod_displayname); return false; @@ -587,44 +643,17 @@ load_a_module(const char *path, bool warn, int origin, bool core) { mapi_hfn_list_av1 *m; for (m = mheader->mapi_hfn_list; m->hapi_name; ++m) - add_hook(m->hapi_name, m->fn); + { + int priority = m->priority; + if (priority == 0) + priority = HOOK_NORMAL; + add_hook_prio(m->hapi_name, m->fn, priority); + } } /* New in MAPI v2 - version replacement */ ver = mheader->mapi_module_version ? mheader->mapi_module_version : ircd_version; description = mheader->mapi_module_description; - - if(mheader->mapi_cap_list) - { - mapi_cap_list_av2 *m; - for (m = mheader->mapi_cap_list; m->cap_name; ++m) - { - struct CapabilityIndex *idx; - int result; - - switch (m->cap_index) - { - case MAPI_CAP_CLIENT: - idx = cli_capindex; - break; - case MAPI_CAP_SERVER: - idx = serv_capindex; - break; - default: - sendto_realops_snomask(SNO_GENERAL, L_ALL, - "Unknown/unsupported CAP index found of type %d on capability %s when loading %s", - m->cap_index, m->cap_name, mod_displayname); - ilog(L_MAIN, - "Unknown/unsupported CAP index found of type %d on capability %s when loading %s", - m->cap_index, m->cap_name, mod_displayname); - continue; - } - - result = capability_put(idx, m->cap_name, m->cap_ownerdata); - if (m->cap_id != NULL) - *(m->cap_id) = result; - } - } } break;