Commit Graph

110 Commits

Author SHA1 Message Date
Richard Hughes
a11fefff35 redfish: Don't add the backup BMC device as it shares the same GUIDs
This fixes the problem when the UEFI update depends on a specific BMC
version -- including the backup BMC device means we checking that both
the primary and the backup were above a specific version.

I don't think it's ever useful to show the backup BMC device, so just
don't include it as an enumerated device.

Fixes https://github.com/fwupd/fwupd/issues/4404
2022-03-18 11:03:14 +00:00
Richard Hughes
c4ca026294 Allow devices to build instance IDs more easily
Provide a device instance builder that allows plugins to easily
create multiple instance IDs based on parent attributes.

Also fix a lot of the instance ID orders, so that we add more generic
IDs first, and more specific IDs after.
2022-03-03 09:13:29 +00:00
Mario Limonciello
5bc5462213 trivial: redfish: use the configured prefix to determine if it's an installed test
fixes: #3880
2022-02-28 13:36:49 -06:00
Mario Limonciello
661990ed98 Convert build system to use meson tristate features
tristate features will automatically disable if dependencies marked
as required are missing.

Packagers can manually override using `auto_features`.

Link: https://mesonbuild.com/Build-options.html#features
2022-02-28 08:34:48 -06:00
Richard Hughes
f3a13f89dd Allow specifing the DeviceIntegrity flag from metadata 2022-02-22 19:12:06 +00:00
Richard Hughes
f3d71a18a5 redfish: Be more robust by retrying IPMI transactions
This fixes creating users when the BMC is otherwise busy.
2022-02-01 16:18:28 +00:00
Richard Hughes
fba2fd62f2 redfish: Add error codes not provided in ipmi_msgdefs.h 2022-02-01 16:18:28 +00:00
Richard Hughes
de874c7d8e redfish: Wait some time after creating the initial IPMI user
It would appear that in reality a delay is required for them to sync state.
2022-02-01 16:18:28 +00:00
Richard Hughes
76dcafee1f redfish: Do not use 'unspecified' for the unknown error 2022-02-01 16:18:28 +00:00
Richard Hughes
3917714dd1 redfish: Change an expired password when required 2022-01-19 21:19:01 +00:00
Richard Hughes
ca43733a8c Show why devices are not marked as updatable
At the moment a lot of the failures are only visible when running the
daemon in verbose mode, and the inhibit functionalit provides us a way
to unset FWUPD_DEVICE_FLAG_UPDATABLE from multiple places, as well as
setting the update error for the user to see why.
2022-01-13 12:40:56 +00:00
Richard Hughes
2734f0ab77 redfish: Do not autoload ipmi-si to avoid warning on non-server hardware
This leads to reports of:

    systemd-modules-load[1710]: Failed to insert 'ipmi_si': No such device
    systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
2022-01-10 14:06:34 +00:00
Richard Hughes
2e99055d1e trivial: Add some more annotations for language bindings 2022-01-03 22:46:23 +00:00
Richard Hughes
8e6a3f6bbb Allow devices to opt-in to metadata-provided vendor strings 2021-12-22 15:34:36 +00:00
Mario Limonciello
22057f76cc redfish: Use secure helper to set file permissions when setting password
Instead of installing the conf file as locked down, set permissions when
using it.

This fixes a problem on snap first run:
```
cp: cannot open '/snap/fwupd/x1/etc/fwupd/redfish.conf' for reading: Permission denied
```
2021-12-17 11:05:05 -06:00
Richard Hughes
8fc8539146 trivial: Remove some unused variables 2021-12-10 16:00:07 +00:00
Richard Hughes
58d36dcbe5 Check the value range when parsing the quirk keys
At the moment there isn't an error if you enter something like

    CfiDeviceCmdReadId = 0×12
2021-12-09 13:09:43 +00:00
Richard Hughes
68722ec6e4 redfish: Set SSL_VERIFYHOST=0 to fix OpenBMC auth 2021-11-11 20:47:20 +00:00
Richard Hughes
5a95cf61d8 redfish: Fix crash when specifying a URL without a port 2021-11-11 20:47:20 +00:00
Richard Hughes
e87fc05ab9 Speed up the daemon startup by ~2% by doing dlsym much less
We were calling g_module_symbol() 2703 times, which is actually more
expensive than you'd think.

It also means the plugins are actually what we tell people they are:
A set of vfuncs that get run. The reality before that they were dlsym'd
functions that get called at pretty random times.
2021-11-09 12:02:07 +00:00
Richard Hughes
1a077289bc Speed up daemon startup by 15%
During my fwupd startup fu_plugin_has_custom_flag gets called 21 times
which causes all HWIDs to be enumerated with 346 calls to the quite
expensive fu_context_lookup_quirk_by_id() function.

Move the flag to a private hashset and enumerate the HWIDs only during
startup. There's nothing plugin specific about them anyway...
2021-11-03 07:14:37 +00:00
Richard Hughes
28678235cd Move the fuzzing files into the plugin directories
We only had to pile everything into the src/fuzzing/firmware directory
because honggfuzz could not cope with more than one input path.

This way each plugin is self contained and easy to copy.
Also, install the fuzzing builder objects as this fixes the installed
tests when srcdir does not exist.

Based on a patch by Jan Tojnar <jtojnar@gmail.com>, many thanks.
2021-10-22 15:24:05 +01:00
Richard Hughes
2d00cda464 Remove PLUGINBUILDDIR and use G_TEST_SRCDIR and G_TEST_BUILDDIR instead
This allows us to override the location we load data files from, which
allows us to do more kinds of installed tests in the future.

Also, move the global data/tests content into the place that it is used
as it was getting impossible to manage.
2021-10-21 18:36:22 +01:00
Richard Hughes
852a6dbdc2 redfish: Handle EPERM when testing devices with a IPMI device
Fixes https://github.com/fwupd/fwupd/issues/3849
2021-10-12 19:12:57 -05:00
Richard Hughes
478e44bc19 trivial: Do not use g_assert() in self test code
Note that g_assert() should not be used in unit tests, since it is a
no-op when compiling with G_DISABLE_ASSERT. Use g_assert() in production
code, and g_assert_true() in unit tests.

See https://github.com/fwupd/fwupd/issues/3790
2021-09-24 22:20:21 +01:00
Richard Hughes
4b09701452 redfish: Fix a potential NULL dereference spotted by Coverity 2021-09-24 19:03:52 +01:00
Richard Hughes
ac1ae33b05 redfish: Install the config file readable only by root
It's got a password there, so this seems entirely appropriate.
2021-09-21 15:35:09 +01:00
Richard Hughes
0955e08a72 redfish: Do not hardcode the KCS user_id to be 0x4 2021-09-21 15:35:09 +01:00
Richard Hughes
40cd18fa97 Allow using a per-device global percentage completion
It's actually quite hard to build a front-end for fwupd at the moment
as you're never sure when the progress bar is going to zip back to 0%
and start all over again. Some plugins go 0..100% for write, others
go 0..100% for erase, then again for write, then *again* for verify.

By creating a helper object we can easily split up the progress of the
specific task, e.g. write_firmware().

We can encode at the plugin level "the erase takes 50% of the time, the
write takes 40% and the read takes 10%". This means we can have a
progressbar which goes up just once at a consistent speed.
2021-09-13 14:28:15 +01:00
Richard Hughes
1210aa4ae7 redfish: Create user accounts automatically using IPMI
This allows the Redfish plugin to "just work" when there is no username
or password in the SMBIOS data. Using KCS we can create an admin account
from the host OS and then automatically enumerate devices.
2021-09-07 17:25:37 +01:00
Richard Hughes
fb3f869810 redfish: Refactor the PATCH modify code 2021-09-07 17:25:37 +01:00
Richard Hughes
d8af914072 trivial: Remove some unused variables 2021-08-28 10:17:56 +01:00
Mario Limonciello
55de39c077 trivial: reformat the whole tree to match new format 2021-08-24 11:18:40 -05:00
Mario Limonciello
73fe71a65e trivial: redfish: fix a wrong return value 2021-08-24 11:18:40 -05:00
Mario Limonciello
cedc772b91 trivial: redfish: remove duplicate dictionary key
found by codacity
2021-08-18 07:58:17 -05:00
Mario Limonciello
393777b9fb trivial: redfish: drop unused import and variables
found by codacity
2021-08-18 07:58:17 -05:00
Richard Hughes
ad24f1623d redfish: Also conflict with the bios plugin when required 2021-08-06 20:51:22 +01:00
Richard Hughes
d4a4362621 redfish: Fix writing large firmware files 2021-08-06 20:51:22 +01:00
Richard Hughes
f5c0eab25d redfish: Add a per-vendor quirk to set all devices as requiring a reboot
Some versions of XCC do not send the Base.1.10.ResetRequired message.
2021-08-06 20:51:22 +01:00
Richard Hughes
a5a978b3f6 Rename some confusing API
More than one person has asked about 'why call fu_plugin_update() for a
reinstall or downgrade' and I didn't have a very good answer.

The plugin API is not officially stable, and we should fix things to be
less confusing. Use the same verbs as the FuDevice vfuncs instead.
2021-08-06 19:49:53 +01:00
Richard Hughes
27fbab1990 redfish: Disable the uefi_capsule plugin if coldplug succeeded
We don't want to show the big warning about the missing ESRT on server
hardware that is managed by a BMC:

    WARNING: UEFI capsule updates not available or enabled in firmware setup
      See https://github.com/fwupd/fwupd/wiki/PluginFlag:capsules-unsupported for more information.
2021-08-03 13:10:10 +01:00
Richard Hughes
25c93aa7ca redfish: Identify hardware that needs to be updated to the same version
For instance, the EFI driver for a given network card cannot be
different for identical hardware.
2021-07-23 13:16:47 +01:00
Richard Hughes
a8206b2bf6 redfish: Work around a XCC-ism on Lenovo hardware
Only the backup BMC device (which we ignore anyway...) can be updated
by specifying the target ID, the others need an *empty* array so that
XCC can work out what devices need to be processed.
2021-07-23 13:16:47 +01:00
Richard Hughes
6b238b2daa redfish: Automatically connect the BMC network interface at startup
Some distributions like RHEL change the default to not autoconnect
ethernet devices. This breaks connecting to the SMBIOS-defined BMC
adapter which means all the reads fail after a 60s timemout.

Autoconnect the internal USB ethernet adapter so we can use Redfish
without user action.
2021-07-22 12:48:22 +01:00
Richard Hughes
6b151a6acb redfish: Fix parsing USB/PCI network VID/PIDs 2021-07-22 12:48:22 +01:00
Richard Hughes
70a64190cb redfish: Limit requests to 30s max
The default in new libcurl versions is 'forever' which isn't useful for
a shared daemon.
2021-07-22 12:48:22 +01:00
Richard Hughes
ecd4c5431b redfish: Fix the docs to match reality 2021-07-22 12:48:22 +01:00
Mario Limonciello
798d1ed3ee trivial: update markdown for pre-commit style 2021-07-18 14:42:47 -05:00
Richard Hughes
a71f100e5a redfish: Use the HotPluggable attribute if provided
Although, this only seems provided for PSU devices...
2021-07-14 15:21:04 +01:00
Richard Hughes
10cd248948 redfish: Restore compatibility with old libcurl versions
Making the redfish plugin disabled on RHEL 8 was... unpopular.
2021-07-09 16:30:30 +01:00