]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysupdated: Register known error types
authorAdrian Vovk <adrianvovk@gmail.com>
Sat, 31 Aug 2024 01:43:44 +0000 (21:43 -0400)
committerAdrian Vovk <adrianvovk@gmail.com>
Sat, 31 Aug 2024 01:43:44 +0000 (21:43 -0400)
This fixes a bug introduced during review of sysupdated. Originally,
we just returned EALREADY verbatim to signify that the target is
already up-to-date. Then we switched this to a proper error
(org.freedesktop.sysupdate1.NoCandidate) during review. But that now
maps to EIO, not EALREADY. Thus, whenever there's nothing to update,
updatectl would report I/O errors to the user, even though nothing
actually went wrong.

src/libsystemd/sd-bus/bus-common-errors.c
src/libsystemd/sd-bus/bus-common-errors.h
src/sysupdate/sysupdated.c

index 5b18241f00e8a63072d2e50f961c34debc35a9da..db1285e7f0fed6671920b423c60daa032cbadb66 100644 (file)
@@ -153,5 +153,7 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
         SD_BUS_ERROR_MAP(BUS_ERROR_REBALANCE_NOT_NEEDED,         EALREADY),
         SD_BUS_ERROR_MAP(BUS_ERROR_HOME_NOT_REFERENCED,          EBADR),
 
+        SD_BUS_ERROR_MAP(BUS_ERROR_NO_UPDATE_CANDIDATE,          EALREADY),
+
         SD_BUS_ERROR_MAP_END
 };
index fb1d42116810aa36490a47663bae88e12ee127c0..622cf4933dbe81c330da8e9232d762dadf653ea4 100644 (file)
 #define BUS_ERROR_REBALANCE_NOT_NEEDED         "org.freedesktop.home1.RebalanceNotNeeded"
 #define BUS_ERROR_HOME_NOT_REFERENCED          "org.freedesktop.home1.HomeNotReferenced"
 
+#define BUS_ERROR_NO_UPDATE_CANDIDATE          "org.freedesktop.sysupdate1.NoCandidate"
+
 BUS_ERROR_MAP_ELF_USE(bus_common_errors);
index 4edfea937e182583ccdbb23de1b14f6a17625271..9a078aa84a21fe3d857f37151df906544090e7e2 100644 (file)
@@ -4,6 +4,7 @@
 #include "sd-json.h"
 
 #include "build-path.h"
+#include "bus-common-errors.h"
 #include "bus-error.h"
 #include "bus-get-properties.h"
 #include "bus-label.h"
@@ -1044,8 +1045,8 @@ static int target_method_update_finished_early(
         /* Called when job finishes w/ a successful exit code, but before any work begins.
          * This happens when there is no candidate (i.e. we're already up-to-date), or
          * specified update is already installed. */
-       return sd_bus_error_setf(error, "org.freedesktop.sysupdate1.NoCandidate",
-                                "Job exited successfully with no work to do, assume already updated");
+        return sd_bus_error_setf(error, BUS_ERROR_NO_UPDATE_CANDIDATE,
+                                 "Job exited successfully with no work to do, assume already updated");
 }
 
 static int target_method_update_detach(sd_bus_message *msg, const Job *j) {