]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/m_stats.c
Allow /ojoin !#channel/%#channel, if admin/halfop are enabled.
[irc/rqf/shadowircd.git] / modules / m_stats.c
index dd678a312206feaf2016e5ec11c58e29c88bc716..67e53bb711d3166b6aef49210e59d0c502d6765a 100644 (file)
@@ -94,6 +94,7 @@ static void stats_tdeny(struct Client *);
 static void stats_deny(struct Client *);
 static void stats_exempt(struct Client *);
 static void stats_events(struct Client *);
+static void stats_prop_klines(struct Client *);
 static void stats_hubleaf(struct Client *);
 static void stats_auth(struct Client *);
 static void stats_tklines(struct Client *);
@@ -137,6 +138,7 @@ static struct StatsStruct stats_cmd_table[] = {
        {'E', stats_events,             1, 1, },
        {'f', stats_comm,               1, 1, },
        {'F', stats_comm,               1, 1, },
+       {'g', stats_prop_klines,        1, 0, },
        {'h', stats_hubleaf,            0, 0, },
        {'H', stats_hubleaf,            0, 0, },
        {'i', stats_auth,               0, 0, },
@@ -174,7 +176,6 @@ static struct StatsStruct stats_cmd_table[] = {
 
 /*
  * m_stats by fl_
- *      parv[0] = sender prefix
  *      parv[1] = stat letter/command
  *      parv[2] = (if present) server/mask in stats L, or target
  *
@@ -451,6 +452,32 @@ stats_events (struct Client *source_p)
        rb_dump_events(stats_events_cb, source_p);
 }
 
+static void
+stats_prop_klines(struct Client *source_p)
+{
+       struct ConfItem *aconf;
+       rb_dlink_node *ptr;
+       char *user, *host, *pass, *oper_reason;
+
+       RB_DLINK_FOREACH(ptr, prop_bans.head)
+       {
+               aconf = ptr->data;
+
+               /* Skip non-klines and deactivated klines. */
+               if(aconf->status != CONF_KILL)
+                       continue;
+
+               get_printable_kline(source_p, aconf, &host, &pass, 
+                               &user, &oper_reason);
+
+               sendto_one_numeric(source_p, RPL_STATSKLINE,
+                               form_str(RPL_STATSKLINE),
+                               'g', host, user, pass,
+                               oper_reason ? "|" : "",
+                               oper_reason ? oper_reason : "");
+       }
+}
+
 static void
 stats_hubleaf(struct Client *source_p)
 {
@@ -745,7 +772,7 @@ stats_tresv(struct Client *source_p)
                if(aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSQLINE, 
                                        form_str(RPL_STATSQLINE),
-                                       'q', aconf->port, aconf->name, aconf->passwd);
+                                       'q', aconf->port, aconf->host, aconf->passwd);
        }
 
        HASH_WALK(i, R_MAX, ptr, resvTable)
@@ -754,7 +781,7 @@ stats_tresv(struct Client *source_p)
                if(aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSQLINE, 
                                        form_str(RPL_STATSQLINE),
-                                       'q', aconf->port, aconf->name, aconf->passwd);
+                                       'q', aconf->port, aconf->host, aconf->passwd);
        }
        HASH_WALK_END
 }
@@ -773,7 +800,7 @@ stats_resv(struct Client *source_p)
                if(!aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSQLINE, 
                                        form_str(RPL_STATSQLINE),
-                                       'Q', aconf->port, aconf->name, aconf->passwd);
+                                       'Q', aconf->port, aconf->host, aconf->passwd);
        }
 
        HASH_WALK(i, R_MAX, ptr, resvTable)
@@ -782,7 +809,7 @@ stats_resv(struct Client *source_p)
                if(!aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSQLINE, 
                                        form_str(RPL_STATSQLINE),
-                                       'Q', aconf->port, aconf->name, aconf->passwd);
+                                       'Q', aconf->port, aconf->host, aconf->passwd);
        }
        HASH_WALK_END
 }
@@ -960,6 +987,8 @@ static struct shared_flags shared_flagtable[] =
        { SHARED_TDLINE,        'd' },
        { SHARED_PDLINE,        'D' },
        { SHARED_UNDLINE,       'E' },
+       { SHARED_DIE,       'I' },
+       { SHARED_MODULE,        'M' },
        { 0,                    '\0'}
 };
 
@@ -1082,7 +1111,7 @@ stats_tgecos(struct Client *source_p)
                if(aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSXLINE,
                                        form_str(RPL_STATSXLINE),
-                                       'x', aconf->port, aconf->name,
+                                       'x', aconf->port, aconf->host,
                                        aconf->passwd);
        }
 }
@@ -1100,7 +1129,7 @@ stats_gecos(struct Client *source_p)
                if(!aconf->hold)
                        sendto_one_numeric(source_p, RPL_STATSXLINE,
                                        form_str(RPL_STATSXLINE),
-                                       'X', aconf->port, aconf->name
+                                       'X', aconf->port, aconf->host
                                        aconf->passwd);
        }
 }