X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/143b6cc1e4a8faa8181301bf43ddafecab3237cc..8097430a810ac1535fe5304f74991b16ff58b064:/modules/m_stats.c diff --git a/modules/m_stats.c b/modules/m_stats.c index b5738a7..67e53bb 100644 --- a/modules/m_stats.c +++ b/modules/m_stats.c @@ -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 *); @@ -101,6 +102,7 @@ static void stats_klines(struct Client *); static void stats_messages(struct Client *); static void stats_dnsbl(struct Client *); static void stats_oper(struct Client *); +static void stats_privset(struct Client *); static void stats_operedup(struct Client *); static void stats_ports(struct Client *); static void stats_tresv(struct Client *); @@ -136,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, }, @@ -148,7 +151,7 @@ static struct StatsStruct stats_cmd_table[] = { {'M', stats_messages, 0, 0, }, {'n', stats_dnsbl, 0, 0, }, {'o', stats_oper, 0, 0, }, - {'O', stats_oper, 0, 0, }, + {'O', stats_privset, 1, 0, }, {'p', stats_operedup, 0, 0, }, {'P', stats_ports, 0, 0, }, {'q', stats_tresv, 1, 0, }, @@ -173,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 * @@ -450,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) { @@ -674,10 +702,15 @@ stats_oper(struct Client *source_p) sendto_one_numeric(source_p, RPL_STATSOLINE, form_str(RPL_STATSOLINE), oper_p->username, oper_p->host, oper_p->name, - IsOper(source_p) ? get_oper_privs(oper_p->flags) : "0", "-1"); + IsOper(source_p) ? oper_p->privset->name : "0", "-1"); } } +static void +stats_privset(struct Client *source_p) +{ + privilegeset_report(source_p); +} /* stats_operedup() * @@ -739,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) @@ -748,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 } @@ -767,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) @@ -776,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 } @@ -852,7 +885,7 @@ stats_tstats (struct Client *source_p) 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_sti += (unsigned long long)(rb_current_time() - target_p->localClient->firsttime); sp.is_sv++; } @@ -862,7 +895,7 @@ stats_tstats (struct Client *source_p) 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_cti += (unsigned long long)(rb_current_time() - target_p->localClient->firsttime); sp.is_cl++; } @@ -876,6 +909,8 @@ stats_tstats (struct Client *source_p) sendto_one_numeric(source_p, RPL_STATSDEBUG, "T :rejected %u delaying %lu", sp.is_rej, delay_exit_length()); + sendto_one_numeric(source_p, RPL_STATSDEBUG, + "T :throttled refused %u throttle list size %lu", sp.is_thr, throttle_size()); sendto_one_numeric(source_p, RPL_STATSDEBUG, "T :nicks being delayed %lu", get_nd_count()); @@ -911,8 +946,8 @@ stats_tstats (struct Client *source_p) sp.is_cbr / 1024, sp.is_sbr / 1024); sendto_one_numeric(source_p, RPL_STATSDEBUG, - "T :time connected %lu %lu", - (long int)sp.is_cti, (long int)sp.is_sti); + "T :time connected %llu %llu", + sp.is_cti, sp.is_sti); } static void @@ -949,9 +984,11 @@ static struct shared_flags shared_flagtable[] = { SHARED_UNRESV, 'R' }, { SHARED_LOCOPS, 'L' }, { SHARED_REHASH, 'H' }, - { SHARED_TDLINE, 'd' }, - { SHARED_PDLINE, 'D' }, - { SHARED_UNDLINE, 'E' }, + { SHARED_TDLINE, 'd' }, + { SHARED_PDLINE, 'D' }, + { SHARED_UNDLINE, 'E' }, + { SHARED_DIE, 'I' }, + { SHARED_MODULE, 'M' }, { 0, '\0'} }; @@ -961,7 +998,7 @@ stats_shared (struct Client *source_p) { struct remote_conf *shared_p; rb_dlink_node *ptr; - char buf[15]; + char buf[sizeof(shared_flagtable)/sizeof(shared_flagtable[0])]; char *p; int i; @@ -1074,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); } } @@ -1092,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); } }