X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/f06c147c70cf72b40e4ec0ec3b5aca86662beb80..715b28fefd0e9b923fd816ef130ab88f92aba47d:/modules/m_trace.c diff --git a/modules/m_trace.c b/modules/m_trace.c index a7bede4..e173d21 100644 --- a/modules/m_trace.c +++ b/modules/m_trace.c @@ -345,7 +345,7 @@ report_this_status(struct Client *source_p, struct Client *target_p) class_name = get_client_class(target_p); if(IsAnyServer(target_p)) - name = get_server_name(target_p, HIDE_IP); + name = target_p->name; else name = get_client_name(target_p, HIDE_IP); @@ -378,23 +378,26 @@ report_this_status(struct Client *source_p, struct Client *target_p) break; case STAT_CLIENT: - if(IsOper(target_p)) - sendto_one_numeric(source_p, RPL_TRACEOPERATOR, - form_str(RPL_TRACEOPERATOR), - class_name, name, - show_ip(source_p, target_p) ? ip : "255.255.255.255", - rb_current_time() - target_p->localClient->lasttime, - rb_current_time() - target_p->localClient->last); + /* Only opers see users if there is a wildcard + * but anyone can see all the opers. + */ + if((IsOper(source_p) && + (MyClient(source_p) || !(dow && IsInvisible(target_p)))) + || !dow || IsOper(target_p) || (source_p == target_p)) + { + int tnumeric = RPL_TRACEUSER; + if(IsOper(target_p)) + tnumeric = RPL_TRACEOPERATOR; + + sendto_one_numeric(source_p, tnumeric, form_str(tnumeric), + class_name, name, + show_ip(source_p, target_p) ? ip : empty_sockhost, + rb_current_time() - target_p->localClient->lasttime, + rb_current_time() - target_p->localClient->last); + cnt++; + } + break; - else - sendto_one_numeric(source_p, RPL_TRACEUSER, - form_str(RPL_TRACEUSER), - class_name, name, - show_ip(source_p, target_p) ? ip : "255.255.255.255", - rb_current_time() - target_p->localClient->lasttime, - rb_current_time() - target_p->localClient->last); - cnt++; - break; case STAT_SERVER: {