Commit Graph

1104 Commits

Author SHA1 Message Date
Richard Hughes
0216d83b71 Add FuUdevDevice as a derivable helper object
There are currently three plugins that use GUdev rather than libusb, and there
are several more in the works. Add a helper object so we can make the plugins
smaller and simpler, much like we already do with FuUsbDevice.
2018-08-26 19:42:28 +01:00
Richard Hughes
bb764e99a0 trivial: Add fu_device_list_get_by_platform_id() 2018-08-26 19:38:58 +01:00
Richard Hughes
95227a919d trivial: Move gudev to the core plugin deps 2018-08-26 19:38:58 +01:00
Richard Hughes
07ed2f00fa trivial: Use the new subclassed device methods
This just reduces our API surface a little, no behaviour change.
2018-08-24 21:48:59 +01:00
Richard Hughes
b37d54e22d trivial: Link in FuChunk when using fwupdtool 2018-08-24 21:39:15 +01:00
Richard Hughes
98f6757fbb trivial: Add an example key for a USB device 2018-08-24 20:22:05 +01:00
Richard Hughes
1bf7ff9966 trivial: Fix a debugging typo 2018-08-24 20:21:51 +01:00
Mario Limonciello
7d35278cb6 fu-install-task: Don't fail update installation if compiled without GPG/PKCS7
Currently if you download a CAB file from LVFS and try to install it
on a daemon compiled without GPG it will fail to install since LVFS has signed
it.  You had to make an intentional decision to disable GPG.

Allow this scenario to work just as if the CAB file were unsigned, but save
a warning in the logs that it happened.
2018-08-24 19:11:00 +01:00
Richard Hughes
ddb3e20d29 trivial: Fix a few new FALSE/NULL confusions 2018-08-23 11:30:18 +01:00
Richard Hughes
8fe7cddc74 trivial: Add helper function for getting an integer quirk value 2018-08-23 10:09:45 +01:00
Richard Hughes
2d9ba8d1a3 trivial: Don't include the default GUID in the device ID if NULL 2018-08-23 09:47:28 +01:00
Richard Hughes
9d72954cc1 trivial: Fix linking problems with the recent FuChunk move 2018-08-23 09:11:15 +01:00
Mario Limonciello
a913bcd271 fixups 2018-08-22 14:46:11 -05:00
Mario Limonciello
09774dd90b fu-progressbar: Show a time estimate after update has started 2018-08-22 14:46:11 -05:00
Richard Hughes
f22bd6e424 trivial: Move out the byte-array chunking to libfwupdprivate
Five plugins (soon to be 7) are linking to the DFU plugin just for this simple
segment-aware chunking functionality. Move this into common code to make
building simpler.
2018-08-22 15:14:12 +01:00
Richard Hughes
61eb20d194 trivial: Fix a gtk-doc typo 2018-08-22 14:03:23 +01:00
Richard Hughes
c0fe556350 Add more common vfuncs to FuDevice
This allows us to abstract out common code for plugins not using FuUsbDevice.
2018-08-22 13:32:29 +01:00
Mario Limonciello
e3b1a3f558 Plumb through support to set FwupdInstallFlags for update_prepare/update_cleanup
This will be used by other future commits.
2018-08-21 13:49:38 -05:00
Richard Hughes
898fc80fde Allow updating just one specific device from the command line 2018-08-21 12:21:50 +01:00
Mario Limonciello
f00ca2a8e0 fu-util: When processing "install" command don't try to show current_release
The frontend was never notified of the release (and didn't parse the CAB) so
it doesn't know at this time what the version of the release is and
so this shows a NULL assertion at the time.
2018-08-21 10:06:27 +01:00
Mario Limonciello
cc50e1ab5b fu-tool: Fix a segfault caused by cleanup of USB plugins
This is the same problem that happened with 3f9a1c182a.
The USB plugins got closed but left a dangling reference to a device.
2018-08-15 06:33:37 +01:00
Mario Limonciello
37b5958d4a firmware-builder: Make running more resilient
Test whether CONFIG_USER_NS and related knobs are set.
* Fail daemon execution if not
* Skip self tests if not.

Detect ENOTTY errno set by process spawn.
Skip self tests if set.

Fixes FTBFS on Debian pbuilder and unprivileged docker.
2018-08-14 08:18:49 -05:00
Mario Limonciello
f78f66d479 trivial: Also show device title for 'install' command in fwupdmgr
Commit 171ec0d added support for 'update' and 'downgrade' operations
in fwupdmgr.  Since users can also install CAB files manually
show the titles for those too.
2018-08-13 10:03:49 +01:00
Mario Limonciello
e10cb70395 trivial: Remove now-unnecessary device-changed callback
In verbose mode this actually makes the progressbar not work as
well and is not needed since the device changed does come with the
progress bar.
2018-08-13 09:58:45 +01:00
Mario Limonciello
9eb66fe274 Show composite update titles in fu-tool too
Commit 171ec0dd95 added this information for 'update' and 'downgrade'
operations in fwupdmgr but forgot to add for the 'install' and 'install-blob'
operations of fwupdtool
2018-08-13 09:58:34 +01:00
Richard Hughes
128c0160b3 Only add new device children
This prevents horrible things happening when different plugins provide the
parent and child, and the child gets added before the parent.

Alternative to https://github.com/hughsie/fwupd/pull/645
2018-08-10 09:21:06 -05:00
Mario Limonciello
6463f311b8 fu-engine: emit signals when initializing
Some devices take a long time to initialize and tools like fu-tool
have no feedback during this time.

Show a status message to indicate what's going on.
2018-08-10 14:52:55 +01:00
Richard Hughes
171ec0dd95 Show the correct title when updating multiple devices with one file
Multiple devices can be updated from one cabinet archive, and it would be quite
confusing just to print the first device title and then have the progressbar go
from 0..100 multiple times.

Use the existing device-changed signal to set the 'current device' and print a
new header if the device changes during the install phase.
2018-08-10 14:50:43 +01:00
Richard Hughes
cc2b6fd2be trivial: Allow changing the progressbar title at runtime 2018-08-10 14:50:43 +01:00
Richard Hughes
ec85ebc760 trivial: Emit device-changed when the device status or percentage changes 2018-08-10 14:50:43 +01:00
Mario Limonciello
59cd4706f0 trivial: fu-engine: downgrade "Using Plugins %s" to debug
This isn't useful for most people and just takes up space in the logs.
When there is a problem it's typically specifically with a plugin
and at that time we ask them to run the daemon with verbose anyway.
2018-08-09 13:47:35 -05:00
Richard Hughes
68f12ddb44 trivial: Do not define _GNU_SOURCE
It prevents coverity from running with gcc7.
2018-08-09 16:59:04 +01:00
Richard Hughes
02c90d8a03 Remove the unused Emacs indenting headers from all source files
Fixes https://github.com/hughsie/fwupd/issues/636
2018-08-09 12:48:04 +01:00
Richard Hughes
69a5f3587b trivial: Allow plugins to get the list of HWIDs 2018-08-08 14:44:47 +01:00
Richard Hughes
81c427ca6d Allow different plugins to add the same device
In this instance, we define the 'same device' to be a FuDevice that has at
least one matching GUID. We allow the plugins to define which one is 'better'
than other plugins, and use this to only have one FuDevice for the physical
device.

Alternative to https://github.com/hughsie/fwupd/pull/604
2018-08-06 21:58:28 -05:00
Mario Limonciello
ece90a4879 trivial: fu-util/fu-tool: Output a new line between devices for get-details
With composite CAB files it's difficult to see between devices when packed:
  Homepage:             http://support.dell.com/
  Vendor:               Dell Inc.
  TrustFlags:           none
Unknown Device
  Guid:                 558d18fa-5530-5fc8-9e4b-de3ee8a5eca7
  Homepage:             http://support.dell.com/
  Vendor:               Dell Inc.
  TrustFlags:           none
Unknown Device
2018-08-06 11:05:52 +01:00
Richard Hughes
881f624eba trivial: Fix getting details about firmware for unknown devices
Fix a logic error when testing requirements; what was supposed to happen was
that a the firmware requirements were only processed when we had a FuDevice set
in the FuInstallTask, but instead we were falling through to the handler for
'unknown requirement type'.
2018-08-06 11:03:08 +01:00
Richard Hughes
38c7c334f4 trivial: Remove duplicate requirement checks
The fu_engine_check_requirements() tests are already called from
fu_engine_get_result_from_app() using a NULL device.
2018-08-06 10:59:13 +01:00
Mario Limonciello
4afe7fb742 fu-engine: Add a timer for device update wrapping blob installation
This makes it a lot easier to benchmark performance relative to
other implementations, systems and buses.
2018-08-06 00:34:42 -05:00
Mario Limonciello
801cca6dc3 synapticsmst: remove support for setting dock type from another plugin
As seen by recent testing this is not working every time.
Since e6cda81f we're now building GUIDs that represent all the possibilities
for shared parts so it's not important to set dock type.
2018-08-06 00:34:42 -05:00
Richard Hughes
a6b1d8d19c Don't potentially expose user passwords for remotes
Inspired by a patch by Mario Limonciello, many thanks.
2018-08-06 06:21:29 +01:00
Mario Limonciello
7154f63397 trivial: Adjust syntax of varying copyright holders to unify across project 2018-08-05 08:22:23 -05:00
Richard Hughes
2d37c3f64b trivial: Add a virtual provide of com.redhat.fwupdate
Some firmware depends on this component, which we absorbed in the last release.

See also: https://github.com/hughsie/fwupd/issues/614
2018-08-04 19:06:03 +01:00
Mario Limonciello
e6cc71bea1 fu-hwids: Fix a segfault in smbios data processing caught by fuzzing
Reported-by: Lionel Debroux <lionel_debroux@yahoo.fr>
2018-08-04 06:31:51 +01:00
Mario Limonciello
d1775bc026 uefi: Populate UpdateError with reasons that the plugin won't run
Previously if missing secure boot binaries, or invalid ESP was created the
plugin would just not load.

Now instead populate UpdateError and remove the updateble flag, but still show
the device in fwupdmgr and fwupdtool.
2018-07-17 14:30:27 +01:00
Mario Limonciello
b821557b35 Fix bubblewrap functionality on Debian systems
Per https://github.com/projectatomic/bubblewrap/issues/200
the paths need to be built differently to be able to accomodate
an unmerged /usr that Debian has.

Use ro bind mounts rather than symlinks to be compatible to both
Fedora's approach and Debian's approach
2018-07-13 10:51:12 -05:00
Mario Limonciello
e6e2bf9d97 trivial: Allow EFI application path to come from a different root 2018-07-10 14:10:16 -05:00
Richard Hughes
f307775675 Add release information for locked devices 2018-06-28 15:51:11 +01:00
Richard Hughes
3c304c4826 trivial: Allow running fu-self-test without ninja 2018-06-28 15:51:11 +01:00
Richard Hughes
ebbb13c2b4 Remove the libfwup dependency from fwupd
In Fedora the only user of libfwupdate is fwupd and the fwupdate command line
tool. It makes sense to absorb the libfwupdate library interface into the
uefi plugin in fwupd. Benefits I can see include:

* fwupd and fwupdate are very similar names; a lot of OEMs are confused

* fwupd already depends on efivar for other things

* We are maintaining an artificial library interface

* The CI and translation hooks are already in place for fwupd

* We don't need to check for features or versions in fwupd, we can just develop
the feature (e.g. BGRT) all in one place.
2018-06-28 15:51:11 +01:00
Richard Hughes
1ccf35a9e4 dell: Register devices with the uefi plugin rather than using libfwup directly
The device registration allows us to create a 'virtual' device that can accept
capsule updates that is not found in the ESRT.
2018-06-28 15:51:11 +01:00
Richard Hughes
ca851f5ab4 trivial: Add fu_device_incorporate()
This allows us to copy properties from a donor object.
2018-06-28 15:51:11 +01:00
Richard Hughes
83390f6556 uefi: Add functionality to parse the EFI framebuffer size 2018-06-28 15:51:11 +01:00
Richard Hughes
282b10dbbf trivial: Allow using a custom firmware location in the self tests 2018-06-28 15:51:11 +01:00
Richard Hughes
c43a9e9024 trivial: Fix the Since lines for the equivalent_id functions 2018-06-28 15:51:11 +01:00
Richard Hughes
87fb9ff447 Change the quirk file structure to be more efficient
This pivots the data storage so that the group is used as the preconditon
and the key name is used as the parameter to change. This allows a more natural
data flow, where a new device needs one new group and a few few keys, rather
than multiple groups, each with one key.

This also allows us to remove the key globbing when matching the version format
which is often a source of confusion.

Whilst changing all the quirk files, change the key prefixes to be more familiar
to Windows users (e.g. Hwid -> Smbios, and FuUsbDevice -> DeviceInstanceId)
who have to use the same IDs in Windows Update.

This also allows us to pre-match the desired plugin, rather than calling the
probe() function on each plugin.
2018-06-28 13:32:30 +01:00
Richard Hughes
a39d6a52b5 trivial: Skip plugins that require the 'Plugin' quirk is set 2018-06-28 12:17:15 +01:00
Richard Hughes
6dbe8fef34 Allow devices to assign a plugin from the quirk subsystem
Not calling dozens of ->probe() functions is dramatically more efficient when
there are a large number of USB devices attached.

This requires plugins to 'opt-in' to the new behaviour, and also to supply
quirks that match all devices.
2018-06-28 12:16:31 +01:00
Richard Hughes
5f3a56b0fa Add fu_plugin_has_rule()
This allows us to check if a specific name exists for a given rule type.
2018-06-28 12:13:59 +01:00
Richard Hughes
9ecde4a38a trivial: Allow setting standard FwupdDeviceFlags when getting quirk data 2018-06-28 12:08:01 +01:00
Richard Hughes
ac11be65f3 trivial: Add fu_device_has_custom_flag()
This splits the custom flags and checks if one of them exists.
2018-06-28 12:07:13 +01:00
Richard Hughes
63b173046d trivial: Rename the 'plugin-hints' functionality to 'custom-flags'
They will be used as actual flags in the future.
2018-06-28 12:07:13 +01:00
Richard Hughes
83cd57f095 Fix downgrading older releases to devices
The requirement filter needs to be relaxed when getting the available releases
for a device when not used to install the firmware.
2018-06-27 14:07:23 +01:00
Richard Hughes
8848675f9b trivial: Show supported device without using --show-all-devices
In the case of a device that is unlockable, but is not updatable we want to
show it by default.
2018-06-27 14:07:11 +01:00
Richard Hughes
2efb992e52 Fix flashing devices that require a manual replug
We were looking for 'active' and 'old' devices with a specific ID. Due to a
copy and paste thinko we were actually matching the active list twice,
triggering the 'device ID was not unique' failure.

Fixes half of https://github.com/hughsie/fwupd/issues/565
2018-06-26 14:12:02 +01:00
Mario Limonciello
4910b244d1 trivial: Do not notify plugins for their "own" device registrations 2018-06-24 07:18:04 +01:00
Richard Hughes
e48351e260 Set the alternate device ID, not the object itself
If the daemon either de-duplicates or replaces the object passed emitted from
device-added then the object set as the alternate may not be the same instance
as the daemon version. This causes weird things to happen.

To make this less fragile, specify the *ID* of the object that should be the
alternate device, which allows the daemon to do clever things, and then assign
the object from the ID as the last step.

Although fixing no bug, this makes implementing future functionality easier.
2018-06-22 13:28:27 +01:00
Richard Hughes
7039b4efe4 unifying: Fix failure to detach when using a slow host controller
Some USB 3.0 Host Controllers are super slow to re-enumerate, one AMD 43b9 chip
being measured at over 7000ms (!) for a simple soft-replug. This also explains
the various device_detach() failures seen on the LVFS for Logitech firmware.
2018-06-20 20:48:54 +01:00
Richard Hughes
dbd8c76eb8 Run a plugin vfunc before and after all the composite devices are updated
Now we can update multiple devices (in multiple plugins) using one firmware
archive we need a way to cleanup after all the plugins have been run.

Fixes https://github.com/hughsie/fwupd/issues/561
2018-06-18 16:06:15 +01:00
Mario Limonciello
5a8581e4e7 trivial: Correct the install task ordering
With some instrumented testing I was finding that without
FWUPD_DEVICE_FLAG_INSTALL_PARENT_FIRST being set that the parent
was installing first.
2018-06-14 16:09:57 -05:00
Richard Hughes
61ac08d6d5 trivial: Allow firmware files to select a quad version format
This can be used to select the AA.BB.CC.DD format rather than the default
AA.BB.CCDD format for firmware versions. This allows us to support new vendor
requirements without adding more complicated rules to the quirk file.
2018-06-14 14:56:47 +01:00
Mario Limonciello
71043aba39 trivial: Don't enable pkcs7 tests unless tests are enabled
Fixes:

src/meson.build:22:2: ERROR:  Unknown variable "colorhug_pkcs7_signature".

with -Dpcs7=true, -Dtests=false
2018-06-11 14:22:08 -05:00
Mario Limonciello
cf63aecdaf fu-engine: Don't hardcode /etc/pki/fwupd-metadata 2018-06-11 14:22:08 -05:00
Mario Limonciello
b72aa8c813 fu-tool: Show errors if unable to access directory
When running in the sandbox this will make it more apparent why files
couldn't be opened.
2018-06-08 16:41:08 -05:00
Mario Limonciello
3f9a1c182a Clean up plugins as the last step of engine cleanup (Closes: #550)
Fixes a segfault that occurs during cleanup of USB plugins.

When g_module_close was called memory allocated by the plugin would
get freed leading to the finalize method for object class pointing
to garbage.
2018-06-06 14:39:03 -05:00
Piotr Drąg
472fa59b5f trivial: Fix typo in “Watch for hardare changes” 2018-06-06 14:53:51 +01:00
Richard Hughes
4be17d1364 Add support for relocating various runtime paths
This allows a snap package to be easily built.

With much help from Mario Limonciello <mario.limonciello@dell.com>, many thanks.
2018-05-31 16:25:22 +01:00
Richard Hughes
8e64005a06 trivial: Do not install the introspection files if no daemon 2018-05-31 11:17:20 +01:00
Gergely Risko
b41b1bd09e More Microsoft compatibility fixes around bios major/minor version
As it turns out, the major and minor BIOS version should also be
represented in hex format in the hash, but in contrast to the
enclosure type, always on 2 digits, padded if necessary.  There is no
decimal value in any of the hashes, it seems.

The previous data, I tested with didn't include major/minor version
numbers bigger than 9, so the issue didn't materialize.
2018-05-30 16:24:58 +01:00
Richard Hughes
e43f832c5d trivial: Make the daemon functionality optional
This is useful when building just fwupdtool in a flatpak.
2018-05-30 14:45:16 +01:00
Richard Hughes
f674bc92ec trivial: Fix critical warning when os-release is unavailable 2018-05-30 13:44:05 +01:00
Richard Hughes
d8fdcd63b8 trivial: Move the HID defines to a shared location 2018-05-29 20:15:47 +01:00
Mario Limonciello
716ab27c17 Add get-details command to fwupdtool 2018-05-29 13:35:44 -05:00
Richard Hughes
0d1577e85e trivial: Fix 'fwupdtool get-topology' 2018-05-29 13:59:26 +01:00
Gergely Risko
3701126c82 Fix Hardware-ID{0,1,2,12} compatibility with Microsoft
Handle the enclosure type as a hex value, not as a decimal.

This is mandated by the SMBios specification, where 0x10h (the value
16) is specifying the enclosure type of "lunch box", while 0x0ah (the
value 10) is "notebook".

They hash BIOS major and minor version with 2 digit padding using
leading zeros.  We do the same from now on.

Signed-off-by: Richard Hughes <richard@hughsie.com>
2018-05-29 12:23:25 +01:00
Richard Hughes
fe221dc13d trivial: Fix up some NULL/FALSE confusion 2018-05-29 09:33:44 +01:00
Mario Limonciello
51308e648a Adjust all licensing to LGPL 2.1+ (Closes: #526) 2018-05-29 09:03:13 +01:00
Mario Limonciello
8949e8977a trivial: Initialize engine in fwupdtool install function 2018-05-25 14:08:29 +01:00
Mario Limonciello
b900c09ced trivial: add bash completion for get-plugins 2018-05-22 16:03:14 -05:00
Richard Hughes
c02ee4da46 Allow whitelisting plugins in fwupdtool
When developing code it's really convenient to only run the new plugin. This
means you don't have to wait for the other hardware to initialize and there
are no side-effects from other plugins when installing firmware.

You can specify multiple plugins as globs, for instance:

    fwupdtool get-devices \
        --plugin-whitelist wacom \
        --plugin-whitelist "thunderbolt*"
2018-05-22 16:03:14 -05:00
Richard Hughes
8c71a3f2e9 Add a get-plugins command to fwupdtool
This returns the list of currently enabled plugins.
2018-05-22 16:03:14 -05:00
Mario Limonciello
d82e3b565a trivial: Don't fail to start the daemon or fwupdtool if daemon.conf is missing 2018-05-22 18:44:01 +01:00
Mario Limonciello
ba9e5b94ff Bring get-topology to fwupdtool
Also ammend the behavior of get-devices to match fwupdmgr
2018-05-22 05:44:52 +01:00
Richard Hughes
460226a9a8 trivial: Allow setting install flags on the CLI for fwupdtool 2018-05-21 21:23:45 +01:00
Richard Hughes
a36c9cfee1 trivial: Add the 'install' command to fwupdtool 2018-05-21 21:23:45 +01:00
Richard Hughes
e82eef3190 trivial: Move the install error heuristic into common code 2018-05-21 21:23:45 +01:00
Richard Hughes
c02cb83d20 trivial: Split out fu_install_task_compare() for future use 2018-05-21 21:23:45 +01:00
Richard Hughes
1d1f5cf098 trivial: Refactor the requirement tests to use a FuInstallTask 2018-05-21 21:23:45 +01:00
Richard Hughes
a7689dab33 trivial: Fix a compile warning when ConsoleKit and systemd are disabled 2018-05-21 14:18:52 +01:00
Richard Hughes
db7dfae566 trivial: Fix a build warning when building without ConsoleKit support 2018-05-21 14:18:48 +01:00
Richard Hughes
ca81d78597 trivial: Don't show a critical warning for an invalid firmware file
If the file has <release> without a <checksum type="content"> then we shouldn't
log a critical warning.
2018-05-19 23:08:21 +01:00
Richard Hughes
988e73c414 uefi: Search all available GUIDs when matching hardware
Using just the default GUID is fragile and might break if the GUIDs get added
in the 'wrong' order or if the GUID list is sorted.

Fixes https://github.com/hughsie/fwupd/issues/518
2018-05-19 23:07:40 +01:00
Richard Hughes
98ca99355f Allow fwupdtool to do common low-level operations without the daemon 2018-05-18 10:24:10 +01:00
Richard Hughes
026cdd8c17 trivial: Do not crash if trying to do fu_engine_install_blob() as OFFLINE 2018-05-18 10:23:19 +01:00
Richard Hughes
5b5f655e0b trivial: Allow the daemon to run without any idle sources
We need this if we want to run plugins without a daemon process.
2018-05-18 10:22:39 +01:00
Richard Hughes
c2de52a5b8 trivial: Only allow installing without history if the version is supplied 2018-05-18 10:14:36 +01:00
Richard Hughes
6e7419db0a trivial: Split up fu_engine_install()
This should allow the low-level tool to write unpackaged firmware.
2018-05-18 10:13:21 +01:00
Richard Hughes
b597683113 Add a low-level firmware diagnostic tool
This is designed to be run as root accessing the hardware directly rather than
using the daemon. This would allow a snap or flatpak package to write firmware
even when the host fwupd daemon is too old.

Also, move the SMBIOS parsing code here as this is not needed in fwupdmgr.
2018-05-18 10:08:10 +01:00
Richard Hughes
f761640aa1 trivial: Split out some CLI functionality for future use 2018-05-18 10:08:10 +01:00
Richard Hughes
3e3ac27216 trivial: Add attach() and detach() vfuncs to FuDevice 2018-05-18 10:08:10 +01:00
Richard Hughes
9b7ad9ad62 Do not use the system metainfo location
This means we can avoid loading a ton of non-fwupd files, and reduces our
running RSS from 5.4Mb to 2.8Mb. Old versions of appstream-glib caches a lot of
the localization string data which we just don't care about for firmware files.
2018-05-16 22:38:00 +01:00
Richard Hughes
76e0f94c86 Allow the client tools to avoid writing the history database 2018-05-14 18:54:15 +01:00
Richard Hughes
c48d0cfa0c trivial: Add a read_firmware() vfunc to FuDevice 2018-05-14 17:07:20 +01:00
Richard Hughes
0a0483b2ce trivial: Add a write_firmware() vfunc to FuDevice 2018-05-14 17:07:20 +01:00
Richard Hughes
12040b51fe trivial: Fix fu_engine_get_device() to use the device list
This only worked when the device ID was already in the history database, and
was probably a copy-paste issue.
2018-05-14 13:38:58 +01:00
Richard Hughes
9f86ade6bf Allow plugins to define the order composite firmwares are installed 2018-05-12 20:46:02 +01:00
Richard Hughes
1e456bcd39 Do not call fu_plugin_init() on blacklisted plugins
Fixes https://github.com/hughsie/fwupd/issues/503
2018-05-11 07:26:17 -05:00
Richard Hughes
7e77bf3116 trivial: Be consistent with 'name [id]' in debug output
Based on a patch by Mario Limonciello <mario.limonciello@dell.com>, many thanks.
2018-05-10 09:26:07 +01:00
Richard Hughes
4ad41f027c Allow installing more than one firmware using 'fwupdmgr install'
When using failed to open firmware.cab we pass in a device ID of '*' which
tells the daemon to update anything that matches. The current implementation
will fail in two ways:

* If duplicate hardware is installed (for instance two Unifying receivers) then
  only the first matching device will be updated.

* If the firmware archive contains two different images then we only try and
  upgrade the first device that matches. This means we're unable to update
  composite devices using one firmware file.

To fix both issues, carefully build a list of tasks that can be processed using
the given firmware and installed devices, request authentication using all the
different action IDs, then upgrade all the devices one-at-a-time.

Based on a patch by Mario Limonciello <mario.limonciello@dell.com>, many thanks.
2018-05-10 09:26:07 +01:00
Richard Hughes
27bf9ecfbb trivial: Fix up all apps when building the store 2018-05-10 09:26:07 +01:00
Richard Hughes
7383ce263b trivial: Split out some common keyring functionality 2018-05-10 09:26:07 +01:00
Mario Limonciello
78956cc9ff fwupdmgr: Hide devices that aren't updatable by default
They are hidden from get-devices, get-updates, and get-topology
They can be viewed by adding '--show-all-devices' to command line
2018-05-07 14:08:39 -05:00
Richard Hughes
df2b450b74 trivial: Copy the parent vendor when adding child devices 2018-05-03 19:58:04 +01:00
Richard Hughes
4f70833832 trivial: Add some padding to the FuDevice class struct
If we ever support out-of-tree plugins we will be glad of this.
2018-05-03 19:56:20 +01:00
Richard Hughes
42728c4d5e Add 'fwupdmgr get-topology' to show logical device tree 2018-05-03 08:07:04 +01:00
Richard Hughes
5e447293fa Add the concept of logical mappings between different devices
This allows us to find out the logical parent device, for instance in composite
devices with more than one firmware image for a single device.

We also allow lazily specifying the device parent using a GUID and the engine
then automatically sets the parent object when the GUIDs match, which allows
children and parents to exist in different plugins.
2018-05-03 08:07:04 +01:00
Richard Hughes
a30d933ac4 Show a translated warning when the server is limiting downloads 2018-05-02 13:23:49 +01:00
Richard Hughes
8aa7239240 trivial: Fix some Gtk-Doc mistakes
Fixes https://github.com/hughsie/fwupd/issues/487
2018-05-02 08:39:36 +01:00
Richard Hughes
3d71c16ed3 Allow specifying hwids with OR relationships
We don't want to use the version= attribute as the HWIDs are not versions, and
thinkgs like globbing just doesn't make sense given they are from hashes.

Fixes the client side part of https://github.com/hughsie/lvfs-website/issues/110
2018-05-01 14:33:23 +01:00
Mario Limonciello
5a25653177 Improve the update report message (Closes: #437) 2018-04-23 10:30:27 -05:00
Richard Hughes
34e0dab1f1 Add fu_plugin_add_compile_version()
This allows plugins to set and explicit build-time version. It also uses the
same AppStream component-ID scheme rather than the home-grown 'FooVersion' key.

Also, use the new runtime and compile-time versions in the report metadata.
Due to the key change we'll also need to update some LVFS rules.
2018-04-20 20:45:08 +01:00
Richard Hughes
b01b4869bb trivial: Use fu_plugin_add_runtime_version() in the Dell plugin 2018-04-20 20:45:08 +01:00
Richard Hughes
275d3b4f0f trivial: Fix a tiny memory leak introduced in the last commit 2018-04-20 20:45:08 +01:00
Richard Hughes
0eb123b986 Allow requiring specific versions of libraries for firmware updates
In some cases firmware can only be installed with an up to date GUsb (e.g. with
some STM-DFU hardware) or with a new version of fwupdate (e.g. any UEFI
UpdateCapsule without a capsule header).

We should be able to match against other software versions like we can the
fwupd version, e.g.

    <requires>
      <id compare="ge" version="0.9.2">org.freedesktop.fwupd</id>
      <id compare="ge" version="11">com.redhat.fwupdate</id>
    </requires>

Also, rather than checking each requirement we know about on the component,
check each requirement on the component about things we know. This ensures we
don't allow firmware to be installs that requires for instance fwupdate 22 when
the runtime version is only being added in fwupdate 12 and up.

This means the following is now an error that will fail to allow the firmware
to be installed:

    <requires>
      <firmware>doesnotexist</firmware>
      <some_future_tag>also_unknown</some_future_tag>
    </requires>

Also add a lot of self tests to test the various new failure modes.

Fixes https://github.com/hughsie/fwupd/issues/463
2018-04-20 16:19:05 +01:00
Mario Limonciello
ce2a8231ea Bump appstream-glib minimum version to 0.7.4
Ubuntu's LTS and Fedora's newest releases have it.  All CI targets
have it.
2018-04-20 09:05:17 -05:00
Richard Hughes
e598fc3447 trivial: Show the VID and PID when failing to add a USB device
Fixes https://github.com/hughsie/fwupd/issues/476
2018-04-19 20:15:09 +01:00
Mario Limonciello
ed1ac2a74b Enable CentOS 7 for CI
There are a lot of hacks here;
 * Pulling newer libappstream-glib from Fedora
 * Pulling a systemd backport
 * Manually installing pillow and pygobject
 * PKCS7 is turned off (gnutls is too old)
2018-04-18 10:25:22 -05:00
Mario Limonciello
e00d05d033 Only run certtool if a new enough gnutls was on system and pkcs7 enabled 2018-04-18 10:25:22 -05:00
Mario Limonciello
6b9f07cbf7 trivial: fix a null pointer dereference
../src/fu-main.c: In function ‘fu_main_daemon_method_call’:
../src/fu-main.c:667:47: error: null pointer dereference [-Werror=null-dereference]
   polkit_authority_check_authorization (helper->priv->authority, subject,
                                         ~~~~~~^~~~~~
../src/fu-main.c:698:47: error: null pointer dereference [-Werror=null-dereference]
   polkit_authority_check_authorization (helper->priv->authority, subject,
                                         ~~~~~~^~~~~~
2018-04-17 10:10:43 +01:00
Mario Limonciello
a98df55d82 Disable -Wunused-function on clang builds (Closes #467)
GLib creates two static inline functions for paramaters that may
not be used that set off warnings in clang but not gcc.

Ignore these on clang builds everywhere that
G_DEFINE_AUTOPTR_CLEANUP_FUNC is used.
2018-04-17 10:10:43 +01:00
Mario Limonciello
5e13aecef8 trivial: fu-util fix mismanaged memory
Caught by clang:

../src/fu-util.c:473:17: warning: assigning to 'gchar *' (aka 'char *') from 'const gchar *' (aka 'const char *') discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
	warning_markup = fwupd_remote_get_agreement (remote);
2018-04-17 10:10:43 +01:00
Richard Hughes
747b9eeef2 trivial: Fix a small memory leak if parsing the .xml file fails 2018-04-16 16:47:07 +01:00
Richard Hughes
1fd3ecf7a3 Export fwupd_remote_get_agreement()
We need to show this agreement text in every fwupd frontend and exporting a
helper function allows us to do two things:

 * Share the semi-complicated code (and fallback) to avoid copy and pasting

 * Easily change the code in the future, for instance allowing merging Metainfo
   and AppStream metadata without updating all the front ends with new logic.
2018-04-16 16:44:27 +01:00
Richard Hughes
64da68a33b trivial: Use the same get-remotes output as the daemon expects for modify-repo 2018-04-12 08:17:08 +01:00
Richard Hughes
972f6eaba5 Allow customising the warning shown when enabling the remote 2018-04-12 08:17:08 +01:00
Richard Hughes
9e7d69ccb1 Show a warning with interactive prompt when enabling a remote 2018-04-12 08:17:08 +01:00
Richard Hughes
dfd228a132 Add enable-remote and disable-remote commands to fwupdmgr
This makes it easier to enable the LVFS on distributions where it is disabled
by default.
2018-04-12 08:17:08 +01:00
Mario Limonciello
336158a355 If no remotes are enabled try to enable the LVFS
Signed-off-by: Richard Hughes <richard@hughsie.com>
2018-04-10 20:28:36 +01:00
Richard Hughes
1901093431 Reboot using logind, not directly using systemd
This allows us to use PolicyKit, which means we will get prompted for
authorization if logged in as a user without permissions.

Fixes https://github.com/hughsie/fwupd/issues/455
2018-04-09 15:01:34 -05:00
Richard Hughes
f96694004f Fix SQL error when trying to run 'fwupdmgr clear-offline'
Fixes https://github.com/hughsie/fwupd/issues/445
2018-03-22 07:50:15 +00:00
Richard Hughes
89e968b79b trivial: Add a common function to get a recursive file list 2018-03-09 13:44:45 +00:00
Richard Hughes
e7b902eb7b Correctly detect new remotes that are manually copied
Create an inotify watch on the parent remotes.d directory to be notified of new
files being created. This allows us to load the new remote without restarting
the daemon.

Fixes https://github.com/hughsie/fwupd/issues/428
2018-03-05 16:53:01 +00:00
Mario Limonciello
5dbdd0b243 Allow exiting device prompt with a "0" device too
This makes it more obvious for people that don't know about ctrl-d
2018-03-01 10:28:48 -06:00
Mario Limonciello
80d1a294d1 Allow ctrl-d out of the prompt for devices
Currently this will segfault fwupdmgr

Choose a device:
1.	8a21cacfb0a8d2b30c5ee9290eb71db021619f8b (XPS 13 9370 System Firmware)
2.	cb52b4cd86255a70d1d9e6b09c6bf00b9f876b61 (XPS 9370 Thunderbolt Controller)
<ctrl-d>

Thread 1 "fwupdmgr" received signal SIGSEGV, Segmentation fault.
fu_util_prompt_for_device (priv=<optimized out>, error=<optimized out>) at ../src/fu-util.c:315
315		return g_object_ref (dev);
2018-03-01 09:27:29 -06:00
Mario Limonciello
9e965ada49 Allow all functions that take device arguments to be prompted
As part of this ignore extra string arguments other than the device
ID for these methods.

This has two benefits:
1) No more copying and pasting device ID's for any of these methods
2) Bash completion can now show nicer output for these methods
2018-03-01 09:27:29 -06:00
Mario Limonciello
a667bfb76e Fix a crash related to when passing device to downgrade in command line
(fwupdmgr:15071): Fwupd-CRITICAL **: 09:08:55.248: fwupd_client_get_device_by_id: assertion 'device_id != NULL' failed

Thread 1 "fwupdmgr" received signal SIGSEGV, Segmentation fault.
0x000055555555c5b1 in main (argc=<optimized out>, argv=<optimized out>) at ../src/fu-util.c:2401
2401				g_print ("%s\n", error->message);
2018-03-01 09:27:29 -06:00
Mario Limonciello
963dc4245c
uefi: Allow overriding ESP mount point via conf file (Fixes: #421) (#422)
* uefi: Allow overriding ESP mount point via conf file (Fixes: #421)
2018-02-27 14:26:58 -06:00
Richard Hughes
60a9bded16 trivial: Fix up three typos in error messages 2018-02-23 15:57:30 +00:00
Richard Hughes
34e48634af trivial: Fix a critical warning when checking component requirements 2018-02-23 15:26:15 +00:00
Richard Hughes
3f0b3f8f24 Only send success and failure reports to the server
We were getting some composite reports with 'needs-reboot' which isn't useful.
2018-02-23 12:55:51 +00:00
Richard Hughes
fbf17e9c85 Allow devices to use the runtime version when in bootloader mode
Some devices like the Nitrokey use a generic DFU bootloader that reports a
version number unrelated to the version number of the runtime. Add a flag so
that we can set the correct version when switching plugins during detach and
attach.
2018-02-16 18:23:07 +00:00
Richard Hughes
3c94eb0909 trivial: Don't remove all flags when the device is removed
We only really want to say 'the device is no longer updatable' and other flags
on the device (for instance, if it was locked) might still be useful.
2018-02-16 18:23:07 +00:00
Richard Hughes
849914e642 trivial: Don't keep asking the user if they want to report firmware
Don't optimize the device flag away. We need to be able to set the flag on all
devices that match the device ID, not just the one that happens to match now.
2018-02-14 19:57:27 +00:00
Richard Hughes
321f77a07f Use the default value if ArchiveSizeMax is unspecified in daemon.conf
Fixes: https://github.com/hughsie/fwupd/issues/405
2018-02-14 12:55:45 +00:00
Richard Hughes
919f8ab910 trivial: Do no assert if we try to read from a fd with zero maximum size 2018-02-14 12:55:45 +00:00
Richard Hughes
271f68b740 trivial: Fix critical warning when reporting history against a broken server 2018-02-14 12:45:40 +00:00
Richard Hughes
29a9e4f105 trivial: Show the 'known issue' URI by searching the message
If the report replaces an existing report we'll get two messages.
2018-02-13 20:36:58 +00:00
Mario Limonciello
a076c81a07 uefi: Log the efivar library version too into the report 2018-02-13 19:19:11 +00:00
Mario Limonciello
335c30ebd2 fu-util: Add fwupdate version to --version output 2018-02-13 09:18:30 -06:00
Mario Limonciello
44ebdb82d4 fu-engine: Clarify which devices don't have upgrades (Fixes #397) 2018-02-12 16:26:01 -06:00
Richard Hughes
c9cdf1dfc8 Show the user a URL when they report a known problem
Resolves half of https://github.com/hughsie/lvfs-website/issues/43
2018-02-12 16:08:43 +00:00
Richard Hughes
7ec355ed94 Support split cabinet archives as produced by Windows Update
I assume they're trying to avoid compressing the firmware, but compressing the
metadata. Not insane, but slightly odd given the metadata is typically tiny.

Fixes: https://github.com/hughsie/fwupd/issues/392
2018-02-09 21:09:09 +00:00
Richard Hughes
9b8eef4ccc trivial: Allow setting reported flags in the database 2018-02-09 16:55:09 +00:00
Richard Hughes
4082d3367b Correctly mark updates as successful even if the device version number is wrong
If the device firmware was set incorrectly make then set it to the release
version so the database update works correctly. We can't do any kind of vercmp
in the database, so use a daemon warning so we can either fix the plugin or
the XML.

This fixes up the issue that the hardware reports '28.00' and the AppStream
release specifies '28.0'.

Fixes: https://github.com/hughsie/fwupd/issues/387
2018-02-09 16:55:09 +00:00
Richard Hughes
c0cd023d31 Be more careful deleting and modifying device history
If this happens:

1.2.3 -> 1.2.4 = failure
1.2.3 -> 1.2.5 = success

...we want to preserve both in the history database so they can both be shared
with the LVFS. Use the device ID and the new and old firmware versions when
modifying and deleting entries.

This fix is made slightly more tricky as we have to drop the PRIMARY KEY
attribute on the device_id, and due to a limitation in SQLite, it means copying
the old history into a new table.
2018-02-07 10:20:19 +00:00
Richard Hughes
65e44cac96 Always return useful information when calling GetResults()
Previous to having the history database we could only notify about firmware that
as installed using the uefi plugin, as that had a few system-wide API calls to
say 'this update failed' or 'this was the error'.

Now we have the local history database not only can we report more details about
the UEFI update (e.g. the old version number) but we can also offer the same
functionality for all other plugins.

Although this does rework how the data for GetResults() is populated, it does
make the FuEngine object quite a lot less confused.

It also fixes a warning in the fwupd plugin for gnome-software, which was
expecting the FwupdRelease to be populated for the FwupdDevice.
2018-02-07 10:20:19 +00:00
Richard Hughes
50a6f7095c Offer to reboot when processing an offline update
In real user tests this was a pain point where we had to manually explain that
they needed to reboot.
2018-02-03 12:12:15 +00:00
Richard Hughes
d296a578ee trivial: Actually run the test plugin when doing the FuHistory tests
This does mean fixing up the version numbers. The idea is that we have a
virtual device that goes from 1.2.2->1.2.3 for an update, and 1.2.3->1.2.2 for
a downgrade.
2018-02-01 22:20:38 +00:00
Richard Hughes
38fb56cab1 trivial: Ensure the pending firmware has the new version set correctly
This is only important if the pending update fails to be scheduled, and then
we need the new version for the history database.
2018-02-01 22:18:45 +00:00
Richard Hughes
41c1548674 trivial: Add some trivial debugging for my sanity 2018-02-01 22:17:26 +00:00
Richard Hughes
734d7753d1 trivial: Split out the FwupdDeviceFlags filter function 2018-02-01 22:15:36 +00:00
Richard Hughes
ee7e764603 trivial: Do not return failure if a device flag is already set
If we have multiple versions of upgrades/downgrades we'll be setting the
REPORTED flags for multiple history entries at once.
2018-02-01 14:01:58 +00:00
Richard Hughes
1a24d9da90 Include the device VID and PID in the calculation of the device-id
If we plug in USB device A, remove it, plug in USB device B and get the same
autogenerated string all kinds of nasty things happen to the history database.
2018-02-01 14:01:50 +00:00
Richard Hughes
83e54e46ab trivial: Don't include the device-id in the plugin error string
It's not needed, or desired in the history database.
2018-02-01 14:01:39 +00:00
Richard Hughes
ad54f65f05 Add FWUPD_DEVICE_FLAG_NOTIFIED
This allows us to record whether we've shown the user a notification (either in
the terminal or in a GUI) that an update failed or was successful.

This can't be done in the session otherwise we'd get a notification for every
different user on the system. Notifying also isn't the same as reporting,
although one can certainly follow on from the latter.
2018-02-01 14:01:18 +00:00
Mario Limonciello
7a4e082329 src/fu-common-cab.c: fix a build warning 2018-01-31 14:51:18 -06:00
Richard Hughes
6b0e5c4f21 Fix a daemon warning when using fwupdmgr get-results
The FwupdRelease needs to be manually added in some circumstances.
2018-01-28 21:51:41 +00:00
Richard Hughes
534255cff3 Set the RemoteId when using GetDetails
This searches for the release container checksum in any enabled remote and
also sets the SUPPORTED flag if the local file matches.
2018-01-28 20:24:21 +00:00
Piotr Drąg
27cd91f559 Use ngettext for any strings with plurals 2018-01-26 10:09:06 +00:00
Richard Hughes
c269e64584 trivial: Make a string extractable with xgettext 2018-01-25 12:36:01 +00:00
Richard Hughes
f06ba475b1 Ask the user to refresh metadata when it is very old
Also allow skipping the questions for non-interactive scripts.
2018-01-17 20:22:18 +00:00
Richard Hughes
2de8f13b2c Allow each plugin to opt-in to the recoldplug action
Recoldplug is really not required for the USB based plugins, and we should
restrict this action to plugins that have inter-dependencies on each other.
2018-01-17 20:19:58 +00:00
Richard Hughes
e1fe34f1ec Never add two devices to the daemon with the same ID
Deduplicate based on the ID, without assuming the devices will be the same
in-memory object. Also, only emit the changed signal if the device is waiting
for a replug.

Fixes https://github.com/hughsie/fwupd/issues/364
2018-01-16 13:49:02 +00:00
Richard Hughes
8da530475d trivial: Fix deduplication when looking for the old device ID
When searching for a device by id, also include the old device in the search.
2018-01-16 13:48:58 +00:00
Richard Hughes
4012754569 trivial: Rename some FuDeviceList methods
The convention we're using is that find() returns the FuDeviceItem and get()
returns the FuDevice, so be consistent.

No code flow changes.
2018-01-16 13:48:51 +00:00
Richard Hughes
7e070c9bd7 Record an error if any NEEDS_REBOOT transaction fails to be applied
In the case of failing to even set up UpdateCapsule, the uefi plugin would
dutifully return SUCCESS as it was referring to the 2nd-to-last update that
actually worked.
2018-01-12 16:50:24 +00:00
Richard Hughes
7984310a65 trivial: Ensure a historical error message is cleared on success 2018-01-12 16:50:24 +00:00
Richard Hughes
d949d961e8 trivial: Pass the device-id to the fu_history_set_X() methods
This allows us to use a FwupdDevice or just use a string for testing.
2018-01-12 16:50:24 +00:00
Richard Hughes
0b9d996d4d trivial: Rename some methods in FuHistory to reflect the device-centric nature 2018-01-12 16:50:24 +00:00
Richard Hughes
780ef3f2ba trivial: Use 'history' for the FuHistory object name 2018-01-12 16:20:31 +00:00
Richard Hughes
f271142c47 trivial: Do not recover the pending update if the boot time is unchanged
This ensures we can restart the fwupd service without marking updates that need
a reboot as failed.
2018-01-12 16:17:27 +00:00
Richard Hughes
59c2ebe5cd Add in the kernel boot time to the uploaded report 2018-01-12 16:17:22 +00:00
Richard Hughes
a899713863 Rescan supported flags when refreshing metadata
The SUPPORTED flag is used when a device appears in the AppStream metadata of
any enabled remote, so when we rescan the modified store also ensure the flag
state is still correct.

Fixes https://github.com/hughsie/fwupd/issues/363
2018-01-12 15:04:21 +00:00
Richard Hughes
0d2320735d Nag the user to upload reports when doing common operations
This is supposed to be a gentle nag, rather than being obnoxious. To disable
this, simply remove the ReportURI key from the relevant remote.
2018-01-11 21:31:29 +00:00
Richard Hughes
0a7bc97317 Add a 'report-history' command to fwupdmgr
This shares your history with a reporting server, typically the LVFS.

NOTE: no data is sent without the user opting-in, and the data sent is shown to
the user before upload.
2018-01-11 21:31:29 +00:00
Richard Hughes
80b79bb9aa trivial: Allow plugins to add metadata to the uploaded reports 2018-01-11 21:28:22 +00:00
Richard Hughes
473c520e38 Add in extra metadata to the uploaded reports
Save the dependency versions, architecture and the kernel versions in the
history database as metadata as it may be different to the time of upload.
2018-01-11 21:28:22 +00:00
Richard Hughes
38c59fcf4a Allow saving extra metadata in the history database
This will be used to store things like the kernel version in the future, and
also means we can stop abusing the vendor property for the fwupd version.
2018-01-11 21:27:44 +00:00
Richard Hughes
e09dbd4ce1 trivial: Do not save flags with daemon state in the history database 2018-01-11 20:20:03 +00:00
Richard Hughes
d29df0819f Allow specifying the reporting server in the remote key files 2018-01-11 20:20:00 +00:00
Richard Hughes
611f1a9cbf Set the remote-id on devices returned by GetHistory 2018-01-11 20:19:41 +00:00
Richard Hughes
3eb2a00d10 trivial: Fix up the version check for offline firmware reporting 2018-01-11 20:19:16 +00:00
Richard Hughes
6b22295cf0 Add a D-Bus method to modify a historical device
This allows us to set specific flags on the device stored in the database.
2018-01-11 10:20:48 +00:00
Richard Hughes
a2f8e45c0f trivial: Set the update state for any updates that need a reboot
This has to be done at each engine startup, as this will happen on the *next*
OS boot.
2018-01-11 10:11:17 +00:00
Richard Hughes
476363ac19 Add a D-Bus method to get the history information 2018-01-11 10:08:58 +00:00
Richard Hughes
af54a0778a trivial: Add a 'clear-history' command to fwupdmgr
This needs to be run as the root user to work.
2018-01-11 10:04:50 +00:00
Richard Hughes
bc3a4e1f57 Store firmware update success and failure to a local database
Rename FuPending to FuHistory to better represent what the object is now doing.
Also, while we're here, switch to using SQLite prepared statements to avoid a
possible invalid read on i386 hardware.
2018-01-11 09:59:34 +00:00
Richard Hughes
9c808e838e trivial: Add fu_test_compare_lines()
This is for future use.
2018-01-11 08:17:02 +00:00
Richard Hughes
3e90a58096 trivial: Do not hardcode the update state in fu_pending_add_device() 2018-01-11 08:16:33 +00:00
Richard Hughes
696e6fdcf3 trivial: Don't allow deleting the pending database
If we're going to use this for history we have to be a little more subtle.
2018-01-11 08:16:25 +00:00
Richard Hughes
718be2de6b trivial: Prefer https_proxy for metadata downloads 2018-01-11 08:16:18 +00:00
Richard Hughes
74fa2ca635 Fix firmware downloading using gnome-software compiled against fwupd 1.0.x
Always set the AppStream app properties on the FwupdRelease. In some cases we
were returning FwupdRelease objects with no name or summary which gnome-software
was ignoring.
2018-01-10 21:37:43 +00:00
Richard Hughes
eafba48905 trivial: Namespace the ignored cleanup error better 2018-01-08 21:59:08 +00:00
Richard Hughes
d980ccb757 trivial: Do the fwupdmgr network setup in a new function
This is for future use by other commands.
2018-01-08 16:57:01 +00:00
Richard Hughes
054b68457d trivial: Use the shared FwupdClient when monitoring 2018-01-08 16:56:56 +00:00
Richard Hughes
9939f1c85c trivial: Fix tiny memory leak when getting GUIDs from an invalid archive 2018-01-08 16:56:19 +00:00
Richard Hughes
e5711c762b trivial: Fix NULL handling in FuPending
We never want to store '(NULL)' as a string in the database.
2018-01-08 16:45:56 +00:00
Richard Hughes
5bed9341b4 trivial: Fix self test failure with newer versions of GCab 2018-01-06 22:46:35 +00:00
Richard Hughes
639da4776b trivial: Allow calling all FuPlugin runners from the self tests 2018-01-06 22:44:24 +00:00
Richard Hughes
c7bbbc246b Allow specifying the maximum archive size in the daemon config 2018-01-03 07:38:27 +00:00
Richard Hughes
4f50e6268a Do not try to parse huge compressed archive files
We don't want to allow DoS-ing the daemon by trying to decompress a huge sparse
cabinet archive.
2018-01-03 07:38:27 +00:00
Richard Hughes
eec8a3c068 trivial: Fix a compile warning with the latest GLib 2018-01-02 20:37:31 +00:00
Richard Hughes
deea2da041 Use the new functionality in libgcab >= 1.0 to avoid writing temp files
Using old versions of gcab we could only do one thing: extract the files in the
cabinet archive to a new directory in /tmp, and then fwupd would have to read
them back in to memory to parse them. This was both inelegant and wasteful, and
probably not an awesome idea from a security or privacy point of view.

Using libgcab >= 1.0 we can decompress to a GBytes blob, and then verify the
firmware and metainfo file without anything being written to disk.

As this is a security sensitive operation, move the fwupd-specific helper code
out of libappstream-glib and also add a lot of internal self tests.

The gcab code will have to remain in libappstream-glib for a long time, but we
don't have to use it. Handling the cab file here also allows us to fix two
long-standing bugs:

 * MetaInfo or firmware files in a subdirectory are handled correctly

 * The archive can also be self-signed using PKCS7 instead of using GPG
2017-12-21 08:54:00 +00:00
Richard Hughes
8f89cf04fb Add more metadata to the user-agent string 2017-12-21 08:25:29 +00:00
Richard Hughes
650dadebe6 Choose the correct component from provides matches using requirements
In the case of multiple <component> sections with different AppStream IDs, but
with the same GUID <provides>, filter using the requirements rather than just
choosing the first one.

This allows the update of Logitech devices with secure bootloaders. Many thanks
to Ogier Bouvier for identifying the problem.
2017-12-14 15:50:19 +00:00
Richard Hughes
963cb45793 ebitdo: Use quirks rather than hardcoding a list of VIDs and PIDs
This means we can trivially support new devices in the future without compiling
any new code. This makes it easier to add support for new hardware for LTS
distros like RHEL.
2017-12-11 16:49:28 +00:00
Richard Hughes
fbcebe096b Connect the progress and status callbacks on the new FuDevice on replug
This ensures we get progress events when replugging a device. Also, remove the
callbacks on the 'old' device to avoid causing multiple events on a 2nd-replug.
2017-12-11 16:48:56 +00:00
Richard Hughes
9934fb514c trivial: Apply the quirks again if the backing GUsbDevice changes 2017-12-11 16:48:42 +00:00
Richard Hughes
853ce90d79 trivial: Actually set the plugin hints from the device GType
This is a typo from the last commit
2017-12-11 12:10:49 +00:00
Richard Hughes
d9e6cca414 csr: Add a new plugin to add support for CSR "Driverless DFU"
CSR is short for Cambridge Silicon Radio, which is a the OEM that makes most
of the bluetooth audio chips in vendor hardware. The hardware vendor can enable
or disable features on the CSR microcontroller depending on licensing options.

The hardware vendor can also use a custom USB descriptor, or just set a custom
PID. In the latter case we need to set the vendor and model to reality using
quirks.

This commit allows the user to update the firmware in the AIAIAI H05 wireless
headphones.
2017-12-11 10:47:18 +00:00
Richard Hughes
306c15b3a0 Add quirks based on the device GType
This allows us to have one per-plugin device quirk without having to call
fu_quirks_lookup_by_usb_device() in each plugin.
2017-12-11 10:47:18 +00:00
Richard Hughes
4cea617967 trivial: Add a quirk for setting the USB device version 2017-12-11 10:47:18 +00:00
Richard Hughes
5060246526 trivial: Move the USB quirks from FuPlugin to FuUsbDevice
Also rename some general USB quirks that are not specific to any one plugin.
2017-12-11 10:47:18 +00:00
Richard Hughes
a29711c4a1 Move the FuQuirks reference down from DfuDevice to FuDevice 2017-12-11 10:47:18 +00:00
Richard Hughes
7de50dbe92 trivial: Only reuse the added device if it has recently been removed 2017-12-11 09:44:36 +00:00
Richard Hughes
9b7bd190ed trivial: Don't show (null) in the debug logs 2017-12-10 14:50:54 +00:00
Richard Hughes
ae252cd83c trivial: Add some common functionality from reading and writing to a buffer 2017-12-08 20:07:09 +00:00
Richard Hughes
725c19fa88 Add a quirk for setting the USB device vendor 2017-12-08 19:36:09 +00:00
Richard Hughes
024cc230ed Add fu_device_set_progress_full()
This allows the plugin to use the raw byte values as a progress counter without
first converting to a percentage.
2017-12-08 09:36:57 +00:00
Richard Hughes
fa34bcffa3 trivial: Add a to_string() vfunc for any objects subclassing FuDevice 2017-12-08 09:36:57 +00:00