X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fban.c;h=3c7c4ffa656ea26c2ab285192b03f9466d4f08d5;hb=896bf64f85e767ce90bf8370f3731fa835e07f31;hp=75f45b28ba412cd799574edbefa4bbf74e84eff1;hpb=a0e46b6337ab6736bb391703338d2ad3b5ee514f;p=umurmur.git diff --git a/src/ban.c b/src/ban.c index 75f45b2..3c7c4ff 100644 --- a/src/ban.c +++ b/src/ban.c @@ -36,6 +36,7 @@ #include "ban.h" #include "conf.h" #include "ssl.h" +#include "util.h" static void Ban_saveBanFile(void); static void Ban_readBanFile(void); @@ -95,7 +96,7 @@ void Ban_UserBan(client_t *client, char *reason) SSLi_hash2hex(ban->hash, hexhash); Log_info_client(client, "User kickbanned. Reason: '%s' Hash: %s IP: %s Banned for: %d seconds", - ban->reason, hexhash, client->addressString, ban->duration); + ban->reason, hexhash, Util_clientAddressToString(client), ban->duration); } @@ -142,24 +143,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; }