Author: Isomer <perry@coders.net>
[ircu2.10.12-pk.git] / ircd / s_stats.c
index ad675c539bf5b5fad2817a2479b513a117166d8d..f23339279b450d0d1e13b252f4ae884ca94faa43 100644 (file)
@@ -25,7 +25,6 @@
 #include "s_stats.h"
 #include "class.h"
 #include "client.h"
-#include "crule.h"
 #include "ircd.h"
 #include "ircd_chattr.h"
 #include "ircd_reply.h"
@@ -86,16 +85,11 @@ const char *statsinfo[] = {
 static unsigned int report_array[17][3] = {
   {CONF_SERVER, RPL_STATSCLINE, 'C'},
   {CONF_CLIENT, RPL_STATSILINE, 'I'},
-  {CONF_KILL, RPL_STATSKLINE, 'K'},
-  {CONF_IPKILL, RPL_STATSKLINE, 'k'},
   {CONF_LEAF, RPL_STATSLLINE, 'L'},
   {CONF_OPERATOR, RPL_STATSOLINE, 'O'},
   {CONF_HUB, RPL_STATSHLINE, 'H'},
   {CONF_LOCOP, RPL_STATSOLINE, 'o'},
-  {CONF_CRULEALL, RPL_STATSDLINE, 'D'},
-  {CONF_CRULEAUTO, RPL_STATSDLINE, 'd'},
   {CONF_UWORLD, RPL_STATSULINE, 'U'},
-  {CONF_TLINES, RPL_STATSTLINE, 'T'},
   {0, 0}
 };
 
@@ -127,16 +121,7 @@ void report_configured_links(struct Client *sptr, int mask)
        * displayed on STATS reply.    -Vesa
        */
       /* Special-case 'k' or 'K' lines as appropriate... -Kev */
-      if ((tmp->status & CONF_KLINE))
-       send_reply(sptr, p[1], c, host, pass, name, port, get_conf_class(tmp));
-      /*
-       * connect rules are classless
-       */
-      else if ((tmp->status & CONF_CRULE))
-       send_reply(sptr, p[1], c, host, name);
-      else if ((tmp->status & CONF_TLINES))
-       send_reply(sptr, p[1], c, host, pass);
-      else if ((tmp->status & CONF_UWORLD))
+      if ((tmp->status & CONF_UWORLD))
        send_reply(sptr, p[1], c, host, pass, name, port, get_conf_class(tmp));
       else if ((tmp->status & (CONF_SERVER | CONF_HUB)))
        send_reply(sptr, p[1], c, "*", name, port, get_conf_class(tmp));
@@ -146,10 +131,49 @@ void report_configured_links(struct Client *sptr, int mask)
   }
 }
 
+/*
+ *  {CONF_TLINES, RPL_STATSTLINE, 'T'},
+ */
+void report_motd_list(struct Client* to)
+{
+  const struct MotdConf* conf = conf_get_motd_list();
+  for ( ; conf; conf = conf->next)
+    send_reply(to, RPL_STATSTLINE, 'T', conf->hostmask, conf->path);
+}
+
+/*
+ * {CONF_CRULEALL, RPL_STATSDLINE, 'D'},
+ * {CONF_CRULEAUTO, RPL_STATSDLINE, 'd'},
+ */
+void report_crule_list(struct Client* to, int mask)
+{
+  const struct CRuleConf* p = conf_get_crule_list();
+  for ( ; p; p = p->next) {
+    if (0 != (p->type & mask))
+      send_reply(to, RPL_STATSDLINE, (CRULE_ALL == p->type) ? 'D' : 'd', p->hostmask, p->rule);
+  }
+}
+
+/*
+ * {CONF_KILL, RPL_STATSKLINE, 'K'},
+ * {CONF_IPKILL, RPL_STATSKLINE, 'k'},
+ */
+void report_deny_list(struct Client* to)
+{
+  const struct DenyConf* p = conf_get_deny_list();
+  for ( ; p; p = p->next)
+    send_reply(to, RPL_STATSKLINE, (p->ip_kill) ? 'k' : 'K',
+               p->hostmask, p->message, p->usermask);
+}
+
 /* m_stats is so obnoxiously full of special cases that the different
  * hunt_server() possiblites were becoming very messy. It now uses a
  * switch() so as to be easier to read and update as params change. 
  * -Ghostwolf 
+ *
+ * 2.10.11: Don't check for the oper limitation if it's not our local server.
+ *          thusly once all the hubs have upgraded local opers will be able
+ *          to remote stats anywhere on the network.
  */
 int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[], char stat)
 {
@@ -170,11 +194,9 @@ int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[],
     case 'P':
     {
       if (parc > 3)
-       return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s %C :%s", 2, parc,
-                              parv);
+       return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s %C :%s", 2, parc, parv);
       else
-       return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s :%C", 2, parc,
-                              parv);
+       return hunt_server_cmd(sptr, CMD_STATS, cptr, 0, "%s :%C", 2, parc, parv);
     }
 
       /* oper only, varying # of params */
@@ -183,20 +205,16 @@ int hunt_stats(struct Client* cptr, struct Client* sptr, int parc, char* parv[],
     case 'M':
     {
       if (parc == 4)
-       return hunt_server_cmd(sptr, CMD_STATS, cptr, 1, "%s %C :%s", 2, parc,
-                              parv);
+       return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s %C :%s", 2, parc, parv);
       else if (parc > 4)
-       return hunt_server_cmd(sptr, CMD_STATS, cptr, 1, "%s %C %s :%s", 2,
-                              parc, parv);
+       return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s %C %s :%s", 2, parc, parv);
       else 
-       return hunt_server_cmd(sptr, CMD_STATS, cptr, 1, "%s :%C", 2, parc,
-                              parv);
+       return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s :%C", 2, parc, parv);
     }
 
       /* oper only, standard # of params */
     default:
-      return hunt_server_cmd(sptr, CMD_STATS, cptr, 1, "%s :%C", 2, parc,
-                            parv);
+      return hunt_server_cmd(sptr, CMD_STATS, cptr, MyUser(sptr) ? 1 : 0, "%s :%C", 2, parc, parv);
   }
 }