X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcmd_stats.cpp;h=d784b02f6a085c0b67fc6783badb5635e74ec542;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=d45ce68d96fedb81769a66aefdd328d858ea1c5b;hpb=293df6a8b55e89c127e60e92711ef0ef1027bff8;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/cmd_stats.cpp b/src/cmd_stats.cpp index d45ce68d9..d784b02f6 100644 --- a/src/cmd_stats.cpp +++ b/src/cmd_stats.cpp @@ -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: - * - * + * + * * * 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 all_opers; extern std::vector 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::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); } }