Skip to content

Commit a9d7053

Browse files
awwadLukas Puehringer
authored andcommitted
Use TUF exceptions instead of SSL exceptions where appropriate
Removal of securesystemslib exceptions that are TUF-specific occurs in securesystemslib PR #165 secure-systems-lab/securesystemslib#165 This commit adapts to those changes. Exceptions that are specific to TUF should be in TUF and not in securesystemslib. This commit uses those already-existing TUF exceptions instead of pointing to securesystemslib exceptions that will be removed. For example, securesystemslib has no notion of repositories, so it's ridiculous to have a RepositoryError in securesystemslib and ridiculous for TUF to use securesystemslib.exceptions.RepositoryError. Signed-off-by: Sebastien Awwad <[email protected]>
1 parent c4be348 commit a9d7053

13 files changed

+80
-81
lines changed

tests/test_developer_tool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def test_create_new_project(self):
170170
developer_tool.create_new_project(project_name, metadata_directory,
171171
location_in_repository, targets_directory, project_key)
172172

173-
except (OSError, securesystemslib.exceptions.RepositoryError):
173+
except (OSError, tuf.exceptions.RepositoryError):
174174
pass
175175

176176
developer_tool.METADATA_DIRECTORY_NAME = valid_metadata_directory_name

tests/test_keydb.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,12 @@ def test_clear_keydb(self):
132132
keyid = KEYS[0]['keyid']
133133
repository_name = 'example_repository'
134134
tuf.keydb.create_keydb(repository_name)
135-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid, repository_name)
135+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid, repository_name)
136136
tuf.keydb.add_key(rsakey, keyid, repository_name)
137137
self.assertEqual(rsakey, tuf.keydb.get_key(keyid, repository_name))
138138

139139
tuf.keydb.clear_keydb(repository_name)
140-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid, repository_name)
140+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid, repository_name)
141141

142142
# Remove 'repository_name' from the key database to revert it back to its
143143
# original, default state (i.e., only the 'default' repository exists).
@@ -169,7 +169,7 @@ def test_get_key(self):
169169

170170
# Test condition using a 'keyid' that has not been added yet.
171171
keyid3 = KEYS[2]['keyid']
172-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
172+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
173173

174174
# Test condition for a key added to a non-default repository.
175175
repository_name = 'example_repository'
@@ -183,7 +183,7 @@ def test_get_key(self):
183183

184184
# Verify that 'rsakey3' is added to the expected repository name.
185185
# If not supplied, the 'default' repository name is searched.
186-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
186+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
187187
self.assertEqual(rsakey3, tuf.keydb.get_key(keyid3, repository_name))
188188

189189
# Remove the 'example_repository' so that other test functions have access
@@ -231,15 +231,15 @@ def test_add_key(self):
231231
# Test conditions using keyids that have already been added.
232232
tuf.keydb.add_key(rsakey, keyid)
233233
tuf.keydb.add_key(rsakey2, keyid2)
234-
self.assertRaises(securesystemslib.exceptions.KeyAlreadyExistsError, tuf.keydb.add_key, rsakey)
235-
self.assertRaises(securesystemslib.exceptions.KeyAlreadyExistsError, tuf.keydb.add_key, rsakey2)
234+
self.assertRaises(tuf.exceptions.KeyAlreadyExistsError, tuf.keydb.add_key, rsakey)
235+
self.assertRaises(tuf.exceptions.KeyAlreadyExistsError, tuf.keydb.add_key, rsakey2)
236236

237237
# Test condition for key added to the keydb of a non-default repository.
238238
repository_name = 'example_repository'
239239
tuf.keydb.create_keydb(repository_name)
240-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3, repository_name)
240+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3, repository_name)
241241
tuf.keydb.add_key(rsakey3, keyid3, repository_name)
242-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
242+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
243243
self.assertEqual(rsakey3, tuf.keydb.get_key(keyid3, repository_name))
244244

245245
# Test condition for key added to the keydb of a non-existent repository.
@@ -268,22 +268,22 @@ def test_remove_key(self):
268268
self.assertEqual(None, tuf.keydb.remove_key(keyid2))
269269

270270
# Ensure the keys were actually removed.
271-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid)
272-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid2)
271+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid)
272+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid2)
273273

274274
# Test for 'keyid' not in keydb.
275-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.remove_key, keyid)
275+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.remove_key, keyid)
276276

277277
# Test condition for unknown key argument.
278-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.remove_key, '1')
278+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.remove_key, '1')
279279

280280
# Test condition for removal of keys from a non-default repository.
281281
repository_name = 'example_repository'
282282
tuf.keydb.create_keydb(repository_name)
283283
tuf.keydb.add_key(rsakey, keyid, repository_name)
284284
self.assertRaises(securesystemslib.exceptions.InvalidNameError, tuf.keydb.remove_key, keyid, 'non-existent')
285285
tuf.keydb.remove_key(keyid, repository_name)
286-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.remove_key, keyid, repository_name)
286+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.remove_key, keyid, repository_name)
287287

288288
# Reset the keydb so that subsequent tests have access to the original,
289289
# default keydb.
@@ -390,8 +390,8 @@ def test_create_keydb_from_root_metadata(self):
390390
# Ensure only 'keyid2' was added to the keydb database. 'keyid' and
391391
# 'keyid3' should not be stored.
392392
self.assertEqual(rsakey2, tuf.keydb.get_key(keyid2))
393-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid)
394-
self.assertRaises(securesystemslib.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
393+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid)
394+
self.assertRaises(tuf.exceptions.UnknownKeyError, tuf.keydb.get_key, keyid3)
395395
rsakey3['keytype'] = 'rsa'
396396

397397

tests/test_mix_and_match_attack.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ def test_with_tuf(self):
240240
self.repository_updater.targets_of_role('role1')
241241

242242
# Verify that the specific
243-
# 'securesystemslib.exceptions.BadVersionNumberError' exception is raised by
243+
# 'tuf.exceptions.BadVersionNumberError' exception is raised by
244244
# each mirror.
245245
except tuf.exceptions.NoWorkingMirrorError as exception:
246246
for mirror_url, mirror_error in six.iteritems(exception.mirror_errors):
@@ -249,8 +249,8 @@ def test_with_tuf(self):
249249

250250
# Verify that 'role1.json' is the culprit.
251251
self.assertEqual(url_file.replace('\\', '/'), mirror_url)
252-
self.assertTrue(isinstance(mirror_error,
253-
securesystemslib.exceptions.BadVersionNumberError))
252+
self.assertTrue(isinstance(
253+
mirror_error, tuf.exceptions.BadVersionNumberError))
254254

255255
else:
256256
self.fail('TUF did not prevent a mix-and-match attack.')

tests/test_repository_lib.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,7 @@ def test_create_tuf_client_directory(self):
866866

867867

868868
# Test invalid argument (i.e., client directory already exists.)
869-
self.assertRaises(securesystemslib.exceptions.RepositoryError,
869+
self.assertRaises(tuf.exceptions.RepositoryError,
870870
repo_lib.create_tuf_client_directory, repository_directory,
871871
client_directory)
872872

@@ -882,7 +882,7 @@ def test_create_tuf_client_directory(self):
882882
# Creation of the '/' directory is forbidden on all supported OSs. The '/'
883883
# argument to create_tuf_client_directory should cause it to re-raise a
884884
# non-errno.EEXIST exception.
885-
self.assertRaises((OSError, securesystemslib.exceptions.RepositoryError),
885+
self.assertRaises((OSError, tuf.exceptions.RepositoryError),
886886
repo_lib.create_tuf_client_directory, repository_directory, '/')
887887

888888
# Restore the metadata directory name in repo_lib.
@@ -1035,7 +1035,7 @@ def test__load_top_level_metadata(self):
10351035

10361036
# Remove the required Root file and verify that an exception is raised.
10371037
os.remove(os.path.join(metadata_directory, 'root.json'))
1038-
self.assertRaises(securesystemslib.exceptions.RepositoryError,
1038+
self.assertRaises(tuf.exceptions.RepositoryError,
10391039
repo_lib._load_top_level_metadata, repository, filenames,
10401040
repository_name)
10411041

tests/test_repository_tool.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def test_writeall(self):
250250
repository.status()
251251

252252
# Verify that status() does not raise
253-
# 'securesystemslib.exceptions.InsufficientKeysError' if a top-level role
253+
# 'tuf.exceptions.InsufficientKeysError' if a top-level role
254254
# does not contain a threshold of keys.
255255
targets_roleinfo = tuf.roledb.get_roleinfo('targets', repository_name)
256256
old_threshold = targets_roleinfo['threshold']
@@ -266,7 +266,7 @@ def test_writeall(self):
266266
repository_name=repository_name)
267267

268268
# Verify that status() does not raise
269-
# 'securesystemslib.exceptions.InsufficientKeysError' if a delegated role
269+
# 'tuf.exceptions.InsufficientKeysError' if a delegated role
270270
# does not contain a threshold of keys.
271271
role1_roleinfo = tuf.roledb.get_roleinfo('role1', repository_name)
272272
old_role1_threshold = role1_roleinfo['threshold']
@@ -971,7 +971,7 @@ def test_call(self):
971971
self.assertTrue(isinstance(targets_object('role1'), repo_tool.Targets))
972972

973973
# Test invalid (i.e., non-delegated) rolename argument.
974-
self.assertRaises(securesystemslib.exceptions.UnknownRoleError, targets_object, 'unknown_role')
974+
self.assertRaises(tuf.exceptions.UnknownRoleError, targets_object, 'unknown_role')
975975

976976
# Test improperly formatted argument.
977977
self.assertRaises(securesystemslib.exceptions.FormatError, targets_object, 1)
@@ -1741,7 +1741,7 @@ def test_load_repository(self):
17411741
root_filepath = os.path.join(repository_directory,
17421742
repo_tool.METADATA_STAGED_DIRECTORY_NAME, 'root.json')
17431743
os.remove(root_filepath)
1744-
self.assertRaises(securesystemslib.exceptions.RepositoryError,
1744+
self.assertRaises(tuf.exceptions.RepositoryError,
17451745
repo_tool.load_repository, repository_directory)
17461746

17471747

tests/test_updater.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -719,23 +719,23 @@ def test_3__update_metadata(self):
719719

720720
except tuf.exceptions.NoWorkingMirrorError as e:
721721
for mirror_error in six.itervalues(e.mirror_errors):
722-
assert isinstance(mirror_error, securesystemslib.exceptions.BadVersionNumberError)
722+
assert isinstance(mirror_error, tuf.exceptions.BadVersionNumberError)
723723

724724
else:
725725
self.fail(
726726
'Expected a NoWorkingMirrorError composed of BadVersionNumberErrors')
727727

728728
# Verify that the specific exception raised is correct for the previous
729729
# case. The version number is checked, so the specific error in
730-
# this case should be 'securesystemslib.exceptions.BadVersionNumberError'.
730+
# this case should be 'tuf.exceptions.BadVersionNumberError'.
731731
try:
732732
self.repository_updater._update_metadata('targets',
733733
DEFAULT_TARGETS_FILELENGTH,
734734
88)
735735

736736
except tuf.exceptions.NoWorkingMirrorError as e:
737737
for mirror_error in six.itervalues(e.mirror_errors):
738-
assert isinstance(mirror_error, securesystemslib.exceptions.BadVersionNumberError)
738+
assert isinstance(mirror_error, tuf.exceptions.BadVersionNumberError)
739739

740740
else:
741741
self.fail(

tuf/client/updater.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,7 @@ def _import_delegations(self, parent_role):
963963
key['keyid'] = key_id
964964
tuf.keydb.add_key(key, keyid=None, repository_name=self.repository_name)
965965

966-
except securesystemslib.exceptions.KeyAlreadyExistsError:
966+
except tuf.exceptions.KeyAlreadyExistsError:
967967
pass
968968

969969
except (securesystemslib.exceptions.FormatError, securesystemslib.exceptions.Error):
@@ -1530,7 +1530,7 @@ def _get_metadata_file(self, metadata_role, remote_filename,
15301530
# Verify that the downloaded version matches the version expected by
15311531
# the caller.
15321532
if version_downloaded != expected_version:
1533-
raise securesystemslib.exceptions.BadVersionNumberError('Downloaded'
1533+
raise tuf.exceptions.BadVersionNumberError('Downloaded'
15341534
' version number: ' + repr(version_downloaded) + '. Version'
15351535
' number MUST be: ' + repr(expected_version))
15361536

tuf/developer_tool.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ def status(self):
351351
try:
352352
_check_role_keys(delegated_role, self.repository_name)
353353

354-
except securesystemslib.exceptions.InsufficientKeysError:
354+
except tuf.exceptions.InsufficientKeysError:
355355
insufficient_keys.append(delegated_role)
356356
continue
357357

@@ -380,7 +380,7 @@ def status(self):
380380
try:
381381
_check_role_keys(self.rolename, self.repository_name)
382382

383-
except securesystemslib.exceptions.InsufficientKeysError as e:
383+
except tuf.exceptions.InsufficientKeysError as e:
384384
logger.info(str(e))
385385
return
386386

@@ -944,7 +944,7 @@ def load_project(project_directory, prefix='', new_targets_location=None,
944944
try:
945945
tuf.keydb.add_key(key_object, repository_name=repository_name)
946946

947-
except securesystemslib.exceptions.KeyAlreadyExistsError:
947+
except tuf.exceptions.KeyAlreadyExistsError:
948948
pass
949949

950950
for role in metadata_object['delegations']['roles']:

tuf/keydb.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def create_keydb_from_root_metadata(root_metadata, repository_name='default'):
141141
# Although keyid duplicates should *not* occur (unique dict keys), log a
142142
# warning and continue. Howerver, 'key_dict' may have already been
143143
# adding to the keydb elsewhere.
144-
except securesystemslib.exceptions.KeyAlreadyExistsError as e: # pragma: no cover
144+
except tuf.exceptions.KeyAlreadyExistsError as e: # pragma: no cover
145145
logger.warning(e)
146146
continue
147147

@@ -256,7 +256,7 @@ def add_key(key_dict, keyid=None, repository_name='default'):
256256
257257
securesystemslib.exceptions.Error, if 'keyid' does not match the keyid for 'rsakey_dict'.
258258
259-
securesystemslib.exceptions.KeyAlreadyExistsError, if 'rsakey_dict' is found in the key database.
259+
tuf.exceptions.KeyAlreadyExistsError, if 'rsakey_dict' is found in the key database.
260260
261261
securesystemslib.exceptions.InvalidNameError, if 'repository_name' does not exist in the key
262262
database.
@@ -295,7 +295,7 @@ def add_key(key_dict, keyid=None, repository_name='default'):
295295
# available in the key database before returning.
296296
keyid = key_dict['keyid']
297297
if keyid in _keydb_dict[repository_name]:
298-
raise securesystemslib.exceptions.KeyAlreadyExistsError('Key: ' + keyid)
298+
raise tuf.exceptions.KeyAlreadyExistsError('Key: ' + keyid)
299299

300300
_keydb_dict[repository_name][keyid] = copy.deepcopy(key_dict)
301301

@@ -320,7 +320,7 @@ def get_key(keyid, repository_name='default'):
320320
<Exceptions>
321321
securesystemslib.exceptions.FormatError, if the arguments do not have the correct format.
322322
323-
securesystemslib.exceptions.UnknownKeyError, if 'keyid' is not found in the keydb database.
323+
tuf.exceptions.UnknownKeyError, if 'keyid' is not found in the keydb database.
324324
325325
securesystemslib.exceptions.InvalidNameError, if 'repository_name' does not exist in the key
326326
database.
@@ -351,7 +351,7 @@ def get_key(keyid, repository_name='default'):
351351
return copy.deepcopy(_keydb_dict[repository_name][keyid])
352352

353353
except KeyError:
354-
raise securesystemslib.exceptions.UnknownKeyError('Key: ' + keyid)
354+
raise tuf.exceptions.UnknownKeyError('Key: ' + keyid)
355355

356356

357357

@@ -374,7 +374,7 @@ def remove_key(keyid, repository_name='default'):
374374
<Exceptions>
375375
securesystemslib.exceptions.FormatError, if the arguments do not have the correct format.
376376
377-
securesystemslib.exceptions.UnknownKeyError, if 'keyid' is not found in key database.
377+
tuf.exceptions.UnknownKeyError, if 'keyid' is not found in key database.
378378
379379
securesystemslib.exceptions.InvalidNameError, if 'repository_name' does not exist in the key
380380
database.
@@ -404,7 +404,7 @@ def remove_key(keyid, repository_name='default'):
404404
del _keydb_dict[repository_name][keyid]
405405

406406
else:
407-
raise securesystemslib.exceptions.UnknownKeyError('Key: ' + keyid)
407+
raise tuf.exceptions.UnknownKeyError('Key: ' + keyid)
408408

409409

410410

0 commit comments

Comments
 (0)