From 31c730086f07bd21737fe3808853d22d30661e53 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Sat, 2 Jan 2010 04:00:13 +0000 Subject: [PATCH] Provide /stats F to report even defaulted feature values. (Apply patch #2693259, inspired by a Quakenet patch by paulr.) git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1922 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- ChangeLog | 8 ++++++++ ircd/ircd_features.c | 30 ++++++++++++++++++------------ ircd/s_stats.c | 5 ++++- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 734e05f..91fab17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-01-01 Michael Poole + + * ircd/ircd_features.c (feature_report): If sd->sd_funcdata is + non-zero, report even unchanged features (using prefix 'f'). + + * ircd/s_stats.c (statsinfo): Make "/stats f" case-sensitive, and + use the upper case variant to report all features. + 2009-07-30 Michael Poole * ircd/s_user.c (register_user): Move the default-usermodes call diff --git a/ircd/ircd_features.c b/ircd/ircd_features.c index f49539c..baaa2bd 100644 --- a/ircd/ircd_features.c +++ b/ircd/ircd_features.c @@ -41,6 +41,7 @@ #include "s_bsd.h" #include "s_debug.h" #include "s_misc.h" +#include "s_stats.h" #include "send.h" #include "struct.h" #include "sys.h" /* FALSE bleah */ @@ -819,6 +820,8 @@ feature_init(void) void feature_report(struct Client* to, const struct StatDesc* sd, char* param) { + char changed; + int report; int i; for (i = 0; features[i].type; i++) { @@ -827,33 +830,36 @@ feature_report(struct Client* to, const struct StatDesc* sd, char* param) (features[i].flags & FEAT_OPER && !IsAnOper(to))) continue; /* skip this one */ + changed = (features[i].flags & FEAT_MARK) ? 'F' : 'f'; + report = (features[i].flags & FEAT_MARK) || sd->sd_funcdata; + switch (features[i].flags & FEAT_MASK) { case FEAT_NONE: if (features[i].report) /* let the callback handle this */ - (*features[i].report)(to, features[i].flags & FEAT_MARK ? 1 : 0); + (*features[i].report)(to, report); break; case FEAT_INT: /* Report an F-line with integer values */ - if (features[i].flags & FEAT_MARK) /* it's been changed */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %d", - features[i].type, features[i].v_int); + if (report) /* it's been changed */ + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %d", + changed, features[i].type, features[i].v_int); break; case FEAT_BOOL: /* Report an F-line with boolean values */ - if (features[i].flags & FEAT_MARK) /* it's been changed */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %s", - features[i].type, features[i].v_int ? "TRUE" : "FALSE"); + if (report) /* it's been changed */ + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %s", + changed, features[i].type, features[i].v_int ? "TRUE" : "FALSE"); break; case FEAT_STR: /* Report an F-line with string values */ - if (features[i].flags & FEAT_MARK) { /* it's been changed */ + if (report) { /* it's been changed */ if (features[i].v_str) - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s %s", - features[i].type, features[i].v_str); + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s %s", + changed, features[i].type, features[i].v_str); else /* Actually, F: would reset it; you want F:: */ - send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "F %s", - features[i].type); + send_reply(to, SND_EXPLICIT | RPL_STATSFLINE, "%c %s", + changed, features[i].type); } break; } diff --git a/ircd/s_stats.c b/ircd/s_stats.c index 1022b0c..c3f01cd 100644 --- a/ircd/s_stats.c +++ b/ircd/s_stats.c @@ -544,9 +544,12 @@ struct StatDesc statsinfo[] = { { 'e', "engine", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_e, stats_engine, 0, "Report server event loop engine." }, - { 'f', "features", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_f, + { 'f', "features", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_f, feature_report, 0, "Feature settings." }, + { 'F', "featuresall", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_f, + feature_report, 1, + "All feature settings, including defaulted values." }, { 'g', "glines", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_g, gline_stats, 0, "Global bans (G-lines)." }, -- 2.20.1