Author: Isomer <perry@coders.net>
[ircu2.10.12-pk.git] / ircd / m_clearmode.c
index 8153e28898ecbda391753b84f26295f117285651..ef2e10bb1891d494b14e54d0e3dc1f38e7cce77f 100644 (file)
 #include "numeric.h"
 #include "numnicks.h"
 #include "send.h"
+#include "support.h"
 
 #include <assert.h>
 
@@ -237,24 +238,14 @@ do_clearmode(struct Client *cptr, struct Client *sptr, struct Channel *chptr,
   control_buf[control_buf_i] = '\0';
 
 #ifdef OPATH
-  if (IsServer(sptr))
-    write_log(OPATH, TIME_T_FMT " %s CLEARMODE %s %s\n", TStime(), sptr->name,
-             chptr->chname, control_buf);
-  else
-    write_log(OPATH, TIME_T_FMT " %s!%s@%s CLEARMODE %s %s\n", TStime(),
-             sptr->name, sptr->user->username, sptr->user->host,
-             chptr->chname, control_buf);
+  write_log(OPATH, "%Tu %#C CLEARMODE %H %s\n", TStime(), sptr, chptr,
+           control_buf);
 #endif
 
   /* Then send it */
-  if (!IsLocalChannel(chptr->chname)) {
-    if (IsServer(sptr))
-      sendto_serv_butone(cptr, "%s " TOK_CLEARMODE " %s %s", NumServ(sptr),
-                        chptr->chname, control_buf);
-    else
-      sendto_serv_butone(cptr, "%s%s " TOK_CLEARMODE " %s %s", NumNick(sptr),
-                        chptr->chname, control_buf);
-  }
+  if (!IsLocalChannel(chptr->chname))
+    sendcmdto_serv_butone(sptr, CMD_CLEARMODE, cptr, "%H %s", chptr,
+                         control_buf);
 
   return 0;
 }
@@ -274,12 +265,14 @@ ms_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (parc < 3)
     return need_more_params(sptr, "CLEARMODE");
 
-  if (!IsPrivileged(sptr))
-    return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+  if (!IsPrivileged(sptr)) {
+    protocol_violation(sptr,"No priviledges on source for CLEARMODE, desync?");
+    return send_reply(sptr, ERR_NOPRIVILEGES);
+  }
 
   if (!IsChannelName(parv[1]) || IsLocalChannel(parv[1]) ||
       !(chptr = FindChannel(parv[1])))
-    return send_error_to_client(sptr, ERR_NOSUCHCHANNEL, parv[1]);
+    return send_reply(sptr, ERR_NOSUCHCHANNEL, parv[1]);
 
   return do_clearmode(cptr, sptr, chptr, parv[2]);
 }
@@ -294,6 +287,9 @@ ms_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 int
 mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
+#ifndef CONFIG_OPERCMDS
+  return send_reply(sptr, ERR_DISABLED, "CLEARMODE");
+#else
   struct Channel *chptr;
   char *control = "ovpsmikbl"; /* default control string */
 
@@ -306,10 +302,11 @@ mo_clearmode(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   clean_channelname(parv[1]);
 
   if (!IsOper(sptr) && !IsLocalChannel(parv[1]))
-    return send_error_to_client(sptr, ERR_NOPRIVILEGES);
+    return send_reply(sptr, ERR_NOPRIVILEGES);
 
   if (!IsChannelName(parv[1]) || !(chptr = FindChannel(parv[1])))
-    return send_error_to_client(sptr, ERR_NOSUCHCHANNEL, parv[1]);
+    return send_reply(sptr, ERR_NOSUCHCHANNEL, parv[1]);
 
   return do_clearmode(cptr, sptr, chptr, control);
+#endif /* CONFIG_OPERCMDS */
 }