From eda695b6cda61a5f1901479b6a0b22d8ba1ed96b Mon Sep 17 00:00:00 2001
From: "Bryn M. Reeves" <bmr@redhat.com>
Date: Wed, 9 Jan 2019 15:20:27 +0000
Subject: [PATCH] bootloader: raise LookupError on unknown BLS keys
When loading a BootEntry from file, if an unknown BLS key is read
a generic KeyError is raised when attempting to access a key in
the MAP_KEY (bls-to-boom key name map) dictionary. This leads to
a fairly cryptic error message:
# boom list -V --debug all
INFO - Could not load BootEntry '/boot/loader/entries/611f38fd887d41dea7eb3403b2730a76-4.15.17-200.fc26.x86_64.conf': 'id'
With --debug=all the cause is a little more obvious:
# boom list --debug all
Traceback (most recent call last):
File "bin/boom", line 7, in <module>
main(sys.argv)
File "/home/breeves/src/git/boom/boom/command.py", line 1951, in main
status = command[1](cmd_args, select, opts, identifier)
File "/home/breeves/src/git/boom/boom/command.py", line 1287, in _list_cmd
opts=opts, sort_keys=cmd_args.sort)
File "/home/breeves/src/git/boom/boom/command.py", line 631, in print_entries
bes = find_entries(selection=selection)
File "/home/breeves/src/git/boom/boom/bootloader.py", line 769, in find_entries
load_entries()
File "/home/breeves/src/git/boom/boom/bootloader.py", line 659, in load_entries
_add_entry(BootEntry(entry_file=entry_path))
File "/home/breeves/src/git/boom/boom/bootloader.py", line 1310, in __init__
return self.__from_file(entry_file, boot_params)
File "/home/breeves/src/git/boom/boom/bootloader.py", line 1229, in __from_file
key = MAP_KEY[_transform_key(bls_key)]
KeyError: 'id'
Instead, raise the exception explicitly if the key is not present,
and set the exception string to a meaningful error:
INFO - Could not load BootEntry '/boot/loader/entries/611f38fd887d41dea7eb3403b2730a76-4.15.17-200.fc26.x86_64.conf': Unknown BLS key 'id'
The more specific KeyError is not used here since it is specific
to dictionary lookup failures.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
(cherry picked from commit 72a67d8beba4c4f36d1c0682a6628b2a823041a4)
Conflicts:
boom/bootloader.py
---
boom/bootloader.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/boom/bootloader.py b/boom/bootloader.py
index bc86cb8..dd2a53a 100644
--- a/boom/bootloader.py
+++ b/boom/bootloader.py
@@ -1067,6 +1067,10 @@ class BootEntry(object):
comment += line if line else ""
else:
bls_key, value = _parse_name_value(line, separator=None)
+ # Convert BLS key name to Boom notation
+ key = _transform_key(bls_key)
+ if key not in MAP_KEY:
+ raise LookupError("Unknown BLS key '%s'" % bls_key)
key = MAP_KEY[_transform_key(bls_key)]
entry_data[key] = value
if comment:
--
1.8.3.1