Skip to content

Commit ff5afe4

Browse files
authored
Merge pull request #1049 from sechkova/issue-1046
Load full target file info for delegated targets metadata
2 parents 5d40ffa + 2553dff commit ff5afe4

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

tests/test_repository_tool.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2073,6 +2073,22 @@ def test_load_repository(self):
20732073
self.assertTrue('file2.txt' in repository.targets.target_files)
20742074
self.assertTrue('file3.txt' in repository.targets('role1').target_files)
20752075

2076+
# Test if targets file info is loaded correctly: read the JSON metadata
2077+
# files separately and then compare with the loaded repository data.
2078+
targets_path = os.path.join(metadata_directory, 'targets.json')
2079+
role1_path = os.path.join(metadata_directory, 'role1.json')
2080+
2081+
targets_object = securesystemslib.util.load_json_file(targets_path)
2082+
role1_object = securesystemslib.util.load_json_file(role1_path)
2083+
2084+
targets_fileinfo = targets_object['signed']['targets']
2085+
role1_fileinfo = role1_object['signed']['targets']
2086+
2087+
repository = repo_tool.load_repository(repository_directory)
2088+
2089+
self.assertEqual(targets_fileinfo, repository.targets.target_files)
2090+
self.assertEqual(role1_fileinfo, repository.targets('role1').target_files)
2091+
20762092
# Test for a non-default repository name.
20772093
repository = repo_tool.load_repository(repository_directory, 'my-repo')
20782094

tuf/repository_lib.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,8 +614,7 @@ def _load_top_level_metadata(repository, top_level_filenames, repository_name):
614614

615615
# Update 'targets.json' in 'tuf.roledb.py'
616616
roleinfo = tuf.roledb.get_roleinfo('targets', repository_name)
617-
for filepath, fileinfo in six.iteritems(targets_metadata['targets']):
618-
roleinfo['paths'].update({filepath: fileinfo})
617+
roleinfo['paths'] = targets_metadata['targets']
619618
roleinfo['version'] = targets_metadata['version']
620619
roleinfo['expires'] = targets_metadata['expires']
621620
roleinfo['delegations'] = targets_metadata['delegations']

tuf/repository_tool.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3161,16 +3161,13 @@ def load_repository(repository_directory, repository_name='default',
31613161
roleinfo = {'name': metadata_name,
31623162
'signing_keyids': [],
31633163
'signatures': [],
3164-
'partial_loaded': False,
3165-
'paths': {},
3164+
'partial_loaded': False
31663165
}
31673166

31683167
roleinfo['signatures'].extend(signable['signatures'])
31693168
roleinfo['version'] = metadata_object['version']
31703169
roleinfo['expires'] = metadata_object['expires']
3171-
3172-
for filepath, fileinfo in six.iteritems(metadata_object['targets']):
3173-
roleinfo['paths'].update({filepath: fileinfo.get('custom', {})})
3170+
roleinfo['paths'] = metadata_object['targets']
31743171
roleinfo['delegations'] = metadata_object['delegations']
31753172

31763173
tuf.roledb.add_role(metadata_name, roleinfo, repository_name)

0 commit comments

Comments
 (0)