X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/0c393f7843507097de4252ec6630d407986773f9..28aa186de14dc4fa7488866e70beb6ae933dde79:/chanserv/usercmds/whois.c diff --git a/chanserv/usercmds/whois.c b/chanserv/usercmds/whois.c index 47eaa7d9..2d4cd7eb 100644 --- a/chanserv/usercmds/whois.c +++ b/chanserv/usercmds/whois.c @@ -16,21 +16,23 @@ #include "../chanserv.h" #include "../../lib/irc_string.h" #include "../../lib/strlfunc.h" +#include "../../lib/ccassert.h" #include #include int csu_dowhois(void *source, int cargc, char **cargv) { nick *sender=source; - reguser *rup=getreguserfromnick(sender), *target; + reguser *rup, *target; char buf[200]; char nbpos=0; - struct tm *tmp; regchanuser *rcup, *rcup2; flag_t flagmask, flags; int doneheader=0; authname *anp; nick *tnp; + CCASSERT(sizeof(buf) > TIMELEN); + if (!(rup=getreguserfromnick(sender))) return CMD_ERROR; @@ -66,9 +68,11 @@ int csu_dowhois(void *source, int cargc, char **cargv) { flagmask=QUFLAG_ALL; if (UHasSuspension(target)) { - char expiresbuf[100], timebuf[100]; + char expiresbuf[100]; char *reason, *suspendtype, *whom; + CCASSERT(sizeof(expiresbuf) > TIMELEN); + if(UIsDelayedGline(target)) { suspendtype = "delayed gline"; } else if(UIsGline(target)) { @@ -83,14 +87,13 @@ int csu_dowhois(void *source, int cargc, char **cargv) { if(time(NULL) >= target->suspendexp) { strlcpy(expiresbuf, "(next auth)", sizeof(expiresbuf)); } else { - strftime(expiresbuf, 15, "%d/%m/%y %H:%M", gmtime(&(target->suspendexp))); + q9strftime(expiresbuf, sizeof(expiresbuf), target->suspendexp); } } else { strlcpy(expiresbuf, "(never)", sizeof(expiresbuf)); } - strftime(timebuf, 15, "%d/%m/%y %H:%M", gmtime(&(target->suspendtime))); - if(UHasOperPriv(rup)) { + if(cs_privcheck(QPRIV_VIEWSUSPENDEDBY, sender)) { reguser *trup = findreguserbyID(target->suspendby); if(trup) { whom = trup->username; @@ -110,7 +113,7 @@ int csu_dowhois(void *source, int cargc, char **cargv) { chanservstdmessage(sender, QM_USERSUSPENDEDTYPE, suspendtype); chanservstdmessage(sender, QM_USERSUSPENDEDBY, whom); chanservstdmessage(sender, QM_USERSUSPENDEDREASON, reason); - chanservstdmessage(sender, QM_USERSUSPENDEDAT, timebuf); + chanservstdmessage(sender, QM_USERSUSPENDEDAT, target->suspendtime); chanservstdmessage(sender, QM_USERSUSPENDEDEXPIRY, expiresbuf); } } else { @@ -131,8 +134,8 @@ int csu_dowhois(void *source, int cargc, char **cargv) { } if (rup==target) - flagmask|=(QUFLAG_OPER | QUFLAG_DEV | QUFLAG_HELPER | - QUFLAG_ADMIN | QUFLAG_INFO | QUFLAG_NOTICE | QUFLAG_STAFF); + flagmask|=(QUFLAG_OPER | QUFLAG_DEV | QUFLAG_HELPER | QUFLAG_ADMIN | + QUFLAG_INFO | QUFLAG_NOTICE | QUFLAG_STAFF | QUFLAG_ACHIEVEMENTS); if (flagmask & target->flags) chanservstdmessage(sender, QM_WHOIS_FLAGS, printflagsornone(flagmask & target->flags, ruflags)); @@ -153,22 +156,19 @@ int csu_dowhois(void *source, int cargc, char **cargv) { } } - if (target->created) { - tmp=gmtime(&(target->created)); - strftime(buf,15,"%d/%m/%y %H:%M",tmp); - - chanservstdmessage(sender, QM_WHOIS_CREATED, buf); - } + if (target->created) + chanservstdmessage(sender, QM_WHOIS_CREATED, target->created); if (target->lastauth == 0) { snprintf(buf,sizeof(buf),"(never)"); } else { - tmp=gmtime(&(target->lastauth)); - strftime(buf,15,"%d/%m/%y %H:%M",tmp); + q9strftime(buf,sizeof(buf),target->lastauth); } chanservstdmessage(sender, QM_WHOIS_LASTAUTH, buf); - if (target->lastuserhost && (rup==target || cs_privcheck(QPRIV_VIEWFULLWHOIS, sender))) { + /* The third clause of this hides user@host of opers from non-opered staff. */ + if (target->lastuserhost && (rup==target || cs_privcheck(QPRIV_VIEWFULLWHOIS, sender)) && + (!UHasOperPriv(target) || UHasOperPriv(rup)) ) { /* Commenting out language until we implement some - splidge chanservstdmessage(sender, QM_WHOIS_USERLANG, cslanguages[target->languageid] ? cslanguages[target->languageid]->name->content : "(unknown)"); */ @@ -178,10 +178,10 @@ int csu_dowhois(void *source, int cargc, char **cargv) { if (target->email && (rup==target || cs_privcheck(QPRIV_VIEWEMAIL, sender))) { chanservstdmessage(sender, QM_WHOIS_EMAIL, target->email->content); - tmp=gmtime(&(target->lastemailchange)); - strftime(buf,15,"%d/%m/%y %H:%M",tmp); - - chanservstdmessage(sender, QM_WHOIS_EMAILSET, buf); + if (target->lastemailchange) + chanservstdmessage(sender, QM_WHOIS_EMAILSET, target->lastemailchange); + if (target->lastpasschange) + chanservstdmessage(sender, QM_WHOIS_PASSSET, target->lastpasschange); } if (target->info && *target->info->content) { @@ -225,5 +225,11 @@ int csu_dowhois(void *source, int cargc, char **cargv) { chanservstdmessage(sender, QM_ENDOFLIST); + if (rup==target) { + triggerhook(HOOK_CHANSERV_WHOAMI, sender); + } else { + triggerhook(HOOK_CHANSERV_WHOIS, sender); + } + return CMD_OK; }