X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fban.c;h=47f02edab1c1d3ae3a9e277918499b67b41cb415;hb=3c918a16e5959c8ea47600ced42fba0e15b39e11;hp=4ff47c84232bc870b7d143f588c344d388ff1c95;hpb=230ab44eae2e9379a093078b028923b7477f4425;p=umurmur.git diff --git a/src/ban.c b/src/ban.c index 4ff47c8..47f02ed 100644 --- a/src/ban.c +++ b/src/ban.c @@ -90,8 +90,12 @@ void Ban_UserBan(client_t *client, char *reason) SSLi_hash2hex(ban->hash, hexhash); + char *clientAddressString = Util_clientAddressToString(client); + Log_info_client(client, "User kickbanned. Reason: '%s' Hash: %s IP: %s Banned for: %d seconds", - ban->reason, hexhash, Util_clientAddressToString(client), ban->duration); + ban->reason, hexhash, clientAddressString, ban->duration); + + free(clientAddressString); } @@ -103,10 +107,13 @@ void Ban_pruneBanned() list_iterate(itr, &banlist) { ban = list_get_entry(itr, ban_t, node); #ifdef DEBUG + char hexhash[41]; SSLi_hash2hex(ban->hash, hexhash); + char *addressString = Util_addressToString(&ban->address); Log_debug("BL: User %s Reason: '%s' Hash: %s IP: %s Time left: %d", - ban->name, ban->reason, hexhash, Util_addressToString(&ban->address)), + ban->name, ban->reason, hexhash, addressString, ban->time + ban->duration - time(NULL)); + free(addressString); #endif /* Duration of 0 = forever */ if (ban->duration != 0 && ban->time + ban->duration - time(NULL) <= 0) { @@ -144,7 +151,8 @@ bool_t Ban_isBannedAddr(struct sockaddr_storage *address) ban = list_get_entry(itr, ban_t, node); if (ban->address.ss_family == address->ss_family) { if (address->ss_family == AF_INET) { - uint32_t a1, a2, mask = 2 ^ ban->mask; + uint32_t a1, a2, mask; + mask = (ban->mask == 32) ? UINT32_MAX : (1u << ban->mask) - 1; a1 = (uint32_t)((struct sockaddr_in *)&ban->address)->sin_addr.s_addr & mask; a2 = (uint32_t)((struct sockaddr_in *)address)->sin_addr.s_addr & mask; if (a1 == a2) @@ -301,7 +309,9 @@ static void Ban_saveBanFile(void) ban = list_get_entry(itr, ban_t, node); SSLi_hash2hex(ban->hash, hexhash); - fprintf(file, "%s,%s,%d,%ld,%d,%s,%s\n", hexhash, Util_addressToString(&ban->address),ban->mask, (long int)ban->time, ban->duration, ban->name, ban->reason); + char *addressString = Util_addressToString(&ban->address); + fprintf(file, "%s,%s,%d,%ld,%d,%s,%s\n", hexhash, addressString,ban->mask, (long int)ban->time, ban->duration, ban->name, ban->reason); + free(addressString); } fclose(file); banlist_changed = false;