added basic ssl support to ircu
[ircu2.10.12-pk.git] / ircd / m_trace.c
index e261ac5105c6da091b25852b33b134648b1c329c..a0ba9757eef3ef0aa0247edb97bc8664741cfd1b 100644 (file)
@@ -106,6 +106,7 @@ void do_trace(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 {
   int i;
   struct Client *acptr;
+  struct Client *acptr2;
   const struct ConnectionClass* cl;
   char* tname;
   int doall;
@@ -260,14 +261,19 @@ void do_trace(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
          */
 
       case STAT_SERVER:
-        if (cli_serv(acptr)->user)
+        if (cli_serv(acptr)->user) {
+          if (!cli_serv(acptr)->by[0]
+              || !(acptr2 = findNUser(cli_serv(acptr)->by))
+              || (cli_user(acptr2) != cli_serv(acptr)->user))
+            acptr2 = NULL;
          send_reply(sptr, RPL_TRACESERVER, conClass, link_s[i],
                      link_u[i], cli_name(acptr),
-                     (*(cli_serv(acptr))->by) ? cli_serv(acptr)->by : "*",
-                     cli_serv(acptr)->user->username, cli_serv(acptr)->user->host,
+                     acptr2 ? cli_name(acptr2) : "*",
+                     cli_serv(acptr)->user->username,
+                     cli_serv(acptr)->user->host,
                      CurrentTime - cli_lasttime(acptr),
                      CurrentTime - cli_serv(acptr)->timestamp);
-       else
+        } else
          send_reply(sptr, RPL_TRACESERVER, conClass, link_s[i],
                      link_u[i], cli_name(acptr),
                      (*(cli_serv(acptr))->by) ?  cli_serv(acptr)->by : "*", "*",
@@ -287,8 +293,8 @@ void do_trace(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
    */
   if (IsAnOper(sptr) && doall) {
     for (cl = get_class_list(); cl; cl = cl->next) {
-      if (Links(cl) > 0)
-       send_reply(sptr, RPL_TRACECLASS, ConClass(cl), Links(cl));
+      if (Links(cl) > 1)
+       send_reply(sptr, RPL_TRACECLASS, ConClass(cl), Links(cl) - 1);
     }
   }
   send_reply(sptr, RPL_TRACEEND);