ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/ermyth/modules/operserv/modunload.C
Revision: 1.4
Committed: Sun Jul 22 18:38:43 2007 UTC (19 years, 3 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.3: +3 -3 lines
Log Message:
-fixed help
- temporarily work around corruption in jsonrpc

File Contents

# User Rev Content
1 pippijn 1.1 /*
2     * Copyright © 2005-2006 William Pitcock, et al.
3 pippijn 1.2 * Rights to this code are as documented in doc/pod/license.pod.
4 pippijn 1.1 *
5     * Removes a module from memory.
6     *
7 pippijn 1.4 * $Id: modunload.C,v 1.3 2007-07-21 13:23:21 pippijn Exp $
8 pippijn 1.1 */
9    
10     #include "atheme.h"
11    
12 pippijn 1.4 static char const rcsid[] = "$Id: modunload.C,v 1.3 2007-07-21 13:23:21 pippijn Exp $";
13 pippijn 1.1
14     struct os_modunload_listeners : callback::has_listeners
15     {
16     };
17    
18     os_modunload_listeners listeners;
19    
20     DECLARE_MODULE_V1 ("operserv/modunload", false, _modinit, _moddeinit, rcsid, "The Ermyth Team <http://ermyth.schmorp.de>");
21    
22     static void os_cmd_modunload (sourceinfo_t *si, int parc, char *parv[]);
23    
24     command_t os_modunload = { "MODUNLOAD", N_("Unloads a module."), PRIV_ADMIN, 20, os_cmd_modunload };
25    
26     cmdvec *os_cmdtree;
27     helpvec *os_helptree;
28     extern list_t modules;
29    
30     void
31     _modinit (module_t *m)
32     {
33     MODULE_USE_SYMBOL_T (os_cmdtree, cmdvec, "operserv/main", "os_cmdtree");
34     MODULE_USE_SYMBOL_T (os_helptree, helpvec, "operserv/main", "os_helptree");
35    
36     os_cmdtree << os_modunload;
37 pippijn 1.4 help_addentry (os_helptree, "MODUNLOAD", "help/operserv/modunload", NULL);
38 pippijn 1.1 }
39    
40     void
41     _moddeinit ()
42     {
43     os_cmdtree >> os_modunload;
44     help_delentry (os_helptree, "MODUNLOAD");
45     }
46    
47     static void
48     os_cmd_modunload (sourceinfo_t *si, int parc, char *parv[])
49     {
50     char *module;
51     int i;
52     module_t *m;
53    
54     if (parc < 1)
55     {
56     command_fail (si, fault_needmoreparams, STR_INSUFFICIENT_PARAMS, "MODUNLOAD");
57     command_fail (si, fault_needmoreparams, _("Syntax: MODUNLOAD <module...>"));
58     return;
59     }
60     i = 0;
61     while (i < parc)
62     {
63     module = parv[i++];
64     m = module_find_published (module);
65    
66     if (!m)
67     {
68     command_fail (si, fault_nosuch_target, _("\2%s\2 is not loaded; it cannot be unloaded."), module);
69     continue;
70     }
71    
72     if (m->header->norestart)
73     {
74     slog (LG_INFO, "%s tried to unload a permanent module", get_oper_name (si));
75     command_fail (si, fault_noprivs, _("\2%s\2 is an permanent module; it cannot be unloaded."), module);
76     continue;
77     }
78    
79     if (!strcmp (m->header->name, "operserv/main") || !strcmp (m->header->name, "operserv/modload") || !strcmp (m->header->name, "operserv/modunload"))
80     {
81     command_fail (si, fault_noprivs, _("Refusing to unload \2%s\2."), module);
82     continue;
83     }
84    
85     module_unload (m);
86    
87     logcommand (si, CMDLOG_ADMIN, "MODUNLOAD %s", module);
88     command_success_nodata (si, _("Module \2%s\2 unloaded."), module);
89     }
90     }
91    
92     /* vim:cinoptions=>s,e0,n0,f0,{0,}0,^0,=s,ps,t0,c3,+s,(2s,us,)20,*30,gs,hs
93     * vim:ts=8
94     * vim:sw=8
95     * vim:noexpandtab
96     */