diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-06 16:51:45 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-08-06 16:51:45 +0000 |
commit | d9b4390dbc7af872a143eacf35dde3b0db438119 (patch) | |
tree | b8f894b31545b3af5c9f4b195c46f133d9769555 /src/socket.cpp | |
parent | 935b0f4e0fd0f9ddc1f8d045f690b0864a47e82b (diff) |
Add <link:allowmask>
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@4735 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/socket.cpp')
-rw-r--r-- | src/socket.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/socket.cpp b/src/socket.cpp index 993b7e90b..b45322c3d 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -45,6 +45,10 @@ bool MatchCIDRBits(unsigned char* address, unsigned char* mask, unsigned int mas unsigned int modulus = mask_bits % 8; /* Number of whole bytes in the mask */ unsigned int divisor = mask_bits / 8; /* Remaining bits in the mask after whole bytes are dealt with */ + /* We shouldnt match anything, /0 is always valid */ + if (!mask_bits) + return true; + /* First compare the whole bytes, if they dont match, return false */ if (memcmp(address, mask, divisor)) return false; @@ -97,8 +101,8 @@ bool MatchCIDR(const char* address, const char* cidr_mask) memcpy(&addr_raw, &address_in6.s6_addr, 16); memcpy(&mask_raw, &mask_in6.s6_addr, 16); - if (mask > 128) - mask = 128; + if (bits > 128) + bits = 128; } else { @@ -115,8 +119,8 @@ bool MatchCIDR(const char* address, const char* cidr_mask) memcpy(&addr_raw, &address_in4.s_addr, 4); memcpy(&mask_raw, &mask_in4.s_addr, 4); - if (mask > 32) - mask = 32; + if (bits > 32) + bits = 32; } else { |