diff --git a/tuf/client/updater.py b/tuf/client/updater.py index dce02f9f6b..7f8f73f8b4 100755 --- a/tuf/client/updater.py +++ b/tuf/client/updater.py @@ -1493,8 +1493,13 @@ def _get_metadata_file(self, metadata_role, remote_filename, # number, the new metadata is safe to parse. try: metadata_spec_version = metadata_signable['signed']['spec_version'] - metadata_spec_major_version = int(metadata_spec_version.split('.')[0]) - code_spec_major_version = int(tuf.SPECIFICATION_VERSION.split('.')[0]) + metadata_spec_version_split = metadata_spec_version.split('.') + metadata_spec_major_version = int(metadata_spec_version_split[0]) + metadata_spec_minor_version = int(metadata_spec_version_split[1]) + + code_spec_version_split = tuf.SPECIFICATION_VERSION.split('.') + code_spec_major_version = int(code_spec_version_split[0]) + code_spec_minor_version = int(code_spec_version_split[1]) if metadata_spec_major_version != code_spec_major_version: raise tuf.exceptions.UnsupportedSpecificationError( @@ -1503,6 +1508,15 @@ def _get_metadata_file(self, metadata_role, remote_filename, repr(code_spec_major_version) + '; however, the obtained ' 'metadata lists version number: ' + str(metadata_spec_version)) + #report to user if minor versions do not match, continue with update + if metadata_spec_minor_version != code_spec_minor_version: + logger.info("Downloaded metadata that specifies a different minor " + + "spec_version. This code has version " + + str(tuf.SPECIFICATION_VERSION) + + " and the metadata lists version number " + + str(metadata_spec_version) + + ". The update will continue as the major versions match.") + except (ValueError, TypeError): raise securesystemslib.exceptions.FormatError('Improperly' ' formatted spec_version, which must be in major.minor.fix format')