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;
regchanuser *rcup, *rcup2;
whom = "(hidden)";
}
- if(target->suspendreason && target->suspendreason->content) {
+ if(target->suspendreason) {
reason = target->suspendreason->content;
} else {
reason = "(none)";
}
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));
}
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)"); */
- chanservstdmessage(sender, QM_WHOIS_LASTUSERHOST, target->lastuserhost->content);
+ if(rup==target || cs_privcheck(QPRIV_VIEWREALHOST, sender)) {
+ chanservstdmessage(sender, QM_WHOIS_LASTUSERHOST, target->lastuserhost->content);
+ }
}
if (target->email && (rup==target || cs_privcheck(QPRIV_VIEWEMAIL, sender))) {
chanservstdmessage(sender, QM_ENDOFLIST);
+ if (rup==target) {
+ triggerhook(HOOK_CHANSERV_WHOAMI, sender);
+ } else {
+ triggerhook(HOOK_CHANSERV_WHOIS, sender);
+ }
+
return CMD_OK;
}