ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/modules/m_admin.c
(Generate patch)

Comparing:
ircd-hybrid-7.2/modules/m_admin.c (file contents), Revision 589 by michael, Mon May 8 18:40:00 2006 UTC vs.
ircd-hybrid/trunk/modules/m_admin.c (file contents), Revision 1834 by michael, Fri Apr 19 19:50:27 2013 UTC

# Line 1 | Line 1
1   /*
2   *  ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
3 *  m_admin.c: Sends administrative information to a user.
3   *
4   *  Copyright (C) 2002 by the past and present ircd coders, and others.
5   *
# Line 18 | Line 17
17   *  along with this program; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
19   *  USA
20 < *
21 < *  $Id$
20 > */
21 >
22 > /*! \file m_admin.c
23 > * \brief Includes required functions for processing the ADMIN command.
24 > * \version $Id$
25   */
26  
27   #include "stdinc.h"
26 #include "handlers.h"
28   #include "client.h"
29   #include "ircd.h"
30   #include "numeric.h"
31 < #include "s_conf.h"
31 > #include "conf.h"
32   #include "s_serv.h"
33   #include "send.h"
33 #include "msg.h"
34   #include "parse.h"
35 #include "hook.h"
35   #include "modules.h"
36   #include "irc_string.h"
37  
39 static void m_admin(struct Client *, struct Client *, int, char *[]);
40 static void mr_admin(struct Client *, struct Client *, int, char *[]);
41 static void ms_admin(struct Client *, struct Client *, int, char *[]);
42 static void do_admin(struct Client *);
43
44 struct Message admin_msgtab = {
45  "ADMIN", 0, 0, 0, 0, MFLG_SLOW | MFLG_UNREG, 0,
46  {mr_admin, m_admin, ms_admin, m_ignore, ms_admin, m_ignore}
47 };
48
49 #ifndef STATIC_MODULES
50 static struct Callback *admin_cb;
51 const char *_version = "$Revision$";
52
53 static void *
54 va_admin(va_list args)
55 {
56  do_admin(va_arg(args, struct Client *));
57  return NULL;
58 }
38  
60 void
61 _modinit(void)
62 {
63  admin_cb = register_callback("doing_admin", va_admin);
64  mod_add_cmd(&admin_msgtab);
65 }
66
67 void
68 _moddeinit(void)
69 {
70  mod_del_cmd(&admin_msgtab);
71  uninstall_hook(admin_cb, va_admin);
72 }
73 #endif
39  
40 < /*
41 < * mr_admin - ADMIN command handler
42 < *      parv[0] = sender prefix  
78 < *      parv[1] = servername  
40 > /*! \brief Sends administrative information about this server.
41 > *
42 > * \param source_p Pointer to client to report to
43   */
44   static void
45 < mr_admin(struct Client *client_p, struct Client *source_p,
82 <         int parc, char *parv[])
45 > do_admin(struct Client *source_p)
46   {
47 <  static time_t last_used = 0;
48 <
86 <  ClearCap(client_p, CAP_TS6);
47 >  const char *me_name = ID_or_name(&me, source_p->from);
48 >  const char *nick = ID_or_name(source_p, source_p->from);
49  
50 <  if ((last_used + ConfigFileEntry.pace_wait_simple) > CurrentTime)
51 <  {
52 <    sendto_one(source_p, form_str(RPL_LOAD2HI),
53 <               me.name, EmptyString(parv[0]) ? "*" : parv[0]);
92 <    return;
93 <  }
50 >  sendto_realops_flags(UMODE_SPY, L_ALL, SEND_NOTICE,
51 >                       "ADMIN requested by %s (%s@%s) [%s]",
52 >                       source_p->name, source_p->username,
53 >                       source_p->host, source_p->servptr->name);
54  
55 <  last_used = CurrentTime;
55 >  sendto_one(source_p, form_str(RPL_ADMINME),
56 >             me_name, nick, me.name);
57  
58 < #ifdef STATIC_MODULES
59 <  do_admin(client_p);
60 < #else
61 <  execute_callback(admin_cb, source_p, parc, parv);
62 < #endif
58 >  if (AdminInfo.name != NULL)
59 >    sendto_one(source_p, form_str(RPL_ADMINLOC1),
60 >               me_name, nick, AdminInfo.name);
61 >  if (AdminInfo.description != NULL)
62 >    sendto_one(source_p, form_str(RPL_ADMINLOC2),
63 >               me_name, nick, AdminInfo.description);
64 >  if (AdminInfo.email != NULL)
65 >    sendto_one(source_p, form_str(RPL_ADMINEMAIL),
66 >               me_name, nick, AdminInfo.email);
67   }
68  
69 < /*
70 < * m_admin - ADMIN command handler
71 < *      parv[0] = sender prefix
72 < *      parv[1] = servername
69 > /*! \brief NICK command handler (called by already registered,
70 > *         locally connected clients)
71 > *
72 > * \param client_p Pointer to allocated Client struct with physical connection
73 > *                 to this server, i.e. with an open socket connected.
74 > * \param source_p Pointer to allocated Client struct from which the message
75 > *                 originally comes from.  This can be a local or remote client.
76 > * \param parc     Integer holding the number of supplied arguments.
77 > * \param parv     Argument vector where parv[0] .. parv[parc-1] are non-NULL
78 > *                 pointers.
79 > * \note Valid arguments for this command are:
80 > *      - parv[0] = sender prefix
81 > *      - parv[1] = nickname/servername
82   */
83   static void
84   m_admin(struct Client *client_p, struct Client *source_p,
# Line 126 | Line 100 | m_admin(struct Client *client_p, struct
100                      parc, parv) != HUNTED_ISME)
101        return;
102  
103 < #ifdef STATIC_MODULES
130 <  do_admin(client_p);
131 < #else
132 <  execute_callback(admin_cb, source_p, parc, parv);
133 < #endif
103 >  do_admin(source_p);
104   }
105  
106 < /*
107 < * ms_admin - ADMIN command handler, used for OPERS as well
108 < *      parv[0] = sender prefix
109 < *      parv[1] = servername
106 > /*! \brief ADMIN command handler (called by operators and
107 > *         remotely connected clients)
108 > *
109 > * \param client_p Pointer to allocated Client struct with physical connection
110 > *                 to this server, i.e. with an open socket connected.
111 > * \param source_p Pointer to allocated Client struct from which the message
112 > *                 originally comes from.  This can be a local or remote client.
113 > * \param parc     Integer holding the number of supplied arguments.
114 > * \param parv     Argument vector where parv[0] .. parv[parc-1] are non-NULL
115 > *                 pointers.
116 > * \note Valid arguments for this command are:
117 > *      - parv[0] = sender prefix
118 > *      - parv[1] = nickname/servername
119   */
120   static void
121   ms_admin(struct Client *client_p, struct Client *source_p,
122           int parc, char *parv[])
123   {
124 <  if (hunt_server(client_p, source_p, ":%s ADMIN :%s", 1, parc, parv)
125 <                  != HUNTED_ISME)
124 >  if (hunt_server(client_p, source_p, ":%s ADMIN :%s", 1,
125 >                  parc, parv) != HUNTED_ISME)
126      return;
127  
128    if (IsClient(source_p))
150 #ifdef STATIC_MODULES
129      do_admin(source_p);
152 #else
153    execute_callback(admin_cb, source_p, parc, parv);
154 #endif
130   }
131  
132 < /* do_admin()
133 < *
134 < * inputs       - pointer to client to report to
135 < * output       - none
136 < * side effects - admin info is sent to client given
162 < */
132 > static struct Message admin_msgtab = {
133 >  "ADMIN", 0, 0, 0, MAXPARA, MFLG_SLOW, 0,
134 >  { m_unregistered, m_admin, ms_admin, m_ignore, ms_admin, m_ignore }
135 > };
136 >
137   static void
138 < do_admin(struct Client *source_p)
138 > module_init(void)
139   {
140 <  const char *me_name;
141 <  const char *nick;
168 <
169 <  me_name = ID_or_name(&me, source_p->from);
170 <  nick = ID_or_name(source_p, source_p->from);
140 >  mod_add_cmd(&admin_msgtab);
141 > }
142  
143 <  sendto_one(source_p, form_str(RPL_ADMINME),
144 <             me_name, nick, me.name);
145 <  if (AdminInfo.name != NULL)
146 <    sendto_one(source_p, form_str(RPL_ADMINLOC1),
176 <               me_name, nick, AdminInfo.name);
177 <  if (AdminInfo.description != NULL)
178 <    sendto_one(source_p, form_str(RPL_ADMINLOC2),
179 <               me_name, nick, AdminInfo.description);
180 <  if (AdminInfo.email != NULL)
181 <    sendto_one(source_p, form_str(RPL_ADMINEMAIL),
182 <               me_name, nick, AdminInfo.email);
143 > static void
144 > module_exit(void)
145 > {
146 >  mod_del_cmd(&admin_msgtab);
147   }
148 +
149 + struct module module_entry = {
150 +  .node    = { NULL, NULL, NULL },
151 +  .name    = NULL,
152 +  .version = "$Revision$",
153 +  .handle  = NULL,
154 +  .modinit = module_init,
155 +  .modexit = module_exit,
156 +  .flags   = 0
157 + };

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)