From 940142b2dc3eba8912d6a8397fe57ffa45904fa8 Mon Sep 17 00:00:00 2001 From: Santiago Torres Date: Tue, 28 Jan 2014 22:46:10 -0500 Subject: [PATCH] Prefix property handling Updated the module so it prepends the prefix property by prepending it to the filenames before signing the metadata on the write method. --- tuf/devtools.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/tuf/devtools.py b/tuf/devtools.py index 600ddce7..0ba9da33 100644 --- a/tuf/devtools.py +++ b/tuf/devtools.py @@ -159,7 +159,8 @@ def __init__(self, tuf.formats.PATH_SCHEMA.check_match(repository_directory) tuf.formats.PATH_SCHEMA.check_match(metadata_directory) tuf.formats.PATH_SCHEMA.check_match(targets_directory) - + tuf.formats.PATH_SCHEMA.check_match(file_prefix) + self._repository_directory = repository_directory self._metadata_directory = metadata_directory self._targets_directory = targets_directory @@ -167,7 +168,7 @@ def __init__(self, # Set the top-level role objects. self.targets = Targets(self._targets_directory, 'targets') - + self.prefix = file_prefix #TODO: continue where we left off. def write(self, write_partial=False, consistent_snapshots=False): @@ -230,7 +231,7 @@ def write(self, write_partial=False, consistent_snapshots=False): _generate_and_write_metadata(delegated_rolename, delegated_filename, write_partial, self._targets_directory, self._metadata_directory, - consistent_snapshots) + consistent_snapshots,prefix=self.prefix) # Generate the 'targets.txt' metadata file. @@ -240,7 +241,7 @@ def write(self, write_partial=False, consistent_snapshots=False): _generate_and_write_metadata('targets', targets_filename, write_partial, self._targets_directory, self._metadata_directory, - consistent_snapshots) + consistent_snapshots,prefix=self.prefix) # Delete the metadata of roles no longer in 'tuf.roledb'. Obsolete roles @@ -447,7 +448,8 @@ def _print_status(rolename, signable): def _generate_and_write_metadata(rolename, metadata_filename, write_partial, targets_directory, metadata_directory, - consistent_snapshots, filenames=None): + consistent_snapshots, filenames=None, + prefix=''): """ Non-public function that can generate and write the metadata of the specified top-level 'rolename'. It also increments version numbers if: @@ -459,20 +461,27 @@ def _generate_and_write_metadata(rolename, metadata_filename, write_partial, """ metadata = None - print("we do get here") # Retrieve the roleinfo of 'rolename' to extract the needed metadata # attributes, such as version number, expiration, etc. roleinfo = tuf.roledb.get_roleinfo(rolename) #release_compressions = tuf.roledb.get_roleinfo('release')['compressions'] - metadata = generate_targets_metadata(targets_directory, roleinfo['paths'], roleinfo['version'], roleinfo['expires'], roleinfo['delegations'], - consistent_snapshots) + consistent_snapshots) + + # preprend the prefix to the project's filepath to avoid signature errors + # in upstream + for element in metadata['targets'].keys(): + metadata['targets'][prefix+element] = metadata['targets'][element] + if prefix != '': + del(metadata['targets'][element]) + signable = sign_metadata(metadata, roleinfo['signing_keyids'], metadata_filename) + # Check if the version number of 'rolename' may be automatically incremented, # depending on whether if partial metadata is loaded or if the metadata is # written with write() / write_partial().