/*
** m_who
-** parv[0] = sender prefix
** parv[1] = nickname mask list
** parv[2] = additional selection flag and format options
*/
max = *pos >= bufsize ? 0 : bufsize - *pos;
va_start(ap, fmt);
- result = rb_vsnprintf(buf + *pos, bufsize - *pos, fmt, ap);
+ result = rb_vsnprintf(buf + *pos, max, fmt, ap);
va_end(ap);
*pos += result;
}
source_p->name, msptr ? msptr->chptr->chname : "*",
target_p->username, target_p->host,
target_p->servptr->name, target_p->name, status,
- ConfigServerHide.flatten_links ? 0 : target_p->hopcount,
+ ConfigServerHide.flatten_links && !IsOper(source_p) && !IsExemptShide(source_p) ? 0 : target_p->hopcount,
target_p->info);
else
{
if (fmt->fields & FIELD_FLAGS)
append_format(str, sizeof str, &pos, " %s", status);
if (fmt->fields & FIELD_HOP)
- append_format(str, sizeof str, &pos, " %d", ConfigServerHide.flatten_links ? 0 : target_p->hopcount);
+ append_format(str, sizeof str, &pos, " %d", ConfigServerHide.flatten_links && !IsOper(source_p) && !IsExemptShide(source_p) ? 0 : target_p->hopcount);
if (fmt->fields & FIELD_IDLE)
append_format(str, sizeof str, &pos, " %d", (int)(MyClient(target_p) ? rb_current_time() - target_p->localClient->last : 0));
if (fmt->fields & FIELD_ACCOUNT)