]> jfr.im git - solanum.git/blobdiff - ircd/match.c
reject: Remember and send reasons for rejections
[solanum.git] / ircd / match.c
index 66ffe2364db64be42c3b691d9091346b7b6a246d..b38927e23a7939f6339ba41638f0aae68a58c9a2 100644 (file)
@@ -313,7 +313,7 @@ int comp_with_mask(void *addr, void *dest, unsigned int mask)
        if (memcmp(addr, dest, mask / 8) == 0)
        {
                int n = mask / 8;
-               int m = ((-1) << (8 - (mask % 8)));
+               unsigned char m = (0xFF << (8 - (mask % 8)));
                if (mask % 8 == 0 || (((unsigned char *) addr)[n] & m) == (((unsigned char *) dest)[n] & m))
                {
                        return (1);
@@ -332,14 +332,12 @@ int comp_with_mask_sock(struct sockaddr *addr, struct sockaddr *dest, unsigned i
                iaddr = &((struct sockaddr_in *)(void *)addr)->sin_addr;
                idest = &((struct sockaddr_in *)(void *)dest)->sin_addr;
        }
-#ifdef RB_IPV6
        else
        {
                iaddr = &((struct sockaddr_in6 *)(void *)addr)->sin6_addr;
                idest = &((struct sockaddr_in6 *)(void *)dest)->sin6_addr;
 
        }
-#endif
 
        return (comp_with_mask(iaddr, idest, mask));
 }
@@ -358,8 +356,8 @@ int match_ips(const char *s1, const char *s2)
        void *ipptr, *maskptr;
        int cidrlen, aftype;
 
-       strcpy(mask, s1);
-       strcpy(address, s2);
+       rb_strlcpy(mask, s1, sizeof(mask));
+       rb_strlcpy(address, s2, sizeof(address));
 
        len = strrchr(mask, '/');
        if (len == NULL)
@@ -371,7 +369,6 @@ int match_ips(const char *s1, const char *s2)
        if (cidrlen <= 0)
                return 0;
 
-#ifdef RB_IPV6
        if (strchr(mask, ':') && strchr(address, ':'))
        {
                if (cidrlen > 128)
@@ -381,9 +378,7 @@ int match_ips(const char *s1, const char *s2)
                ipptr = &((struct sockaddr_in6 *)&ipaddr)->sin6_addr;
                maskptr = &((struct sockaddr_in6 *)&maskaddr)->sin6_addr;
        }
-       else
-#endif
-       if (!strchr(mask, ':') && !strchr(address, ':'))
+       else if (!strchr(mask, ':') && !strchr(address, ':'))
        {
                if (cidrlen > 32)
                        return 0;
@@ -422,8 +417,8 @@ int match_cidr(const char *s1, const char *s2)
        void *ipptr, *maskptr;
        int cidrlen, aftype;
 
-       strcpy(mask, s1);
-       strcpy(address, s2);
+       rb_strlcpy(mask, s1, sizeof(mask));
+       rb_strlcpy(address, s2, sizeof(address));
 
        ipmask = strrchr(mask, '@');
        if (ipmask == NULL)
@@ -447,7 +442,6 @@ int match_cidr(const char *s1, const char *s2)
        if (cidrlen <= 0)
                return 0;
 
-#ifdef RB_IPV6
        if (strchr(ip, ':') && strchr(ipmask, ':'))
        {
                if (cidrlen > 128)
@@ -457,9 +451,7 @@ int match_cidr(const char *s1, const char *s2)
                ipptr = &((struct sockaddr_in6 *)&ipaddr)->sin6_addr;
                maskptr = &((struct sockaddr_in6 *)&maskaddr)->sin6_addr;
        }
-       else
-#endif
-       if (!strchr(ip, ':') && !strchr(ipmask, ':'))
+       else if (!strchr(ip, ':') && !strchr(ipmask, ':'))
        {
                if (cidrlen > 32)
                        return 0;
@@ -670,7 +662,7 @@ const unsigned char irctoupper_tab[] = {
  * NOTE: RFC 1459 sez: anything but a ^G, comma, or space is allowed
  * for channel names
  */
-const unsigned int CharAttrs[] = {
+unsigned int CharAttrs[] = {
 /* 0  */ CNTRL_C,
 /* 1  */ CNTRL_C | CHAN_C | NONEOS_C,
 /* 2  */ CNTRL_C | CHAN_C | FCHAN_C | NONEOS_C,