]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/m_stats.c
Pretty symlink logic for help files
[irc/rqf/shadowircd.git] / modules / m_stats.c
index 5927c1d11857c95b524e31ced7c3986aa46da3d1..e63c0de668b03165bd49479fcddd9f56a19b6b82 100644 (file)
@@ -28,7 +28,7 @@
 #include "class.h"             /* report_classes */
 #include "client.h"            /* Client */
 #include "common.h"            /* TRUE/FALSE */
-#include "irc_string.h"
+#include "match.h"
 #include "ircd.h"              /* me */
 #include "listener.h"          /* show_ports */
 #include "msg.h"               /* Message */
@@ -81,12 +81,12 @@ static void stats_p_spy(struct Client *);
 struct StatsStruct
 {
        char letter;
-       void (*handler) ();
+       void (*handler) (struct Client *source_p);
        int need_oper;
        int need_admin;
 };
 
-static void stats_dns_servers (struct Client *);
+static void stats_dns_servers(struct Client *);
 static void stats_delay(struct Client *);
 static void stats_hash(struct Client *);
 static void stats_connect(struct Client *);
@@ -142,8 +142,8 @@ static struct StatsStruct stats_cmd_table[] = {
        {'I', stats_auth,               0, 0, },
        {'k', stats_tklines,            0, 0, },
        {'K', stats_klines,             0, 0, },
-       {'l', stats_ltrace,             0, 0, },
-       {'L', stats_ltrace,             0, 0, },
+       {'l', NULL /* special */,       0, 0, },
+       {'L', NULL /* special */,       0, 0, },
        {'m', stats_messages,           0, 0, },
        {'M', stats_messages,           0, 0, },
        {'n', stats_dnsbl,              0, 0, },
@@ -211,7 +211,7 @@ m_stats(struct Client *client_p, struct Client *source_p, int parc, const char *
        if((statchar != 'L') && (statchar != 'l'))
                stats_spy(source_p, statchar, NULL);
 
-       for (i = 0; stats_cmd_table[i].handler; i++)
+       for (i = 0; stats_cmd_table[i].letter; i++)
        {
                if(stats_cmd_table[i].letter == statchar)
                {
@@ -234,7 +234,7 @@ m_stats(struct Client *client_p, struct Client *source_p, int parc, const char *
 
                        /* Blah, stats L needs the parameters, none of the others do.. */
                        if(statchar == 'L' || statchar == 'l')
-                               stats_cmd_table[i].handler (source_p, parc, parv);
+                               stats_ltrace (source_p, parc, parv);
                        else
                                stats_cmd_table[i].handler (source_p);
                }
@@ -303,7 +303,7 @@ stats_connect(struct Client *source_p)
                {
                        if(ServerConfAutoconn(server_p))
                                *s++ = 'A';
-                       if(ServerConfSSL(server_p))\r
+                       if(ServerConfSSL(server_p))
                                *s++ = 'S';
                        if(ServerConfTb(server_p))
                                *s++ = 'T';
@@ -497,7 +497,7 @@ stats_auth (struct Client *source_p)
        else if((ConfigFileEntry.stats_i_oper_only == 1) && !IsOper (source_p))
        {
                struct ConfItem *aconf;
-               char *name, *host, *pass, *user, *classname;
+               char *name, *host, *pass = "*", *user, *classname;
                int port;
 
                if(MyConnect (source_p))
@@ -505,18 +505,20 @@ stats_auth (struct Client *source_p)
                                                      (struct sockaddr *)&source_p->localClient->ip,
                                                      CONF_CLIENT,
                                                      source_p->localClient->ip.ss_family,
-                                                     source_p->username);
+                                                     source_p->username, NULL);
                else
                        aconf = find_conf_by_address (source_p->host, NULL, NULL, NULL, CONF_CLIENT,
-                                                     0, source_p->username);
+                                                     0, source_p->username, NULL);
 
                if(aconf == NULL)
                        return;
 
                get_printable_conf (aconf, &name, &host, &pass, &user, &port, &classname);
+               if(!EmptyString(aconf->spasswd))
+                       pass = aconf->spasswd;
 
                sendto_one_numeric(source_p, RPL_STATSILINE, form_str(RPL_STATSILINE),
-                                  name, show_iline_prefix(source_p, aconf, user),
+                                  name, pass, show_iline_prefix(source_p, aconf, user),
                                   host, port, classname);
        }
 
@@ -545,10 +547,10 @@ stats_tklines(struct Client *source_p)
                                                      (struct sockaddr *)&source_p->localClient->ip,
                                                      CONF_KILL,
                                                      source_p->localClient->ip.ss_family,
-                                                     source_p->username);
+                                                     source_p->username, NULL);
                else
                        aconf = find_conf_by_address (source_p->host, NULL, NULL, NULL, CONF_KILL,
-                                                     0, source_p->username);
+                                                     0, source_p->username, NULL);
 
                if(aconf == NULL)
                        return;
@@ -611,10 +613,10 @@ stats_klines(struct Client *source_p)
                                                      (struct sockaddr *)&source_p->localClient->ip,
                                                      CONF_KILL,
                                                      source_p->localClient->ip.ss_family,
-                                                     source_p->username);
+                                                     source_p->username, NULL);
                else
                        aconf = find_conf_by_address (source_p->host, NULL, NULL, NULL, CONF_KILL,
-                                                     0, source_p->username);
+                                                     0, source_p->username, NULL);
 
                if(aconf == NULL)
                        return;
@@ -848,24 +850,24 @@ stats_tstats (struct Client *source_p)
 
        memcpy(&sp, &ServerStats, sizeof(struct ServerStatistics));
 
-       RB_DLINK_FOREACH(ptr, serv_list.head)\r
-       {\r
-               target_p = ptr->data;\r
-\r
-               sp.is_sbs += target_p->localClient->sendB;\r
-               sp.is_sbr += target_p->localClient->receiveB;\r
-               sp.is_sti += rb_current_time() - target_p->localClient->firsttime;\r
-               sp.is_sv++;\r
-       }\r
-\r
-       RB_DLINK_FOREACH(ptr, lclient_list.head)\r
-       {\r
-               target_p = ptr->data;\r
-\r
-               sp.is_cbs += target_p->localClient->sendB;\r
-               sp.is_cbr += target_p->localClient->receiveB;\r
-               sp.is_cti += rb_current_time() - target_p->localClient->firsttime;\r
-               sp.is_cl++;\r
+       RB_DLINK_FOREACH(ptr, serv_list.head)
+       {
+               target_p = ptr->data;
+
+               sp.is_sbs += target_p->localClient->sendB;
+               sp.is_sbr += target_p->localClient->receiveB;
+               sp.is_sti += rb_current_time() - target_p->localClient->firsttime;
+               sp.is_sv++;
+       }
+
+       RB_DLINK_FOREACH(ptr, lclient_list.head)
+       {
+               target_p = ptr->data;
+
+               sp.is_cbs += target_p->localClient->sendB;
+               sp.is_cbr += target_p->localClient->receiveB;
+               sp.is_cti += rb_current_time() - target_p->localClient->firsttime;
+               sp.is_cl++;
        }
 
        RB_DLINK_FOREACH(ptr, unknown_list.head)
@@ -904,16 +906,16 @@ stats_tstats (struct Client *source_p)
        sendto_one_numeric(source_p, RPL_STATSDEBUG, "T :Client Server");
        sendto_one_numeric(source_p, RPL_STATSDEBUG,
                           "T :connected %u %u", sp.is_cl, sp.is_sv);
-       sendto_one_numeric(source_p, RPL_STATSDEBUG,\r
-                               "T :bytes sent %lluK %lluK",\r
-                               sp.is_cbs / 1024, \r
-                               sp.is_sbs / 1024);\r
-       sendto_one_numeric(source_p, RPL_STATSDEBUG,\r
-                               "T :bytes recv %lluK %lluK",\r
-                               sp.is_cbr / 1024, \r
+       sendto_one_numeric(source_p, RPL_STATSDEBUG,
+                               "T :bytes sent %lluK %lluK",
+                               sp.is_cbs / 1024, 
+                               sp.is_sbs / 1024);
+       sendto_one_numeric(source_p, RPL_STATSDEBUG,
+                               "T :bytes recv %lluK %lluK",
+                               sp.is_cbr / 1024, 
                                sp.is_sbr / 1024);
-       sendto_one_numeric(source_p, RPL_STATSDEBUG,\r
-                               "T :time connected %lu %lu",\r
+       sendto_one_numeric(source_p, RPL_STATSDEBUG,
+                               "T :time connected %lu %lu",
                                (long int)sp.is_cti, (long int)sp.is_sti);
 }
 
@@ -951,6 +953,9 @@ static struct shared_flags shared_flagtable[] =
        { SHARED_UNRESV,        'R' },
        { SHARED_LOCOPS,        'L' },
        { SHARED_REHASH,        'H' },
+       { SHARED_TDLINE,    'd' },
+       { SHARED_PDLINE,    'D' },
+       { SHARED_UNDLINE,   'E' },
        { 0,                    '\0'}
 };