class PurgeIP(DenyFileUtilBase): def __init__(self, prefs, purgeip_list): deny_file = prefs.get('HOSTS_DENY') DenyFileUtilBase.__init__(self, deny_file, "purgeip") work_dir = prefs.get('WORK_DIR') self.purge_counter = PurgeCounter(prefs) info("purging listed IP addresses.",) self.backup() purged_hosts = purgeip_list num_purged = len(purged_hosts) if num_purged > 0: self.replace() abusive_hosts = AbusiveHosts(prefs) abusive_hosts.purge_hosts(purged_hosts) abusive_hosts.save_abusive_hosts() self.purge_counter.increment(purged_hosts) else: self.remove_temp() info("num entries purged: %d", num_purged) plugin_purge = prefs.get('PLUGIN_PURGE') if plugin_purge: plugin.execute(plugin_purge, purged_hosts)
def __init__(self, prefs, purgeip_list): deny_file = prefs.get('HOSTS_DENY') DenyFileUtilBase.__init__(self, deny_file, "purgeip") work_dir = prefs.get('WORK_DIR') self.purge_counter = PurgeCounter(prefs) info("purging listed IP addresses.",) self.backup() purged_hosts = purgeip_list num_purged = len(purged_hosts) if num_purged > 0: self.replace() abusive_hosts = AbusiveHosts(prefs) abusive_hosts.purge_hosts(purged_hosts) abusive_hosts.save_abusive_hosts() self.purge_counter.increment(purged_hosts) else: self.remove_temp() info("num entries purged: %d", num_purged) plugin_purge = prefs.get('PLUGIN_PURGE') if plugin_purge: plugin.execute(plugin_purge, purged_hosts)
def __init__(self, prefs, cutoff): deny_file = prefs.get('HOSTS_DENY') DenyFileUtilBase.__init__(self, deny_file, "purge") work_dir = prefs.get('WORK_DIR') self.purge_threshold = prefs['PURGE_THRESHOLD'] self.purge_counter = PurgeCounter(prefs) self.cutoff = long(time.time()) - cutoff debug("relative cutoff: %ld (seconds)", cutoff) debug("absolute cutoff: %ld (epoch)", self.cutoff) info("purging entries older than: %s", time.asctime(time.localtime(self.cutoff))) self.backup() purged_hosts = self.create_temp(self.get_data()) num_purged = len(purged_hosts) if num_purged > 0: self.replace() abusive_hosts = AbusiveHosts(prefs) abusive_hosts.purge_hosts(purged_hosts) abusive_hosts.save_abusive_hosts() self.purge_counter.increment(purged_hosts) else: self.remove_temp() info("num entries purged: %d", num_purged) plugin_purge = prefs.get('PLUGIN_PURGE') if plugin_purge: plugin.execute(plugin_purge, purged_hosts)
class Purge(DenyFileUtilBase): def __init__(self, prefs, cutoff): deny_file = prefs.get('HOSTS_DENY') DenyFileUtilBase.__init__(self, deny_file, "purge") work_dir = prefs.get('WORK_DIR') self.purge_threshold = prefs['PURGE_THRESHOLD'] self.purge_counter = PurgeCounter(prefs) self.cutoff = long(time.time()) - cutoff debug("relative cutoff: %ld (seconds)", cutoff) debug("absolute cutoff: %ld (epoch)", self.cutoff) info("purging entries older than: %s", time.asctime(time.localtime(self.cutoff))) self.backup() purged_hosts = self.create_temp(self.get_data()) num_purged = len(purged_hosts) if num_purged > 0: self.replace() abusive_hosts = AbusiveHosts(prefs) abusive_hosts.purge_hosts(purged_hosts) abusive_hosts.save_abusive_hosts() self.purge_counter.increment(purged_hosts) else: self.remove_temp() info("num entries purged: %d", num_purged) plugin_purge = prefs.get('PLUGIN_PURGE') if plugin_purge: plugin.execute(plugin_purge, purged_hosts) def create_temp(self, data): purged_hosts = [] banned = self.purge_counter.get_banned_for_life() try: fp = open(self.temp_file, "w") os.chmod(self.temp_file, 0644) offset = 0 num_lines = len(data) while offset < num_lines: line = data[offset] offset += 1 if not line.startswith(DENY_DELIMITER): fp.write(line) continue else: if offset == num_lines: warn("DenyHosts comment line at end of file") fp.write(line) continue timestamp = None try: rest = line.lstrip(DENY_DELIMITER) timestamp, host_verify = rest.split(ENTRY_DELIMITER) tm = time.strptime(timestamp) except Exception, e: warn("Parse error -- Ignorning timestamp: %s for: %s", timestamp, line) warn("exception: %s", str(e)) # ignoring bad time string fp.write(line) continue epoch = long(time.mktime(tm)) #print entry, epoch, self.cutoff if self.cutoff > epoch: # this entry should be purged entry = data[offset] if host_verify != entry: warn("%s purge verification failed: %s vs. %s", self.deny_file, host_verify.rstrip(), entry.rstrip()) fp.write(line) continue host = parse_host(entry) if host and host not in banned: # purge purged_hosts.append(host) # increment offset past purged line offset += 1 continue else: fp.write(line) continue fp.close() except Exception, e: raise e