]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/cmd_stats.cpp
Decide that it wasn't quite appropriate :(
[user/henk/code/inspircd.git] / src / cmd_stats.cpp
index d45ce68d96fedb81769a66aefdd328d858ea1c5b..d784b02f6a085c0b67fc6783badb5635e74ec542 100644 (file)
@@ -2,10 +2,10 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2005 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
  *                       E-mail:
- *                <brain.net>
- *                <Craig.net>
+ *                <brain@chatspike.net>
+ *                <Craig@chatspike.net>
  *
  * Written by Craig Edwards, Craig McLure, and others.
  * This program is free but copyrighted software; see
@@ -70,7 +70,7 @@ extern chan_hash chanlist;
 extern whowas_hash whowas;
 extern std::vector<userrec*> all_opers;
 extern std::vector<userrec*> local_users;
-extern userrec* fd_ref_table[65536];
+extern userrec* fd_ref_table[MAX_DESCRIPTORS];
 
 void cmd_stats::Handle (char **parameters, int pcnt, userrec *user)
 {
@@ -84,8 +84,17 @@ void cmd_stats::Handle (char **parameters, int pcnt, userrec *user)
                parameters[0][1] = '\0';
        }
 
+       if ((*Config->OperOnlyStats) && (strchr(Config->OperOnlyStats,*parameters[0])) && (!*user->oper))
+       {
+               WriteServ(user->fd,"481 %s :Permission denied - STATS %c is oper-only",user->nick,*parameters[0]);
+               return;
+       }
 
-       FOREACH_MOD OnStats(*parameters[0]);
+
+       int MOD_RESULT = 0;
+       FOREACH_RESULT(I_OnStats,OnStats(*parameters[0],user));
+       if (MOD_RESULT)
+               return;
 
        if (*parameters[0] == 'c')
        {
@@ -127,7 +136,7 @@ void cmd_stats::Handle (char **parameters, int pcnt, userrec *user)
                int idx = 0;
                for (user_hash::iterator i = clientlist.begin(); i != clientlist.end(); i++)
                {
-                       if (strchr(i->second->modes,'o'))
+                       if (*i->second->oper)
                        {
                                WriteServ(user->fd,"249 %s :%s (%s@%s) Idle: %d",user->nick,i->second->nick,i->second->ident,i->second->dhost,(TIME - i->second->idle_lastmsg));
                                idx++;
@@ -164,12 +173,12 @@ void cmd_stats::Handle (char **parameters, int pcnt, userrec *user)
        /* stats m (list number of times each command has been used, plus bytecount) */
        if (*parameters[0] == 'm')
        {
-               for (unsigned int i = 0; i < ServerInstance->Parser->cmdlist.size(); i++)
+               for (nspace::hash_map<std::string,command_t*>::iterator i = ServerInstance->Parser->cmdlist.begin(); i != ServerInstance->Parser->cmdlist.end(); i++)
                {
-                       if (ServerInstance->Parser->cmdlist[i]->use_count)
+                       if (i->second->use_count)
                        {
                                /* RPL_STATSCOMMANDS */
-                               WriteServ(user->fd,"212 %s %s %d %d",user->nick,ServerInstance->Parser->cmdlist[i]->command.c_str(),ServerInstance->Parser->cmdlist[i]->use_count,ServerInstance->Parser->cmdlist[i]->total_bytes);
+                               WriteServ(user->fd,"212 %s %s %d %d",user->nick,i->second->command.c_str(),i->second->use_count,i->second->total_bytes);
                        }
                }