mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-13 16:14:40 +00:00
Firewall/alias, keep previous content for url alias type on fetch error. closes https://github.com/opnsense/core/issues/2793
This commit is contained in:
parent
a00e646ca2
commit
8d08b67d28
@ -147,8 +147,12 @@ class Alias(object):
|
||||
if raw_address and not raw_address.startswith('//'):
|
||||
for address in self._parse_address(raw_address):
|
||||
yield address
|
||||
else:
|
||||
syslog.syslog(syslog.LOG_ERR, 'error fetching alias url %s [http_code:%s]' % (url, req.status_code))
|
||||
raise IOError('error fetching alias url %s' % (url))
|
||||
except:
|
||||
syslog.syslog(syslog.LOG_ERR, 'error fetching alias url %s' % (url))
|
||||
raise IOError('error fetching alias url %s' % (url))
|
||||
|
||||
def _fetch_geo(self, geoitem):
|
||||
""" fetch geoip addresses, if not downloaded or outdated force an update
|
||||
@ -218,20 +222,30 @@ class Alias(object):
|
||||
"""
|
||||
if not self._resolve_content:
|
||||
if self.expired() or self.changed() or force:
|
||||
with open(self._filename_alias_content, 'w') as f_out:
|
||||
for item in self.items():
|
||||
address_parser = self.get_parser()
|
||||
if address_parser:
|
||||
for address in address_parser(item):
|
||||
if address not in self._resolve_content:
|
||||
# flush new alias content (without dependencies) to disk, so progress can easliy
|
||||
# be followed, large lists of domain names can take quite some resolve time.
|
||||
f_out.write('%s\n' % address)
|
||||
f_out.flush()
|
||||
# preserve addresses
|
||||
self._resolve_content.append(address)
|
||||
# flush md5 hash to disk
|
||||
open(self._filename_alias_hash, 'w').write(self.uniqueid())
|
||||
if os.path.isfile(self._filename_alias_content):
|
||||
undo_content = open(self._filename_alias_content, 'r').read()
|
||||
else:
|
||||
undo_content = ""
|
||||
try:
|
||||
with open(self._filename_alias_content, 'w') as f_out:
|
||||
for item in self.items():
|
||||
address_parser = self.get_parser()
|
||||
if address_parser:
|
||||
for address in address_parser(item):
|
||||
if address not in self._resolve_content:
|
||||
# flush new alias content (without dependencies) to disk, so progress can easliy
|
||||
# be followed, large lists of domain names can take quite some resolve time.
|
||||
f_out.write('%s\n' % address)
|
||||
f_out.flush()
|
||||
# preserve addresses
|
||||
self._resolve_content.append(address)
|
||||
except IOError:
|
||||
# parse issue, keep data as-is, flush previous content to disk
|
||||
with open(self._filename_alias_content, 'w') as f_out:
|
||||
f_out.write(undo_content)
|
||||
self._resolve_content = undo_content.split("\n")
|
||||
# flush md5 hash to disk
|
||||
open(self._filename_alias_hash, 'w').write(self.uniqueid())
|
||||
else:
|
||||
self._resolve_content = open(self._filename_alias_content).read().split()
|
||||
# return the addresses and networks of this alias
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user