X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fban.c;h=229b0de1fd637232322e5a7c9dec8885a2d2b63c;hb=f437c88e9885c332a11fce2babc53c22dfd6e86e;hp=75f45b28ba412cd799574edbefa4bbf74e84eff1;hpb=b3e60bf49c750f3b710342e32b8d470ec3209383;p=umurmur.git diff --git a/src/ban.c b/src/ban.c index 75f45b2..229b0de 100644 --- a/src/ban.c +++ b/src/ban.c @@ -142,24 +142,23 @@ bool_t Ban_isBanned(client_t *client) } -bool_t Ban_isBannedAddr(in_addr_t *addr) +bool_t Ban_isBannedAddr(struct sockaddr_storage *address) { struct dlist *itr; ban_t *ban; - int mask; in_addr_t tempaddr1, tempaddr2; list_iterate(itr, &banlist) { ban = list_get_entry(itr, ban_t, node); - mask = ban->mask - 96; - if (mask < 32) { /* XXX - only ipv4 support */ - memcpy(&tempaddr1, addr, sizeof(in_addr_t)); - memcpy(&tempaddr2, &ban->address, sizeof(in_addr_t)); - tempaddr1 &= (2 ^ mask) - 1; - tempaddr2 &= (2 ^ mask) - 1; + + if(ban->mask == sizeof(in_addr_t)) { + if(memcmp(ban->address, &((struct sockaddr_in *)address)->sin_addr, ban->mask) == 0) + return true; + } + else { + if(memcmp(ban->address, &((struct sockaddr_in6 *)address)->sin6_addr, ban->mask) == 0) + return true; } - if (memcmp(&tempaddr1, &tempaddr2, sizeof(in_addr_t)) == 0) - return true; } return false; }