Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / m_kill.c
index bf62b60e9d32398740462f7e56cb961f501585bb..dd5b36ad6da8e1e5e89155811e8190e085ffb7a1 100644 (file)
 #include <assert.h>
 #include <string.h>
 
-#if defined(DEBUGMODE)
-#define SYSLOG_KILL
-#endif
-
 /*
  * ms_kill - server message handler template
  *
@@ -141,31 +137,11 @@ int ms_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   if (!(victim = findNUser(parv[1]))) {
     if (IsUser(sptr))
-      sendto_one(sptr,
-                 "%s NOTICE %s%s :KILL target disconnected before I got him :(",
-                 NumServ(&me), NumNick(sptr));
-    return 0;
-  }
-#if 0
-  /*
-   * XXX - strictly speaking, the next 2 checks shouldn't be needed
-   * this function only handles kills from servers, and the check
-   * is done before the message is propagated --Bleep
-   */
-  if (IsServer(victim) || IsMe(victim)) {
-    return send_error_to_client(sptr, ERR_CANTKILLSERVER);
-    return 0;
-  }
-  if (IsLocOp(sptr) && !MyConnect(victim)) {
-    return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+      sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :KILL target disconnected "
+                   "before I got him :(", sptr);
     return 0;
   }
-  /*
-   * XXX - this is guaranteed by the parser not to happen
-   */
-  if (EmptyString(path))
-    path = "*no-path*";                /* Bogus server sending??? */
-#endif
+
   /*
    * Notify all *local* opers about the KILL (this includes the one
    * originating the kill, if from this server--the special numeric
@@ -174,37 +150,20 @@ int ms_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * Note: "victim->name" is used instead of "user" because we may
    *       have changed the target because of the nickname change.
    */
-  inpath = cptr->name;
+  inpath = cli_name(cptr);
 
-  sendto_op_mask(IsServer(sptr) ? SNO_SERVKILL : SNO_OPERKILL,
-                 "Received KILL message for %s. From %s Path: %s!%s",
-                 victim->name, parv[0], cptr->name, path);
+  sendto_opmask_butone(0, IsServer(sptr) ? SNO_SERVKILL : SNO_OPERKILL,
+                      "Received KILL message for %s. From %s Path: %C!%s",
+                      get_client_name(victim,SHOW_IP), parv[0], cptr, path);
 
-#if defined(SYSLOG_KILL)
-  ircd_log_kill(victim, sptr, cptr->name, path);
-#endif
+  log_write_kill(victim, sptr, cli_name(cptr), path);
   /*
    * And pass on the message to other servers. Note, that if KILL
    * was changed, the message has to be sent to all links, also
    * back.
    */
-#if defined(EVERYONE_SENDS_NUMERICS)
-  /*
-   * just pass parv[0] here, it's the numeric nick of the sender
-   */
-  sendto_highprot_butone(cptr, 10, "%s " TOK_KILL " %s%s :%s!%s",
-                         parv[0], NumNick(victim), cptr->name, path);
-#else
-  /*
-   * translate to numerics
-   */
-  if (IsServer(sptr))
-    sendto_highprot_butone(cptr, 10, "%s " TOK_KILL " %s%s :%s!%s",
-                           NumServ(sptr), NumNick(victim), cptr->name, path);
-  else
-    sendto_highprot_butone(cptr, 10, "%s%s " TOK_KILL " %s%s :%s!%s",
-                           NumNick(sptr), NumNick(victim), cptr->name, path);
-#endif
+  sendcmdto_serv_butone(sptr, CMD_KILL, cptr, "%C :%s!%s", victim, cli_name(cptr),
+                       path);
   /*
    * We *can* have crossed a NICK with this numeric... --Run
    *
@@ -222,14 +181,14 @@ int ms_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * by the next hop (short lag) the bounce won't propagate further.
    */
   if (MyConnect(victim))
-    sendto_one(cptr, "%s " TOK_KILL " %s%s :%s!%s (Ghost 5 Numeric Collided)",
-               NumServ(&me), NumNick(victim), cptr->name, path);
+    sendcmdto_one(&me, CMD_KILL, cptr, "%C :%s!%s (Ghost 5 Numeric Collided)",
+                 victim, cli_name(cptr), path);
   /*
    * Set FLAGS_KILLED. This prevents exit_one_client from sending
    * the unnecessary QUIT for this. (This flag should never be
    * set in any other place)
    */
-  victim->flags |= FLAGS_KILLED;
+  cli_flags(victim) |= FLAGS_KILLED;
 
   /*
    * Tell the victim she/he has been zapped, but *only* if
@@ -238,8 +197,8 @@ int ms_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * anyway (as this user don't exist there any more either)
    */
   if (MyConnect(victim))
-    sendto_prefix_one(victim, sptr, ":%s KILL %s :%s!%s",
-                      sptr->name, victim->name, cptr->name, path);
+    sendcmdto_one(sptr, CMD_KILL, victim, "%C :%s!%s", victim, NumServ(cptr),
+                 path);
   /*
    * the first space in path will be at the end of the
    * opers name:
@@ -298,28 +257,28 @@ int mo_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
      * servers in synch when nick change and kill collide
      */
     if (!(victim = get_history(user, (long)15)))
-      return send_error_to_client(sptr, ERR_NOSUCHNICK, user);
+      return send_reply(sptr, ERR_NOSUCHNICK, user);
 
-    sendto_one(sptr, ":%s NOTICE %s :Changed KILL %s into %s",
-               me.name, parv[0], user, victim->name);
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :Changed KILL %s into %s", sptr,
+                 user, cli_name(victim));
   }
   if (!MyConnect(victim) && IsLocOp(cptr))
-    return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+    return send_reply(sptr, ERR_NOPRIVILEGES);
 
   if (IsServer(victim) || IsMe(victim)) {
-    return send_error_to_client(sptr, ERR_CANTKILLSERVER);
+    return send_reply(sptr, ERR_CANTKILLSERVER);
   }
   /*
    * if the user is +k, prevent a kill from local user
    */
   if (IsChannelService(victim))
-    return send_error_to_client(sptr, ERR_ISCHANSERVICE, "KILL", victim->name);
+    return send_reply(sptr, ERR_ISCHANSERVICE, "KILL", cli_name(victim));
 
 
 #ifdef LOCAL_KILL_ONLY
   if (!MyConnect(victim)) {
-    sendto_one(sptr, ":%s NOTICE %s :Nick %s isnt on your server",
-               me.name, parv[0], victim->name);
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :Nick %s isnt on your server", sptr,
+              cli_name(victim));
     return 0;
   }
 #endif
@@ -337,10 +296,10 @@ int mo_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (strlen(comment) > TOPICLEN)
     comment[TOPICLEN] = '\0';
 
-  inpath = sptr->user->host;
+  inpath = cli_user(sptr)->host;
 
   sprintf_irc(buf,
-              "%s%s (%s)", cptr->name, IsOper(sptr) ? "" : "(L)", comment);
+              "%s%s (%s)", cli_name(cptr), IsOper(sptr) ? "" : "(L)", comment);
   path = buf;
 
   /*
@@ -351,13 +310,11 @@ int mo_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * Note: "victim->name" is used instead of "user" because we may
    *       have changed the target because of the nickname change.
    */
-  sendto_op_mask(SNO_OPERKILL,
-                 "Received KILL message for %s. From %s Path: %s!%s",
-                 victim->name, parv[0], inpath, path);
+  sendto_opmask_butone(0, SNO_OPERKILL,
+                      "Received KILL message for %s. From %s Path: %s!%s",
+                      get_client_name(victim,SHOW_IP), parv[0], inpath, path);
 
-#if defined(SYSLOG_KILL)
-  ircd_log_kill(victim, sptr, inpath, path);
-#endif
+  log_write_kill(victim, sptr, inpath, path);
   /*
    * And pass on the message to other servers. Note, that if KILL
    * was changed, the message has to be sent to all links, also
@@ -365,17 +322,17 @@ int mo_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * Suicide kills are NOT passed on --SRB
    */
   if (!MyConnect(victim)) {
-    sendto_highprot_butone(cptr, 10, "%s%s " TOK_KILL " %s%s :%s!%s",
-                           NumNick(sptr), NumNick(victim), inpath, path);
+    sendcmdto_serv_butone(sptr, CMD_KILL, cptr, "%C :%s!%s", victim, inpath,
+                         path);
 
    /*
     * Set FLAGS_KILLED. This prevents exit_one_client from sending
     * the unnecessary QUIT for this. (This flag should never be
     * set in any other place)
     */
-    victim->flags |= FLAGS_KILLED;
+    cli_flags(victim) |= FLAGS_KILLED;
 
-    sprintf_irc(buf, "Killed by %s (%s)", sptr->name, comment);
+    sprintf_irc(buf, "Killed by %s (%s)", cli_name(sptr), comment);
   }
   else {
   /*
@@ -384,16 +341,15 @@ int mo_kill(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    * notification chasing the above kill, it won't get far
    * anyway (as this user don't exist there any more either)
    */
-    sendto_prefix_one(victim, sptr, ":%s KILL %s :%s!%s",
-                      parv[0], victim->name, inpath, path);
-    sprintf_irc(buf, "Local kill by %s (%s)", sptr->name, comment);
+    sendcmdto_one(sptr, CMD_KILL, victim, "%C :%s!%s", victim, inpath, path);
+    sprintf_irc(buf, "Local kill by %s (%s)", cli_name(sptr), comment);
   }
 
   return exit_client(cptr, victim, sptr, buf);
 
 #else /* !defined(OPER_KILL) */
 
-  return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+  return send_reply(sptr, ERR_NOPRIVILEGES);
 
 #endif /* !defined(OPER_KILL) */
 }
@@ -426,13 +382,13 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 #ifdef        OPER_KILL
   if (!IsPrivileged(cptr))
   {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); /* XXX DEAD */
     return 0;
   }
 #else
   if (!IsServer(cptr))
   {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); /* XXX DEAD */
     return 0;
   }
 #endif
@@ -456,10 +412,10 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
        */
       if (!(acptr = get_history(user, (long)15)))
       {
-        sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], user);
+        sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], user); /* XXX DEAD */
         return 0;
       }
-      sendto_one(sptr, ":%s NOTICE %s :Changed KILL %s into %s",
+      sendto_one(sptr, ":%s NOTICE %s :Changed KILL %s into %s", /* XXX DEAD */
           me.name, parv[0], user, acptr->name);
       chasing = 1;
     }
@@ -467,26 +423,26 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   else if (!(acptr = findNUser(user)))
   {
     if (IsUser(sptr))
-      sendto_one(sptr,
+      sendto_one(sptr, /* XXX DEAD */
           "%s NOTICE %s%s :KILL target disconnected before I got him :(",
           NumServ(&me), NumNick(sptr));
     return 0;
   }
   if (!MyConnect(acptr) && IsLocOp(cptr))
   {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); /* XXX DEAD */
     return 0;
   }
   if (IsServer(acptr) || IsMe(acptr))
   {
-    sendto_one(sptr, err_str(ERR_CANTKILLSERVER), me.name, parv[0]);
+    sendto_one(sptr, err_str(ERR_CANTKILLSERVER), me.name, parv[0]); /* XXX DEAD */
     return 0;
   }
 
   /* if the user is +k, prevent a kill from local user */
   if (IsChannelService(acptr) && MyUser(sptr))
   {
-    sendto_one(sptr, err_str(ERR_ISCHANSERVICE), me.name,
+    sendto_one(sptr, err_str(ERR_ISCHANSERVICE), me.name, /* XXX DEAD */
         parv[0], "KILL", acptr->name);
     return 0;
   }
@@ -494,7 +450,7 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
 #ifdef        LOCAL_KILL_ONLY
   if (MyConnect(sptr) && !MyConnect(acptr))
   {
-    sendto_one(sptr, ":%s NOTICE %s :Nick %s isnt on your server",
+    sendto_one(sptr, ":%s NOTICE %s :Nick %s isnt on your server", /* XXX DEAD */
         me.name, parv[0], acptr->name);
     return 0;
   }
@@ -532,10 +488,10 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
    */
   if (IsLocOp(sptr) && !MyConnect(acptr))
   {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); /* XXX DEAD */
     return 0;
   }
-  sendto_op_mask(IsServer(sptr) ? SNO_SERVKILL : SNO_OPERKILL,
+  sendto_op_mask(IsServer(sptr) ? SNO_SERVKILL : SNO_OPERKILL, /* XXX DEAD */
       "Received KILL message for %s. From %s Path: %s!%s",
       acptr->name, parv[0], inpath, path);
 #if defined(USE_SYSLOG) && defined(SYSLOG_KILL)
@@ -543,19 +499,19 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
   {                                /* get more infos when your local
                                    clients are killed -- _dl */
     if (IsServer(sptr))
-      ircd_log(L_TRACE,
+      ircd_log(L_TRACE, /* XXX DEAD */
           "A local client %s!%s@%s KILLED from %s [%s] Path: %s!%s)",
           acptr->name, acptr->user->username, acptr->user->host,
           parv[0], sptr->name, inpath, path);
     else
-      ircd_log(L_TRACE,
+      ircd_log(L_TRACE, /* XXX DEAD */
           "A local client %s!%s@%s KILLED by %s [%s!%s@%s] (%s!%s)",
           acptr->name, acptr->user->username, acptr->user->host,
           parv[0], sptr->name, sptr->user->username, sptr->user->host,
           inpath, path);
   }
   else if (IsOper(sptr))
-    ircd_log(L_TRACE, "KILL From %s For %s Path %s!%s",
+    ircd_log(L_TRACE, "KILL From %s For %s Path %s!%s", /* XXX DEAD */
         parv[0], acptr->name, inpath, path);
 #endif
   /*
@@ -566,7 +522,7 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
    */
   if (!MyConnect(acptr) || !MyConnect(sptr) || !IsAnOper(sptr))
   {
-    sendto_highprot_butone(cptr, 10, ":%s " TOK_KILL " %s%s :%s!%s",
+    sendto_highprot_butone(cptr, 10, ":%s " TOK_KILL " %s%s :%s!%s", /* XXX DEAD */
         parv[0], NumNick(acptr), inpath, path);
     /* We *can* have crossed a NICK with this numeric... --Run */
     /* Note the following situation:
@@ -580,7 +536,7 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
      * Therefore we still need to detect numeric nick collisions too.
      */
     if (MyConnect(acptr) && IsServer(cptr))
-      sendto_one(cptr, "%s " TOK_KILL " %s%s :%s!%s (Ghost5)",
+      sendto_one(cptr, "%s " TOK_KILL " %s%s :%s!%s (Ghost5)", /* XXX DEAD */
           NumServ(&me), NumNick(acptr), inpath, path);
     acptr->flags |= FLAGS_KILLED;
   }
@@ -592,7 +548,7 @@ int m_kill(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
    * anyway (as this user don't exist there any more either)
    */
   if (MyConnect(acptr))
-    sendto_prefix_one(acptr, sptr, ":%s KILL %s :%s!%s",
+    sendto_prefix_one(acptr, sptr, ":%s KILL %s :%s!%s", /* XXX DEAD */
         parv[0], acptr->name, inpath, path);
   /*
    * Set FLAGS_KILLED. This prevents exit_one_client from sending