]> jfr.im git - solanum.git/blobdiff - modules/m_kline.c
Kill Travis
[solanum.git] / modules / m_kline.c
index cd58b65689dd1ddd0c1ea629ee6b1a9ec03352e8..e478f50dc65ddf29387002d64de8224f9e72fc3b 100644 (file)
@@ -99,7 +99,7 @@ mo_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
 {
        char def[] = "No Reason";
        char user[USERLEN + 2];
-       char host[HOSTLEN + 2];
+       char host_buf[HOSTLEN + 3], *host = host_buf + 1;
        char *reason = def;
        char *oper_reason;
        const char *target_server = NULL;
@@ -123,6 +123,12 @@ mo_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
        if(find_user_host(source_p, parv[loc], user, host) == 0)
                return;
 
+       if (*host == ':')
+       {
+               host--;
+               *host = '0';
+       }
+
        loc++;
 
        if(parc >= loc + 2 && !irccmp(parv[loc], "ON"))
@@ -147,8 +153,25 @@ mo_kline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source
 
        reason = LOCAL_COPY(parv[loc]);
 
+       if(parse_netmask_strict(host, NULL, NULL) == HM_ERROR)
+       {
+               sendto_one_notice(source_p,
+                               ":[%s@%s] looks like an ill-formed IP K-line, refusing to set it",
+                               user, host);
+               return;
+       }
+
        if(target_server != NULL)
        {
+               if (tkline_time)
+                       sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
+                                       "%s is adding a temporary %d min. K-Line for [%s@%s] on %s [%s]",
+                                       get_oper_name(source_p), tkline_time / 60, user, host, target_server, reason);
+               else
+                       sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
+                                       "%s is adding a K-Line for [%s@%s] on %s [%s]",
+                                       get_oper_name(source_p), user, host, target_server, reason);
+
                propagate_generic(source_p, "KLINE", target_server, CAP_KLN,
                                  "%d %s %s :%s", tkline_time, user, host, reason);
 
@@ -269,11 +292,6 @@ handle_remote_kline(struct Client *source_p, int tkline_time,
        struct ConfItem *aconf = NULL;
        char *oper_reason;
 
-       if(!find_shared_conf(source_p->username, source_p->host,
-                            source_p->servptr->name,
-                            (tkline_time > 0) ? SHARED_TKLINE : SHARED_PKLINE))
-               return;
-
        if(!valid_user_host(source_p, user, host))
                return;
 
@@ -381,6 +399,9 @@ mo_unkline(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *sour
                        return;
                }
 
+               sendto_realops_snomask(SNO_GENERAL, L_NETWIDE, "%s is removing the K-Line for [%s@%s] on %s",
+                               get_oper_name(source_p), user, host, parv[3]);
+
                propagate_generic(source_p, "UNKLINE", parv[3], CAP_UNKLN, "%s %s", user, host);
 
                if(match(parv[3], me.name) == 0)
@@ -455,10 +476,6 @@ handle_remote_unkline(struct Client *source_p, const char *user, const char *hos
 {
        struct ConfItem *aconf;
 
-       if(!find_shared_conf(source_p->username, source_p->host,
-                            source_p->servptr->name, SHARED_UNKLINE))
-               return;
-
        aconf = find_exact_conf_by_address(host, CONF_KILL, user);
        if(aconf == NULL)
        {
@@ -694,15 +711,12 @@ already_placed_kline(struct Client *source_p, const char *luser, const char *lho
        if(aconf == NULL && ConfigFileEntry.non_redundant_klines)
        {
                bits = 0;
-               if((t = parse_netmask(lhost, &iphost, &bits)) != HM_HOST)
-               {
-                       if(t == HM_IPV6)
-                               t = AF_INET6;
-                       else
-                               t = AF_INET;
-
-                       piphost = &iphost;
-               }
+               t = parse_netmask_strict(lhost, &iphost, &bits);
+               piphost = &iphost;
+               if (t == HM_IPV4)
+                       t = AF_INET;
+               else if (t == HM_IPV6)
+                       t = AF_INET6;
                else
                        piphost = NULL;