* | 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
extern time_t TIME;
extern user_hash clientlist;
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)
{
{
return;
}
- if (strlen(parameters[0])>1)
+ if (parameters[0][1])
{
/* make the stats query 1 character long */
- parameters[0][1] = '\0';
+ 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(I_OnStats,OnStats(*parameters[0]));
+ int MOD_RESULT = 0;
+ FOREACH_RESULT(I_OnStats,OnStats(*parameters[0],user));
+ if (MOD_RESULT)
+ return;
if (*parameters[0] == 'c')
{
if (*parameters[0] == 'U')
{
char ulined[MAXBUF];
- for (int i = 0; i < Config->ConfValueEnum("uline",&Config->config_f); i++)
+ for (int i = 0; i < Config->ConfValueEnum(Config->config_data, "uline"); i++)
{
- Config->ConfValue("uline","server",i,ulined,&Config->config_f);
+ Config->ConfValue(Config->config_data, "uline","server", i, ulined, MAXBUF);
WriteServ(user->fd,"248 %s U %s",user->nick,ulined);
}
}
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++;
/* stats o */
if (*parameters[0] == 'o')
{
- for (int i = 0; i < Config->ConfValueEnum("oper",&Config->config_f); i++)
+ for (int i = 0; i < Config->ConfValueEnum(Config->config_data, "oper"); i++)
{
char LoginName[MAXBUF];
char HostName[MAXBUF];
char OperType[MAXBUF];
- Config->ConfValue("oper","name",i,LoginName,&Config->config_f);
- Config->ConfValue("oper","host",i,HostName,&Config->config_f);
- Config->ConfValue("oper","type",i,OperType,&Config->config_f);
+ Config->ConfValue(Config->config_data, "oper","name", i, LoginName, MAXBUF);
+ Config->ConfValue(Config->config_data, "oper","host", i, HostName, MAXBUF);
+ Config->ConfValue(Config->config_data, "oper","type", i, OperType, MAXBUF);
WriteServ(user->fd,"243 %s O %s * %s %s 0",user->nick,HostName,LoginName,OperType);
}
}
WriteOpers("*** Notice: Stats '%s' requested by %s (%s@%s)",parameters[0],user->nick,user->ident,user->host);
}
-
-
-