static void do_modlist(struct Client *, const char *);
static void do_modrestart(struct Client *);
+extern void modules_do_reload(void *); /* end of ircd/modules.c */
extern void modules_do_restart(void *); /* end of ircd/modules.c */
struct Message modload_msgtab = {
static void
me_modload(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
- if(!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_MODULE))
- {
- sendto_one_notice(source_p, ":*** You do not have an appropriate shared block "
- "to load modules on this server.");
- return;
- }
-
do_modload(source_p, parv[1]);
}
static void
me_modunload(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
- if(!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_MODULE))
- {
- sendto_one_notice(source_p, ":*** You do not have an appropriate shared block "
- "to load modules on this server.");
- return;
- }
-
do_modunload(source_p, parv[1]);
}
static void
me_modreload(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
- if(!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_MODULE))
- {
- sendto_one_notice(source_p, ":*** You do not have an appropriate shared block "
- "to load modules on this server.");
- return;
- }
-
do_modreload(source_p, parv[1]);
}
static void
me_modlist(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
- if(!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_MODULE))
- {
- sendto_one_notice(source_p, ":*** You do not have an appropriate shared block "
- "to load modules on this server.");
- return;
- }
-
do_modlist(source_p, parv[1]);
}
static void
me_modrestart(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_p, int parc, const char **parv)
{
- if(!find_shared_conf(source_p->username, source_p->host, source_p->servptr->name, SHARED_MODULE))
- {
- sendto_one_notice(source_p, ":*** You do not have an appropriate shared block "
- "to load modules on this server.");
- return;
- }
-
do_modrestart(source_p);
}
static void
do_modreload(struct Client *source_p, const char *module)
{
- struct module *mod;
- int check_core;
- char *m_bn = rb_basename(module);
-
- if((mod = findmodule_byname(m_bn)) == NULL)
- {
- sendto_one_notice(source_p, ":Module %s is not loaded", m_bn);
- rb_free(m_bn);
- return;
- }
-
- check_core = mod->core;
-
- mod_remember_clicaps();
-
- if(unload_one_module(m_bn, true) == false)
- {
- sendto_one_notice(source_p, ":Module %s is not loaded", m_bn);
- rb_free(m_bn);
- return;
- }
-
- if((load_one_module(m_bn, mod->origin, check_core) == false) && check_core)
- {
- sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
- "Error reloading core module: %s: terminating ircd", m_bn);
- ilog(L_MAIN, "Error loading core module %s: terminating ircd", m_bn);
- exit(0);
- }
-
- mod_notify_clicaps();
-
- rb_free(m_bn);
+ struct modreload *info = rb_malloc(sizeof *info);
+ strcpy(info->module, module);
+ strcpy(info->id, source_p->id);
+ rb_event_addonce("modules_do_reload", modules_do_reload, info, 1);
}
static void