]> 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 45b9b38462e064ece8cdfca9efd7750dd261ae0a..e63c0de668b03165bd49479fcddd9f56a19b6b82 100644 (file)
@@ -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;