X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/e3354945168e45e49cc0716349d44837eef96db1..b2c208be091670e3c5259eba77187bae6ac6eece:/modules/m_whowas.c?ds=sidebyside diff --git a/modules/m_whowas.c b/modules/m_whowas.c index 807f84a5..eb32ede2 100644 --- a/modules/m_whowas.c +++ b/modules/m_whowas.c @@ -29,7 +29,7 @@ #include "client.h" #include "common.h" #include "hash.h" -#include "irc_string.h" +#include "match.h" #include "ircd.h" #include "ircd_defs.h" #include "numeric.h" @@ -53,7 +53,6 @@ DECLARE_MODULE_AV1(whowas, NULL, NULL, whowas_clist, NULL, NULL, "$Revision: 171 /* ** m_whowas -** parv[0] = sender prefix ** parv[1] = nickname queried */ static int @@ -64,6 +63,8 @@ m_whowas(struct Client *client_p, struct Client *source_p, int parc, const char int max = -1, found = 0; char *p; const char *nick; + char tbuf[26]; + long sendq_limit; static time_t last_used = 0L; @@ -96,12 +97,20 @@ m_whowas(struct Client *client_p, struct Client *source_p, int parc, const char nick = parv[1]; + sendq_limit = get_sendq(client_p) * 9 / 10; + temp = WHOWASHASH[hash_whowas_name(nick)]; found = 0; for (; temp; temp = temp->next) { if(!irccmp(nick, temp->name)) { + if(cur > 0 && rb_linebuf_len(&client_p->localClient->buf_sendq) > sendq_limit) + { + sendto_one(source_p, form_str(ERR_TOOMANYMATCHES), + me.name, source_p->name, "WHOWAS"); + break; + } sendto_one(source_p, form_str(RPL_WHOWASUSER), me.name, source_p->name, temp->name, temp->username, temp->hostname, temp->realname); @@ -115,10 +124,14 @@ m_whowas(struct Client *client_p, struct Client *source_p, int parc, const char form_str(RPL_WHOISACTUALLY), temp->name, temp->sockhost); #endif + if (!EmptyString(temp->suser)) + sendto_one_numeric(source_p, RPL_WHOISLOGGEDIN, + "%s %s :was logged in as", + temp->name, temp->suser); sendto_one_numeric(source_p, RPL_WHOISSERVER, form_str(RPL_WHOISSERVER), temp->name, temp->servername, - myctime(temp->logoff)); + rb_ctime(temp->logoff, tbuf, sizeof(tbuf))); cur++; found++; }