]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/core/m_kick.c
Fix m_kick so that it checks if you're trying to kick the target, not yourself.
[irc/rqf/shadowircd.git] / modules / core / m_kick.c
index 4eb2cfae0dde1a5346034968f95385075fec981a..7efabbb0c253de93b2d979b9c1b6223d3c4ae1c1 100644 (file)
@@ -86,6 +86,13 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
                return 0;
        }
 
+       user = parv[2];         /* strtoken(&p2, parv[2], ","); */
+
+       if(!(who = find_chasing(source_p, user, &chasing)))
+       {
+               return 0;
+       }
+
        if(!IsServer(source_p))
        {
                msptr = find_channel_membership(chptr, source_p);
@@ -97,7 +104,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
                        return 0;
                }
 
-               if(!is_chanop(msptr) && !IsOverride(source_p))
+               if(!can_kick_deop(msptr, find_channel_membership(chptr, who)) && !IsOverride(source_p))
                {
                        if(MyConnect(source_p))
                        {
@@ -140,13 +147,6 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
        if((p = strchr(parv[2], ',')))
                *p = '\0';
 
-       user = parv[2];         /* strtoken(&p2, parv[2], ","); */
-
-       if(!(who = find_chasing(source_p, user, &chasing)))
-       {
-               return 0;
-       }
-
        msptr = find_channel_membership(chptr, who);
 
        if(msptr != NULL)