update: use KnownApks dates to check system clock on offline machines

KnownApks provides a reliable source of a relatively recent date.
This commit is contained in:
Hans-Christoph Steiner 2017-11-29 11:21:34 +01:00
parent 1219f07d3b
commit d46d9574b4
2 changed files with 21 additions and 14 deletions

View file

@ -40,7 +40,7 @@ import json
import xml.etree.ElementTree as XMLElementTree
from binascii import hexlify
from datetime import datetime
from datetime import datetime, timedelta
from distutils.version import LooseVersion
from queue import Queue
from zipfile import ZipFile
@ -1716,6 +1716,23 @@ def natural_key(s):
return [int(sp) if sp.isdigit() else sp for sp in re.split(r'(\d+)', s)]
def check_system_clock(dt_obj, path):
"""Check if system clock is updated based on provided date
If an APK has files newer than the system time, suggest updating
the system clock. This is useful for offline systems, used for
signing, which do not have another source of clock sync info. It
has to be more than 24 hours newer because ZIP/APK files do not
store timezone info
"""
checkdt = dt_obj - timedelta(1)
if datetime.today() < checkdt:
logging.warning(_('System clock is older than date in {path}!').format(path=path)
+ '\n' + _('Set clock to that time using:') + '\n'
+ 'sudo date -s "' + str(dt_obj) + '"')
class KnownApks:
"""permanent store of existing APKs with the date they were added
@ -1744,6 +1761,7 @@ class KnownApks:
date = datetime.strptime(t[-1], '%Y-%m-%d')
filename = line[0:line.rfind(appid) - 1]
self.apks[filename] = (appid, date)
check_system_clock(date, self.path)
self.changed = False
def writeifchanged(self):