From bc1dc6f2ab48e352c42fe443b345822f2ac329fe Mon Sep 17 00:00:00 2001 From: codemastr Date: Tue, 6 Feb 2001 20:29:48 +0000 Subject: [PATCH] Made a bunch of /stats flags work with newconf --- Changes | 2 +- src/s_err.c | 4 +- src/s_serv.c | 299 ++++++++++++--------------------------------------- 3 files changed, 74 insertions(+), 231 deletions(-) diff --git a/Changes b/Changes index ff888401f..eab663785 100644 --- a/Changes +++ b/Changes @@ -189,4 +189,4 @@ - Some more rehash stuff - Fixed check_pings problem (crash) - Fixed negative timestamps problem (crash) - \ No newline at end of file +- Made a bunch of /stats flags work with newconf diff --git a/src/s_err.c b/src/s_err.c index f6e6b5bd0..4378e502f 100644 --- a/src/s_err.c +++ b/src/s_err.c @@ -249,8 +249,8 @@ static char *replies[] = { /* 213 RPL_STATSCLINE */ ":%s 213 %s %c %s * %s %d %d %s", /* 214 RPL_STATSOLDNLINE */ ":%s 214 %s %c %s * %s %d %d %s", /* 215 RPL_STATSILINE */ ":%s 215 %s %c %s * %s %d %d", -/* 216 RPL_STATSKLINE */ ":%s 216 %s %c %s %s %s %d %d", -/* 217 RPL_STATSQLINE */ ":%s 217 %s %c %s %s %s %d %d", +/* 216 RPL_STATSKLINE */ ":%s 216 %s %s %s %s", +/* 217 RPL_STATSQLINE */ ":%s 217 %s Q %s %s", /* 218 RPL_STATSYLINE */ ":%s 218 %s %c %d %d %d %d %ld", /* 219 RPL_ENDOFSTATS */ ":%s 219 %s %c :End of /STATS report", /* 220 RPL_STATSBLINE */ ":%s 220 %s %c %s %s %s %d %d", diff --git a/src/s_serv.c b/src/s_serv.c index 1cf09bef8..687fb144e 100644 --- a/src/s_serv.c +++ b/src/s_serv.c @@ -2235,212 +2235,10 @@ int m_watch(cptr, sptr, parc, parv) ** C = Report C and N configuration lines */ /* -** m_stats/stats_conf -** Report N/C-configuration lines from this server. This could -** report other configuration lines too, but converting the -** status back to "char" is a bit akward--not worth the code -** it needs... -** ** Note: The info is reported in the order the server uses ** it--not reversed as in ircd.conf! */ -static void report_sqlined_nicks(sptr) - aClient *sptr; -{ - char *nickmask, *reason; - -/* for (tmp = sqline; tmp; tmp = tmp->next) - { - if (tmp->status != CONF_ILLEGAL) - { - nickmask = BadPtr(tmp->sqline) ? "" : tmp->sqline; - reason = BadPtr(tmp->reason) ? "" : tmp->reason; - sendto_one(sptr, rpl_str(RPL_SQLINE_NICK), me.name, - sptr->name, nickmask, reason); - } - } - */ -} - -static void report_configured_links(sptr, mask) - aClient *sptr; - int mask; -{ - static char null[] = ""; - aConfItem *tmp; - int *p, port, tmpmask, options; - char c, *host, *pass, *name, optbuf[5]; - tmpmask = (mask == CONF_MISSING) ? CONF_CONNECT_SERVER : mask; -#ifdef OLD - for (tmp = conf; tmp; tmp = tmp->next) - if (tmp->status & tmpmask) - { - for (p = &report_array[0][0]; *p; p += 3) - if (*p == tmp->status) - break; - if (!*p) - continue; - c = (char)*(p + 2); - host = BadPtr(tmp->host) ? null : tmp->host; - pass = BadPtr(tmp->passwd) ? null : tmp->passwd; - name = BadPtr(tmp->name) ? null : tmp->name; - port = (int)tmp->port; - options = tmp->options; - /* - * On K line the passwd contents can be - * displayed on STATS reply. -Vesa - */ - /* Same with Z-lines and q/Q-lines -- Barubary */ - if ((tmp->status == CONF_KILL) || (tmp->status & - CONF_QUARANTINE) || (tmp->status & CONF_EXCEPT) - || (tmp->status == CONF_ZAP)) - { -/* These mods are to tell the difference between the different kinds - * of klines. the only effect it has is in the display. --Russell - */ -/* Now translates spaces to _'s to show comments in klines -- Barubary */ - char *temp; - if (!pass) - strcpy(buf, ""); - else - { - strcpy(buf, pass); - for (temp = buf; *temp; temp++) - if (*temp == ' ') - *temp = '_'; - } - /* semicolon intentional -- Barubary */ - if (tmp->status == CONF_QUARANTINED_NICK); - /* Hide password for servers -- Barubary */ - else if (tmp->status & CONF_QUARANTINE) - strcpy(buf, "*"); - else - { -/* This wasn't documented before - comments aren't displayed for akills - because they are all the same. -- Barubary */ - if (tmp->tmpconf == KLINE_AKILL) - strcpy(buf, "*"); - - /* Show comments in E:Lines.. - if (tmp->tmpconf == KLINE_EXCEPT) - strcpy(buf, "*"); - */ - /* KLINE_PERM == 0 - watch out when doing - Z-lines. -- Barubary */ - if (tmp->status != CONF_ZAP) - { - if (tmp->tmpconf == KLINE_PERM) - c = 'K'; - if (tmp->tmpconf == KLINE_TEMP) - c = 'k'; - if (tmp->tmpconf == KLINE_AKILL) - c = 'A'; - if (tmp->tmpconf == - KLINE_EXCEPT) c = 'E'; - } - else - { - if (tmp->tmpconf == KLINE_PERM) - c = 'Z'; - if (tmp->tmpconf == KLINE_TEMP) - c = 'z'; - if (tmp->tmpconf == KLINE_AKILL) - c = 'S'; - if (tmp->tmpconf == - KLINE_EXCEPT) c = 'e'; - } - } - sendto_one(sptr, rpl_str(p[1]), me.name, - sptr->name, c, host, - buf, name, port, get_conf_class(tmp)); - } - else if (mask & CONF_OPS) - { - sendto_one(sptr, rpl_str(p[1]), me.name, - sptr->name, c, host, name, oflagstr(port), - get_conf_class(tmp)); - } - - /* connect rules are classless */ - else if (tmp->status & CONF_CRULE) - sendto_one(sptr, rpl_str(p[1]), me.name, - sptr->name, c, host, name); - /* Only display on X if server is missing */ - else if (mask == CONF_MISSING) - { - if (!find_server_quick(name)) - sendto_one(sptr, - rpl_str(RPL_STATSXLINE), me.name, - sptr->name, name, port); - } - else if (mask == CONF_TLINE) - { - sendto_one(sptr, rpl_str(RPL_STATSTLINE), - me.name, sptr->name, host, pass, name); - } - else if (mask == CONF_SOCKSEXCEPT) - { - sendto_one(sptr, rpl_str(RPL_STATSELINE), - me.name, sptr->name, host, pass, name); - } - else if (mask == CONF_NLINE) - { - sendto_one(sptr, rpl_str(RPL_STATSNLINE), - me.name, sptr->name, host, pass); - } - else if (mask == CONF_VERSION) - sendto_one(sptr, rpl_str(RPL_STATSVLINE), - me.name, sptr->name, host, pass, name); -/* else if (mask == CONF_EXCEPT) - { - ppx = MyMalloc(strlen(tmp->passwd) + 1); - strcpy(ppx, tmp->passwd); - for (pp = ppx; *pp != '\0'; pp++) { - if (*pp == ' ') - *pp = '_'; - } - sendto_one(sptr, rpl_str(RPL_STATSKLINE), me.name, - sptr->name, "E", host, ppx, name, 0,0, -1); - MyFree(ppx); - } */ - else - { - if (!IsOper(sptr) - && (mask & CONF_NOCONNECT_SERVER - || mask & CONF_CONNECT_SERVER)) - sendto_one(sptr, rpl_str(p[1]), me.name, - sptr->name, c, "*", name, port, - get_conf_class(tmp), "*"); - else - { - int cnt = 0; - if (options) - { - if (options & CONNECT_SSL) - { - optbuf[cnt] = 'S'; - cnt++; - } - if (options & CONNECT_ZIP) - { - optbuf[cnt] = 'Z'; - cnt++; - } - optbuf[cnt] = '\0'; - } - - sendto_one(sptr, rpl_str(p[1]), me.name, - sptr->name, c, host, name, port, - get_conf_class(tmp), - options ? optbuf : "*"); - optbuf[0] = '\0'; - } - } - } -#endif - return; -} char *get_cptr_status(aClient *acptr) @@ -2676,11 +2474,17 @@ int m_stats(cptr, sptr, parc, parv) break; case 'I': case 'i': - report_configured_links(sptr, CONF_CLIENT); break; case 'E': - report_configured_links(sptr, CONF_EXCEPT); + { + ConfigItem_except *excepts; + for (excepts = conf_except; excepts; excepts = (ConfigItem_except *) excepts->next) { + if (excepts->flag.type == 1) + sendto_one(sptr, rpl_str(RPL_STATSKLINE), me.name, + parv[0], "E", excepts->mask, ""); + } break; + } case 'e': { ConfigItem_except *excepts; @@ -2695,9 +2499,42 @@ int m_stats(cptr, sptr, parc, parv) } case 'K': case 'k': - report_configured_links(sptr, - CONF_KILL | CONF_ZAP | CONF_EXCEPT); + { + ConfigItem_ban *bans; + ConfigItem_except *excepts; + char type[2]; + for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next) { + if (bans->flag.type == CONF_BAN_USER) { + if (bans->flag.type2 == CONF_BAN_TYPE_CONF) + type[0] = 'K'; + else if (bans->flag.type2 == CONF_BAN_TYPE_AKILL) + type[0] = 'A'; + else if (bans->flag.type2 == CONF_BAN_TYPE_TEMPORARY) + type[0] = 'k'; + type[1] = '\0'; + sendto_one(sptr, rpl_str(RPL_STATSKLINE), + me.name, parv[0], type, bans->mask, bans->reason); + } + else if (bans->flag.type == CONF_BAN_IP) { + if (bans->flag.type2 == CONF_BAN_TYPE_CONF) + type[0] = 'Z'; + else if (bans->flag.type2 == CONF_BAN_TYPE_AKILL) + type[0] = 'S'; + else if (bans->flag.type2 == CONF_BAN_TYPE_TEMPORARY) + type[0] = 'z'; + type[1] = '\0'; + sendto_one(sptr, rpl_str(RPL_STATSKLINE), + me.name, parv[0], type, bans->mask, bans->reason); + } + + } + for (excepts = conf_except; excepts; excepts = (ConfigItem_except *)excepts->next) { + if (excepts->flag.type == 1) + sendto_one(sptr, rpl_str(RPL_STATSKLINE), + me.name, parv[0], "E", excepts->mask, ""); + } break; + } case 'M': case 'm': for (mptr = msgtab; mptr->cmd; mptr++) @@ -2716,39 +2553,51 @@ int m_stats(cptr, sptr, parc, parv) mptr->rticks / CLOCKS_PER_SEC); #endif break; - case 'n': - report_configured_links(sptr, CONF_NLINE); + case 'n': + { + ConfigItem_ban *bans; + + for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next) { + if (bans->flag.type == CONF_BAN_REALNAME) + sendto_one(sptr, rpl_str(RPL_STATSNLINE), + me.name, parv[0], bans->mask, bans->reason); + } break; + } case 'N': if (IsOper(sptr)) report_network(sptr); break; case 'o': case 'O': -/* if (SHOWOPERS == 1) { - if(IsOper(sptr)) { - report_configured_links(sptr, CONF_OPS); - break; - } - } - else - if (SHOWOPERS == 0) { - report_configured_links(sptr, CONF_OPS); -*/ if (SHOWOPERS == 0 && (IsOper(sptr))) { - report_configured_links(sptr, CONF_OPS); break; } if (SHOWOPERS == 1) - report_configured_links(sptr, CONF_OPS); break; case 'Q': - report_configured_links(sptr, CONF_QUARANTINE); + { + ConfigItem_ban *bans; + + for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next) { + if (bans->flag.type == CONF_BAN_NICK && bans->flag.type2 != CONF_BAN_TYPE_AKILL) + sendto_one(sptr, rpl_str(RPL_STATSQLINE), + me.name, parv[0], bans->reason, bans->mask); + } + } break; case 'q': - report_sqlined_nicks(sptr); + { + ConfigItem_ban *bans; + + for (bans = conf_ban; bans; bans = (ConfigItem_ban *)bans->next) { + if (bans->flag.type == CONF_BAN_NICK && bans->flag.type2 == CONF_BAN_TYPE_AKILL) + sendto_one(sptr, rpl_str(RPL_SQLINE_NICK), + me.name, parv[0], bans->mask, bans->reason); + } break; + } case 'R': #ifdef DEBUGMODE send_usage(sptr, parv[0]); @@ -2770,10 +2619,8 @@ int m_stats(cptr, sptr, parc, parv) report_dynconf(sptr); break; case 'D': - report_configured_links(sptr, CONF_CRULEALL); break; case 'd': - report_configured_links(sptr, CONF_CRULE); break; case 'r': cr_report(sptr); @@ -2816,10 +2663,8 @@ int m_stats(cptr, sptr, parc, parv) break; } case 'v': - report_configured_links(sptr, CONF_VERSION); break; case 'V': - vhost_report(sptr); break; case 'W': case 'w': @@ -2827,11 +2672,9 @@ int m_stats(cptr, sptr, parc, parv) break; case 'X': case 'x': - report_configured_links(sptr, CONF_MISSING); break; case 'Y': case 'y': -// report_classes(sptr); break; case 'Z': case 'z':