Committer : klmitch CVSROOT : /cvsroot/undernet-ircu Module : ircu2.10 Commit time: 2006-06-01 15:59:29 UTC
Modified files: ChangeLog doc/example.conf doc/readme.features include/ircd_features.h ircd/ircd_features.c ircd/s_stats.c Log message: Author: Kev <[EMAIL PROTECTED]> Log message: Add support for deprecating features and/or changing their names; use these facilities to change the case-sensitive names of HIS_STATS_? features to non-case-sensitive names using the long version of the /stats. The next major release should remove the old HIS_STATS_? feature names and revert the feature system to case-insensitive matching. ---------------------- diff included ---------------------- Index: ircu2.10/ChangeLog diff -u ircu2.10/ChangeLog:1.775 ircu2.10/ChangeLog:1.776 --- ircu2.10/ChangeLog:1.775 Mon May 15 20:37:38 2006 +++ ircu2.10/ChangeLog Thu Jun 1 08:59:18 2006 @@ -1,3 +1,26 @@ +2006-06-01 Kevin L. Mitchell <[EMAIL PROTECTED]> + + * ircd/ircd_features.c: add FEAT_DEP to mark deprecated features + with no replacement; create and use feat_type() macro to extract + the type of a feature from its flags + + * doc/readme.features: update for new HIS_STATS_* names + + * doc/example.conf: update for new HIS_STATS_* names + +2006-05-31 Kevin L. Mitchell <[EMAIL PROTECTED]> + + * ircd/s_stats.c: use new names for controlling features + + * ircd/ircd_features.c: add support for deprecated aliases for + features--allows a feature to be accessed by user or .conf by two + names, but warns when the deprecated name is used; change all + HIS_STATS_? features to aliases for the new names; remove + unnecessary HIS_STATS_M + + * include/ircd_features.h: add features covering new names for + FEAT_HIS_STATS_?; remove unnecessary FEAT_HIS_STATS_M + 2006-05-15 Michael Poole <[EMAIL PROTECTED]> * ircd/s_auth.c (check_auth_finished): Only check passwords on Index: ircu2.10/doc/example.conf diff -u ircu2.10/doc/example.conf:1.68 ircu2.10/doc/example.conf:1.69 --- ircu2.10/doc/example.conf:1.68 Sun May 14 12:31:30 2006 +++ ircu2.10/doc/example.conf Thu Jun 1 08:59:18 2006 @@ -818,34 +818,33 @@ # "HIS_MAP" = "TRUE"; # "HIS_LINKS" = "TRUE"; # "HIS_TRACE" = "TRUE"; -# "HIS_STATS_a" = "TRUE"; -# "HIS_STATS_c" = "TRUE"; -# "HIS_STATS_d" = "TRUE"; -# "HIS_STATS_e" = "TRUE"; -# "HIS_STATS_f" = "TRUE"; -# "HIS_STATS_g" = "TRUE"; -# "HIS_STATS_i" = "TRUE"; -# "HIS_STATS_j" = "TRUE"; -# "HIS_STATS_J" = "TRUE"; -# "HIS_STATS_k" = "TRUE"; -# "HIS_STATS_l" = "TRUE"; -# "HIS_STATS_L" = "TRUE"; -# "HIS_STATS_m" = "TRUE"; -# "HIS_STATS_M" = "TRUE"; -# "HIS_STATS_o" = "TRUE"; -# "HIS_STATS_p" = "TRUE"; -# "HIS_STATS_q" = "TRUE"; -# "HIS_STATS_r" = "TRUE"; -# "HIS_STATS_R" = "TRUE"; -# "HIS_STATS_t" = "TRUE"; -# "HIS_STATS_T" = "TRUE"; -# "HIS_STATS_u" = "FALSE"; -# "HIS_STATS_U" = "TRUE"; -# "HIS_STATS_v" = "TRUE"; -# "HIS_STATS_w" = "TRUE"; -# "HIS_STATS_x" = "TRUE"; -# "HIS_STATS_y" = "TRUE"; -# "HIS_STATS_z" = "TRUE"; +# "HIS_STATS_NAMESERVERS" = "TRUE"; +# "HIS_STATS_CONNECT" = "TRUE"; +# "HIS_STATS_CRULES" = "TRUE"; +# "HIS_STATS_ENGINE" = "TRUE"; +# "HIS_STATS_FEATURES" = "TRUE"; +# "HIS_STATS_GLINES" = "TRUE"; +# "HIS_STATS_ACCESS" = "TRUE"; +# "HIS_STATS_HISTOGRAM" = "TRUE"; +# "HIS_STATS_JUPES" = "TRUE"; +# "HIS_STATS_KLINES" = "TRUE"; +# "HIS_STATS_LINKS" = "TRUE"; +# "HIS_STATS_MODULES" = "TRUE"; +# "HIS_STATS_COMMANDS" = "TRUE"; +# "HIS_STATS_OPERATORS" = "TRUE"; +# "HIS_STATS_PORTS" = "TRUE"; +# "HIS_STATS_QUARANTINES" = "TRUE"; +# "HIS_STATS_MAPPINGS" = "TRUE"; +# "HIS_STATS_USAGE" = "TRUE"; +# "HIS_STATS_LOCALS" = "TRUE"; +# "HIS_STATS_MOTDS" = "TRUE"; +# "HIS_STATS_UPTIME" = "FALSE"; +# "HIS_STATS_UWORLD" = "TRUE"; +# "HIS_STATS_VSERVERS" = "TRUE"; +# "HIS_STATS_USERLOAD" = "TRUE"; +# "HIS_STATS_MEMUSAGE" = "TRUE"; +# "HIS_STATS_CLASSES" = "TRUE"; +# "HIS_STATS_MEMORY" = "TRUE"; # "HIS_STATS_IAUTH" = "TRUE"; # "HIS_WHOIS_SERVERNAME" = "TRUE"; # "HIS_WHOIS_IDLETIME" = "TRUE"; Index: ircu2.10/doc/readme.features diff -u ircu2.10/doc/readme.features:1.23 ircu2.10/doc/readme.features:1.24 --- ircu2.10/doc/readme.features:1.23 Thu Apr 6 20:27:51 2006 +++ ircu2.10/doc/readme.features Thu Jun 1 08:59:19 2006 @@ -486,169 +486,163 @@ As per UnderNet CFV-165, this removes /TRACE from users. -HIS_STATS_a +HIS_STATS_NAMESERVERS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS a from users. -HIS_STATS_l +HIS_STATS_LINKS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS l from users. -HIS_STATS_L +HIS_STATS_MODULES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS L from users. -HIS_STATS_c +HIS_STATS_CONNECT * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS c from users. -HIS_STATS_g +HIS_STATS_GLINES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS g from users. -HIS_STATS_k +HIS_STATS_KLINES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS k from users. -HIS_STATS_f +HIS_STATS_FEATURES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS f from users. -HIS_STATS_i +HIS_STATS_ACCESS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS i from users. -HIS_STATS_j +HIS_STATS_HISTOGRAM * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS j from users. -HIS_STATS_J +HIS_STATS_JUPES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS J from users. -HIS_STATS_M - * Type: boolean - * Default: TRUE - -As per UnderNet CFV-165, this removes /STATS M from users. - -HIS_STATS_m +HIS_STATS_COMMANDS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS m from users. -HIS_STATS_o +HIS_STATS_OPERATORS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS o from users. -HIS_STATS_p +HIS_STATS_PORTS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS p from users. -HIS_STATS_q +HIS_STATS_QUARANTINES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS q from users. -HIS_STATS_r +HIS_STATS_USAGE * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS r from users. -HIS_STATS_R +HIS_STATS_MAPPINGS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS R from users. -HIS_STATS_d +HIS_STATS_CRULES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS d from users. -HIS_STATS_e +HIS_STATS_ENGINE * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS e from users. -HIS_STATS_t +HIS_STATS_LOCALS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS t from users. -HIS_STATS_T +HIS_STATS_MOTDS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS T from users. -HIS_STATS_u +HIS_STATS_UPTIME * Type: boolean * Default: FALSE As per UnderNet CFV-165, this allows users to perform /STATS u. -HIS_STATS_U +HIS_STATS_UWORLD * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS U from users. -HIS_STATS_v +HIS_STATS_VSERVERS * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS v from users. -HIS_STATS_w +HIS_STATS_USERLOAD * Type: boolean * Default: FALSE As per UnderNet CFV-165, this allows users to perform /STATS w. -HIS_STATS_x +HIS_STATS_MEMUSAGE * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS x from users. -HIS_STATS_y +HIS_STATS_CLASSES * Type: boolean * Default: TRUE As per UnderNet CFV-165, this removes /STATS y from users. -HIS_STATS_z +HIS_STATS_MEMORY * Type: boolean * Default: TRUE Index: ircu2.10/include/ircd_features.h diff -u ircu2.10/include/ircd_features.h:1.42 ircu2.10/include/ircd_features.h:1.43 --- ircu2.10/include/ircd_features.h:1.42 Thu Apr 6 20:27:51 2006 +++ ircu2.10/include/ircd_features.h Thu Jun 1 08:59:19 2006 @@ -20,7 +20,7 @@ */ /** @file * @brief Public interfaces and declarations for dealing with configurable features. - * @version $Id: ircd_features.h,v 1.42 2006/04/07 03:27:51 entrope Exp $ + * @version $Id: ircd_features.h,v 1.43 2006/06/01 15:59:19 klmitch Exp $ */ struct Client; @@ -109,33 +109,59 @@ FEAT_HIS_LINKS, FEAT_HIS_TRACE, FEAT_HIS_STATS_a, + FEAT_HIS_STATS_NAMESERVERS, FEAT_HIS_STATS_c, + FEAT_HIS_STATS_CONNECT, FEAT_HIS_STATS_d, + FEAT_HIS_STATS_CRULES, FEAT_HIS_STATS_e, + FEAT_HIS_STATS_ENGINE, FEAT_HIS_STATS_f, + FEAT_HIS_STATS_FEATURES, FEAT_HIS_STATS_g, + FEAT_HIS_STATS_GLINES, FEAT_HIS_STATS_i, + FEAT_HIS_STATS_ACCESS, FEAT_HIS_STATS_j, + FEAT_HIS_STATS_HISTOGRAM, FEAT_HIS_STATS_J, + FEAT_HIS_STATS_JUPES, FEAT_HIS_STATS_k, + FEAT_HIS_STATS_KLINES, FEAT_HIS_STATS_l, + FEAT_HIS_STATS_LINKS, FEAT_HIS_STATS_L, - FEAT_HIS_STATS_M, + FEAT_HIS_STATS_MODULES, FEAT_HIS_STATS_m, + FEAT_HIS_STATS_COMMANDS, FEAT_HIS_STATS_o, + FEAT_HIS_STATS_OPERATORS, FEAT_HIS_STATS_p, + FEAT_HIS_STATS_PORTS, FEAT_HIS_STATS_q, + FEAT_HIS_STATS_QUARANTINES, FEAT_HIS_STATS_R, + FEAT_HIS_STATS_MAPPINGS, FEAT_HIS_STATS_r, + FEAT_HIS_STATS_USAGE, FEAT_HIS_STATS_t, + FEAT_HIS_STATS_LOCALS, FEAT_HIS_STATS_T, + FEAT_HIS_STATS_MOTDS, FEAT_HIS_STATS_u, + FEAT_HIS_STATS_UPTIME, FEAT_HIS_STATS_U, + FEAT_HIS_STATS_UWORLD, FEAT_HIS_STATS_v, + FEAT_HIS_STATS_VSERVERS, FEAT_HIS_STATS_w, + FEAT_HIS_STATS_USERLOAD, FEAT_HIS_STATS_x, + FEAT_HIS_STATS_MEMUSAGE, FEAT_HIS_STATS_y, + FEAT_HIS_STATS_CLASSES, FEAT_HIS_STATS_z, + FEAT_HIS_STATS_MEMORY, FEAT_HIS_STATS_IAUTH, FEAT_HIS_WHOIS_SERVERNAME, FEAT_HIS_WHOIS_IDLETIME, Index: ircu2.10/ircd/ircd_features.c diff -u ircu2.10/ircd/ircd_features.c:1.56 ircu2.10/ircd/ircd_features.c:1.57 --- ircu2.10/ircd/ircd_features.c:1.56 Thu Apr 6 20:27:50 2006 +++ ircu2.10/ircd/ircd_features.c Thu Jun 1 08:59:19 2006 @@ -18,7 +18,7 @@ */ /** @file * @brief Implementation of configurable feature support. - * @version $Id: ircd_features.c,v 1.56 2006/04/07 03:27:50 entrope Exp $ + * @version $Id: ircd_features.c,v 1.57 2006/06/01 15:59:19 klmitch Exp $ */ #include "config.h" @@ -286,8 +286,13 @@ #define FEAT_INT 0x0001 /**< set if entry contains an integer value */ #define FEAT_BOOL 0x0002 /**< set if entry contains a boolean value */ #define FEAT_STR 0x0003 /**< set if entry contains a string value */ +#define FEAT_ALIAS 0x0004 /**< set if entry is alias for another entry */ +#define FEAT_DEP 0x0005 /**< set if entry is deprecated feature */ #define FEAT_MASK 0x000f /**< possible value types */ +/** Extract just the feature type from a feature descriptor. */ +#define feat_type(feat) ((feat)->flags & FEAT_MASK) + #define FEAT_MARK 0x0010 /**< set if entry has been changed */ #define FEAT_NULL 0x0020 /**< NULL string is permitted */ #define FEAT_CASE 0x0040 /**< string is case-sensitive */ @@ -314,6 +319,13 @@ #define F_S(type, flags, v_str, notify) \ { FEAT_ ## type, #type, FEAT_STR | (flags), 0, 0, 0, (v_str), \ 0, 0, 0, (notify), 0, 0, 0 } +/** Declare a feature as an alias for another feature. */ +#define F_A(type, alias) \ + { FEAT_ ## type, #type, FEAT_ALIAS, 0, FEAT_ ## alias, 0, 0, \ + 0, 0, 0, 0, 0, 0, 0 } +/** Declare a feature as deprecated. */ +#define F_D(type) \ + { FEAT_ ## type, #type, FEAT_DEP, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } /** Table of feature descriptions. */ static struct FeatureDesc { @@ -409,34 +421,60 @@ F_B(HIS_MAP, 0, 1, 0), F_B(HIS_LINKS, 0, 1, 0), F_B(HIS_TRACE, 0, 1, 0), - F_B(HIS_STATS_a, 0, 1, 0), - F_B(HIS_STATS_c, 0, 1, 0), - F_B(HIS_STATS_d, 0, 1, 0), - F_B(HIS_STATS_e, 0, 1, 0), - F_B(HIS_STATS_f, 0, 1, 0), - F_B(HIS_STATS_g, 0, 1, 0), - F_B(HIS_STATS_i, 0, 1, 0), - F_B(HIS_STATS_j, 0, 1, 0), - F_B(HIS_STATS_J, 0, 1, 0), - F_B(HIS_STATS_k, 0, 1, 0), - F_B(HIS_STATS_l, 0, 1, 0), - F_B(HIS_STATS_L, 0, 1, 0), - F_B(HIS_STATS_M, 0, 1, 0), - F_B(HIS_STATS_m, 0, 1, 0), - F_B(HIS_STATS_o, 0, 1, 0), - F_B(HIS_STATS_p, 0, 1, 0), - F_B(HIS_STATS_q, 0, 1, 0), - F_B(HIS_STATS_R, 0, 1, 0), - F_B(HIS_STATS_r, 0, 1, 0), - F_B(HIS_STATS_t, 0, 1, 0), - F_B(HIS_STATS_T, 0, 1, 0), - F_B(HIS_STATS_u, 0, 0, 0), - F_B(HIS_STATS_U, 0, 1, 0), - F_B(HIS_STATS_v, 0, 1, 0), - F_B(HIS_STATS_w, 0, 0, 0), - F_B(HIS_STATS_x, 0, 1, 0), - F_B(HIS_STATS_y, 0, 1, 0), - F_B(HIS_STATS_z, 0, 1, 0), + F_A(HIS_STATS_a, HIS_STATS_NAMESERVERS), + F_B(HIS_STATS_NAMESERVERS, 0, 1, 0), + F_A(HIS_STATS_c, HIS_STATS_CONNECT), + F_B(HIS_STATS_CONNECT, 0, 1, 0), + F_A(HIS_STATS_d, HIS_STATS_CRULES), + F_B(HIS_STATS_CRULES, 0, 1, 0), + F_A(HIS_STATS_e, HIS_STATS_ENGINE), + F_B(HIS_STATS_ENGINE, 0, 1, 0), + F_A(HIS_STATS_f, HIS_STATS_FEATURES), + F_B(HIS_STATS_FEATURES, 0, 1, 0), + F_A(HIS_STATS_g, HIS_STATS_GLINES), + F_B(HIS_STATS_GLINES, 0, 1, 0), + F_A(HIS_STATS_i, HIS_STATS_ACCESS), + F_B(HIS_STATS_ACCESS, 0, 1, 0), + F_A(HIS_STATS_j, HIS_STATS_HISTOGRAM), + F_B(HIS_STATS_HISTOGRAM, 0, 1, 0), + F_A(HIS_STATS_J, HIS_STATS_JUPES), + F_B(HIS_STATS_JUPES, 0, 1, 0), + F_A(HIS_STATS_k, HIS_STATS_KLINES), + F_B(HIS_STATS_KLINES, 0, 1, 0), + F_A(HIS_STATS_l, HIS_STATS_LINKS), + F_B(HIS_STATS_LINKS, 0, 1, 0), + F_A(HIS_STATS_L, HIS_STATS_MODULES), + F_B(HIS_STATS_MODULES, 0, 1, 0), + F_A(HIS_STATS_m, HIS_STATS_COMMANDS), + F_B(HIS_STATS_COMMANDS, 0, 1, 0), + F_A(HIS_STATS_o, HIS_STATS_OPERATORS), + F_B(HIS_STATS_OPERATORS, 0, 1, 0), + F_A(HIS_STATS_p, HIS_STATS_PORTS), + F_B(HIS_STATS_PORTS, 0, 1, 0), + F_A(HIS_STATS_q, HIS_STATS_QUARANTINES), + F_B(HIS_STATS_QUARANTINES, 0, 1, 0), + F_A(HIS_STATS_R, HIS_STATS_MAPPINGS), + F_B(HIS_STATS_MAPPINGS, 0, 1, 0), + F_A(HIS_STATS_r, HIS_STATS_USAGE), + F_B(HIS_STATS_USAGE, 0, 1, 0), + F_A(HIS_STATS_t, HIS_STATS_LOCALS), + F_B(HIS_STATS_LOCALS, 0, 1, 0), + F_A(HIS_STATS_T, HIS_STATS_MOTDS), + F_B(HIS_STATS_MOTDS, 0, 1, 0), + F_A(HIS_STATS_u, HIS_STATS_UPTIME), + F_B(HIS_STATS_UPTIME, 0, 0, 0), + F_A(HIS_STATS_U, HIS_STATS_UWORLD), + F_B(HIS_STATS_UWORLD, 0, 1, 0), + F_A(HIS_STATS_v, HIS_STATS_VSERVERS), + F_B(HIS_STATS_VSERVERS, 0, 1, 0), + F_A(HIS_STATS_w, HIS_STATS_USERLOAD), + F_B(HIS_STATS_USERLOAD, 0, 0, 0), + F_A(HIS_STATS_x, HIS_STATS_MEMUSAGE), + F_B(HIS_STATS_MEMUSAGE, 0, 1, 0), + F_A(HIS_STATS_y, HIS_STATS_CLASSES), + F_B(HIS_STATS_CLASSES, 0, 1, 0), + F_A(HIS_STATS_z, HIS_STATS_MEMORY), + F_B(HIS_STATS_MEMORY, 0, 1, 0), F_B(HIS_STATS_IAUTH, 0, 1, 0), F_B(HIS_WHOIS_SERVERNAME, 0, 1, 0), F_B(HIS_WHOIS_IDLETIME, 0, 1, 0), @@ -477,8 +515,30 @@ assert(0 != feature); for (i = 0; features[i].type; i++) /* find appropriate descriptor */ - if (!strcmp(feature, features[i].type)) + if (!strcmp(feature, features[i].type)) { + if (feat_type(&features[i]) == FEAT_ALIAS) { + Debug((DEBUG_NOTICE, "Deprecated feature \"%s\" referenced; replace " + "with %s", feature, features[features[i].def_int].type)); + if (from) /* report a warning */ + send_reply(from, SND_EXPLICIT | ERR_NOFEATURE, + "%s :Feature deprecated, use %s", feature, + features[features[i].def_int].type); + else + log_write(LS_CONFIG, L_WARNING, 0, "Feature \"%s\" deprecated, " + "use \"%s\"", feature, features[features[i].def_int].type); + + return &features[features[i].def_int]; + } else if (feat_type(&features[i]) == FEAT_DEP) { + Debug((DEBUG_NOTICE, "Deprecated feature \"%s\" referenced", feature)); + if (from) /* report a warning */ + send_reply(from, SND_EXPLICIT | ERR_NOFEATURE, + "%s :Feature deprecated", feature); + else + log_write(LS_CONFIG, L_WARNING, 0, "Feature \"%s\" deprecated", + feature); + } return &features[i]; + } Debug((DEBUG_ERROR, "Unknown feature \"%s\"", feature)); if (from) /* report an error */ @@ -514,7 +574,7 @@ if (from && feat->flags & FEAT_READ) return send_reply(from, ERR_NOFEATURE, fields[0]); - switch (feat->flags & FEAT_MASK) { + switch (feat_type(feat)) { case FEAT_NONE: if (feat->set && (i = (*feat->set)(from, fields + 1, count - 1))) { change++; /* feature handler wants a change recorded */ @@ -665,7 +725,7 @@ if (from && feat->flags & FEAT_READ) return send_reply(from, ERR_NOFEATURE, fields[0]); - switch (feat->flags & FEAT_MASK) { + switch (feat_type(feat)) { case FEAT_NONE: /* None... */ if (feat->reset && (i = (*feat->reset)(from, fields + 1, count - 1))) { change++; /* feature handler wants a change recorded */ @@ -726,7 +786,7 @@ (feat->flags & FEAT_OPER && !IsAnOper(from))) /* check privs */ return send_reply(from, ERR_NOPRIVILEGES); - switch (feat->flags & FEAT_MASK) { + switch (feat_type(feat)) { case FEAT_NONE: /* none, call the callback... */ if (feat->get) /* if there's a callback, use it */ (*feat->get)(from, fields + 1, count - 1); @@ -779,7 +839,7 @@ for (i = 0; features[i].type; i++) { change = 0; - switch (features[i].flags & FEAT_MASK) { + switch (feat_type(&features[i])) { case FEAT_NONE: if (features[i].mark && (*features[i].mark)(features[i].flags & FEAT_MARK ? 1 : 0)) @@ -819,7 +879,7 @@ int i; for (i = 0; features[i].type; i++) { - switch (features[i].flags & FEAT_MASK) { + switch (feat_type(&features[i])) { case FEAT_NONE: /* you're on your own */ break; @@ -857,7 +917,7 @@ (features[i].flags & FEAT_OPER && !IsAnOper(to))) continue; /* skip this one */ - switch (features[i].flags & FEAT_MASK) { + switch (feat_type(&features[i])) { case FEAT_NONE: if (features[i].report) /* let the callback handle this */ (*features[i].report)(to, features[i].flags & FEAT_MARK ? 1 : 0); @@ -898,7 +958,7 @@ feature_int(enum Feature feat) { assert(features[feat].feat == feat); - assert((features[feat].flags & FEAT_MASK) == FEAT_INT); + assert(feat_type(&features[feat]) == FEAT_INT); return features[feat].v_int; } @@ -914,7 +974,7 @@ if (FEAT_LAST_F < feat) return 0; assert(features[feat].feat == feat); - assert((features[feat].flags & FEAT_MASK) == FEAT_BOOL); + assert(feat_type(&features[feat]) == FEAT_BOOL); return features[feat].v_int; } @@ -927,7 +987,7 @@ feature_str(enum Feature feat) { assert(features[feat].feat == feat); - assert((features[feat].flags & FEAT_MASK) == FEAT_STR); + assert(feat_type(&features[feat]) == FEAT_STR); return features[feat].v_str; } Index: ircu2.10/ircd/s_stats.c diff -u ircu2.10/ircd/s_stats.c:1.49 ircu2.10/ircd/s_stats.c:1.50 --- ircu2.10/ircd/s_stats.c:1.49 Thu Apr 6 20:27:50 2006 +++ ircu2.10/ircd/s_stats.c Thu Jun 1 08:59:19 2006 @@ -63,7 +63,7 @@ /** @file * @brief Report configuration lines and other statistics from this * server. - * @version $Id: s_stats.c,v 1.49 2006/04/07 03:27:50 entrope Exp $ + * @version $Id: s_stats.c,v 1.50 2006/06/01 15:59:19 klmitch Exp $ * * Note: The info is reported in the order the server uses * it--not reversed as in ircd.conf! @@ -103,95 +103,95 @@ /** Contains information about all statistics. */ static struct StatDesc statsinfo[] = { - { 'a', "nameservers", STAT_FLAG_OPERFEAT|STAT_FLAG_LOCONLY, FEAT_HIS_STATS_a, + { 'a', "nameservers", STAT_FLAG_OPERFEAT|STAT_FLAG_LOCONLY, FEAT_HIS_STATS_NAMESERVERS, report_dns_servers, 0, "DNS servers." }, - { 'c', "connect", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_c, + { 'c', "connect", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_CONNECT, stats_configured_links, CONF_SERVER, "Remote server connection lines." }, - { 'd', "maskrules", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_d, + { 'd', "maskrules", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_CRULES, stats_crule_list, CRULE_MASK, "Dynamic routing configuration." }, - { 'D', "crules", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_d, + { 'D', "crules", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_CRULES, stats_crule_list, CRULE_ALL, "Dynamic routing configuration." }, - { 'e', "engine", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_e, + { 'e', "engine", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_ENGINE, stats_engine, 0, "Report server event loop engine." }, - { 'f', "features", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_f, + { 'f', "features", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_FEATURES, feature_report, 0, "Feature settings." }, - { 'g', "glines", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_g, + { 'g', "glines", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_GLINES, gline_stats, 0, "Global bans (G-lines)." }, - { 'i', "access", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_i, + { 'i', "access", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_ACCESS, stats_access, CONF_CLIENT, "Connection authorization lines." }, - { 'j', "histogram", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_j, + { 'j', "histogram", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_HISTOGRAM, msgq_histogram, 0, "Message length histogram." }, - { 'J', "jupes", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_J, + { 'J', "jupes", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_JUPES, stats_nickjupes, 0, "Nickname jupes." }, - { 'k', "klines", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_k, + { 'k', "klines", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_KLINES, stats_klines, 0, "Local bans (K-Lines)." }, { 'l', "links", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM | STAT_FLAG_CASESENS), - FEAT_HIS_STATS_l, + FEAT_HIS_STATS_LINKS, stats_links, 0, "Current connections information." }, { 'L', "modules", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), - FEAT_HIS_STATS_L, + FEAT_HIS_STATS_MODULES, stats_modules, 0, "Dynamically loaded modules." }, - { 'm', "commands", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_m, + { 'm', "commands", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_COMMANDS, stats_commands, 0, "Message usage information." }, - { 'o', "operators", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_o, + { 'o', "operators", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_OPERATORS, stats_configured_links, CONF_OPERATOR, "Operator information." }, - { 'p', "ports", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_p, + { 'p', "ports", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_PORTS, show_ports, 0, "Listening ports." }, - { 'q', "quarantines", (STAT_FLAG_OPERONLY | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_q, + { 'q', "quarantines", (STAT_FLAG_OPERONLY | STAT_FLAG_VARPARAM), FEAT_HIS_STATS_QUARANTINES, stats_quarantine, 0, "Quarantined channels list." }, - { 'R', "mappings", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_R, + { 'R', "mappings", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_MAPPINGS, stats_mapping, 0, "Service mappings." }, #ifdef DEBUGMODE - { 'r', "usage", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_r, + { 'r', "usage", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_USAGE, send_usage, 0, "System resource usage (Debug only)." }, #endif - { 'T', "motds", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_T, + { 'T', "motds", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_MOTDS, motd_report, 0, "Configured Message Of The Day files." }, - { 't', "locals", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_t, + { 't', "locals", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_LOCALS, tstats, 0, "Local connection statistics (Total SND/RCV, etc)." }, - { 'U', "uworld", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_U, + { 'U', "uworld", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_UWORLD, stats_configured_links, CONF_UWORLD, "Service server information." }, - { 'u', "uptime", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_u, + { 'u', "uptime", (STAT_FLAG_OPERFEAT | STAT_FLAG_CASESENS), FEAT_HIS_STATS_UPTIME, stats_uptime, 0, "Current uptime & highest connection count." }, - { 'v', "vservers", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM | STAT_FLAG_CASESENS), FEAT_HIS_STATS_v, + { 'v', "vservers", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM | STAT_FLAG_CASESENS), FEAT_HIS_STATS_VSERVERS, stats_servers_verbose, 1, "Verbose server information." }, - { 'V', "vserversmach", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM | STAT_FLAG_CASESENS), FEAT_HIS_STATS_v, + { 'V', "vserversmach", (STAT_FLAG_OPERFEAT | STAT_FLAG_VARPARAM | STAT_FLAG_CASESENS), FEAT_HIS_STATS_VSERVERS, stats_servers_verbose, 0, "Verbose server information." }, - { 'w', "userload", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_w, + { 'w', "userload", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_USERLOAD, calc_load, 0, "Userload statistics." }, - { 'x', "memusage", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_x, + { 'x', "memusage", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_MEMUSAGE, stats_meminfo, 0, "List usage information." }, - { 'y', "classes", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_y, + { 'y', "classes", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_CLASSES, report_classes, 0, "Connection classes." }, - { 'z', "memory", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_z, + { 'z', "memory", STAT_FLAG_OPERFEAT, FEAT_HIS_STATS_MEMORY, count_memory, 0, "Memory/Structure allocation information." }, { '*', "help", STAT_FLAG_CASESENS, FEAT_LAST_F, ----------------------- End of diff ----------------------- _______________________________________________ Patches mailing list Patches@undernet.org http://undernet.sbg.org/mailman/listinfo/patches