]> 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 ce73a7b936960ed5aa68c147e0ce6c06a9ec6d56..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);
                }
@@ -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;
@@ -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'}
 };