BAN_STATUS IPBanner::CalculateBanStatus(in_addr ip_address) { Guard lguard(listBusy); list<IPBan>::iterator itr; list<IPBan>::iterator itr2 = banList.begin(); for(; itr2 != banList.end();) { itr = itr2; ++itr2; if( ParseCIDRBan(ip_address.s_addr, itr->Mask, itr->Bytes) ) { // ban hit if( itr->Expire == 0 ) return BAN_STATUS_PERMANENT_BAN; if( (uint32)UNIXTIME >= itr->Expire ) { sLogonSQL->Execute("DELETE FROM ipbans WHERE expire = %u AND ip = \"%s\"", itr->Expire, sLogonSQL->EscapeString(itr->db_ip).c_str()); banList.erase(itr); } else { return BAN_STATUS_TIME_LEFT_ON_BAN; } } } return BAN_STATUS_NOT_BANNED; }
bool IsServerAllowedMod(unsigned int IP) { m_allowedIpLock.Acquire(); for(vector<AllowedIP>::iterator itr = m_allowedModIps.begin(); itr != m_allowedModIps.end(); ++itr) { if( ParseCIDRBan(IP, itr->IP, itr->Bytes) ) { m_allowedIpLock.Release(); return true; } } m_allowedIpLock.Release(); return false; }