/** * modinspect.C: A simple module inspector. * * Copyright © 2007 Pippijn van Steenhoven / The Ermyth Team * Rights to this code are as documented in COPYING. * * * Portions of this file were derived from sources bearing the following license: * Copyright © 2005-2006 Atheme Development Group * Rights to this code are as documented in doc/pod/license.pod. * * $Id: modinspect.C,v 1.8 2007/09/22 14:27:28 pippijn Exp $ */ #include "atheme.h" #include static char const rcsid[] = "$Id: modinspect.C,v 1.8 2007/09/22 14:27:28 pippijn Exp $"; REGISTER_MODULE ("operserv/modinspect", false, "The Ermyth Team "); static void os_cmd_modinspect (sourceinfo_t *si, int parc, char *parv[]); E cmdvec os_cmdtree; E helpvec os_helptree; command_t const os_modinspect = { "MODINSPECT", N_("Displays information about loaded modules."), PRIV_SERVER_AUSPEX, 1, os_cmd_modinspect }; bool _modinit (module *m) { os_cmdtree << os_modinspect; help_addentry (os_helptree, "MODINSPECT", "help/operserv/modinspect", NULL); return true; } void _moddeinit (void) { os_cmdtree >> os_modinspect; help_delentry (os_helptree, "MODINSPECT"); } static void os_cmd_modinspect (sourceinfo_t *si, int parc, char *parv[]) { char *mname = parv[0]; module *m; if (!mname) { command_fail (si, fault::needmoreparams, STR_INSUFFICIENT_PARAMS, "MODINSPECT"); command_fail (si, fault::needmoreparams, _("Syntax: MODINSPECT ")); return; } logcommand (si, CMDLOG_GET, "MODINSPECT %s", mname); m = modules::find (mname); if (!m) { command_fail (si, fault::nosuch_target, _("\2%s\2 does not exist."), mname); return; } if (!m->enabled) { command_fail (si, fault::nosuch_target, _("\2%s\2 is not loaded."), mname); return; } command_success_nodata (si, _("Information on \2%s\2:"), mname); command_success_nodata (si, _("Name : %s"), m->name); command_success_nodata (si, _("Entry point: %p"), m->init); command_success_nodata (si, _("Exit point : %p"), m->fini); command_success_nodata (si, _("Version : %s"), m->version); command_success_nodata (si, _("Vendor : %s"), m->vendor); command_success_nodata (si, _("*** \2End of Info\2 ***")); }