From 194373f313ae5b0e13c48bf60a5c13506feaf763 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Fri, 25 Apr 2025 15:50:50 +0200 Subject: [PATCH 1/9] fundamental: Insert some missing conditional includes IWYU can't insert these inside the correct condition itself so we add these manually in a separate commit. --- src/fundamental/chid-fundamental.c | 1 + src/fundamental/chid-fundamental.h | 2 +- src/fundamental/sha1-fundamental.c | 6 ++++++ src/fundamental/sha256-fundamental.c | 6 ++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/fundamental/chid-fundamental.c b/src/fundamental/chid-fundamental.c index 47eabdb349..a99d0dae64 100644 --- a/src/fundamental/chid-fundamental.c +++ b/src/fundamental/chid-fundamental.c @@ -15,6 +15,7 @@ */ #if SD_BOOT +# include "efi-string.h" # include "util.h" #else # include diff --git a/src/fundamental/chid-fundamental.h b/src/fundamental/chid-fundamental.h index 48b1343f5c..81c40e087f 100644 --- a/src/fundamental/chid-fundamental.h +++ b/src/fundamental/chid-fundamental.h @@ -3,7 +3,7 @@ #pragma once #if SD_BOOT -# include "efi-string.h" +# include "efi.h" #else # include #endif diff --git a/src/fundamental/sha1-fundamental.c b/src/fundamental/sha1-fundamental.c index 0f631d5053..b8d100ff6b 100644 --- a/src/fundamental/sha1-fundamental.c +++ b/src/fundamental/sha1-fundamental.c @@ -76,6 +76,12 @@ Still 100% public domain modified for use with systemd */ +#if SD_BOOT +# include "efi-string.h" +#else +# include +#endif + #include "memory-util-fundamental.h" #include "sha1-fundamental.h" diff --git a/src/fundamental/sha256-fundamental.c b/src/fundamental/sha256-fundamental.c index 9f8b0106fe..108c43b45a 100644 --- a/src/fundamental/sha256-fundamental.c +++ b/src/fundamental/sha256-fundamental.c @@ -21,6 +21,12 @@ License along with the GNU C Library; if not, see . */ +#if SD_BOOT +# include "efi-string.h" +#else +# include +#endif + #include "assert-fundamental.h" #include "macro-fundamental.h" #include "memory-util-fundamental.h" From a40f6dd4d8b03e90923e4548420ea65ca6847ae3 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 10:09:00 +0200 Subject: [PATCH 2/9] sd-id128: Use static instead of _SD_ARRAY_STATIC in source files When compiling the source files, we know static is going to be available so there's no need to use the macro from _sd-common.h and we can just use static instead. --- src/libsystemd-network/lldp-neighbor.c | 4 ++-- src/libsystemd/sd-id128/sd-id128.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c index 457b1e5926..67500895f8 100644 --- a/src/libsystemd-network/lldp-neighbor.c +++ b/src/libsystemd-network/lldp-neighbor.c @@ -685,7 +685,7 @@ int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type) { return type == k; } -int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype) { +int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[static 3], uint8_t *subtype) { const uint8_t *d; size_t length; int r; @@ -714,7 +714,7 @@ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STAT return 0; } -int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype) { +int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[static 3], uint8_t subtype) { uint8_t k[3], st; int r; diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index 1f59f834ef..54fb403a54 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -23,7 +23,7 @@ #include "stat-util.h" #include "user-util.h" -_public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) { +_public_ char *sd_id128_to_string(sd_id128_t id, char s[static SD_ID128_STRING_MAX]) { size_t k = 0; assert_return(s, NULL); @@ -39,7 +39,7 @@ _public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID12 return s; } -_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]) { +_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[static SD_ID128_UUID_STRING_MAX]) { size_t k = 0; assert_return(s, NULL); From 792a8bfb8a62c2d3a49297c0bb52178987611f9f Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 12:20:40 +0200 Subject: [PATCH 3/9] daemon-util: Rename starting/stopping message constants Currently, NOTIFY_READY from daemon-util.h conflicts with NOTIFY_READY from NotifyState from service.h so let's rename the constants to avoid the conflict. --- src/home/homed.c | 2 +- src/hostname/hostnamed.c | 2 +- src/import/importd.c | 2 +- src/initctl/initctl.c | 2 +- src/journal-remote/journal-remote-main.c | 2 +- src/journal-remote/journal-upload.c | 2 +- src/journal/journald-server.c | 2 +- src/locale/localed.c | 2 +- src/login/logind.c | 4 ++-- src/machine/machined.c | 2 +- src/mountfsd/mountfsd.c | 2 +- src/network/networkd-manager.c | 2 +- src/network/networkd.c | 2 +- src/nsresourced/nsresourced.c | 2 +- src/oom/oomd-manager.c | 2 +- src/oom/oomd.c | 2 +- src/portable/portabled.c | 2 +- src/resolve/resolved-manager.c | 2 +- src/resolve/resolved.c | 2 +- src/shared/bus-util.c | 2 +- src/shared/daemon-util.h | 4 ++-- src/socket-activate/socket-activate.c | 2 +- src/socket-proxy/socket-proxyd.c | 2 +- src/storagetm/storagetm.c | 2 +- src/timedate/timedated.c | 2 +- src/timesync/timesyncd.c | 2 +- src/tty-ask-password-agent/tty-ask-password-agent.c | 2 +- src/udev/udev-manager.c | 4 ++-- src/userdb/userdbd.c | 2 +- 29 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/home/homed.c b/src/home/homed.c index bb9d3360d0..652e32ec7c 100644 --- a/src/home/homed.c +++ b/src/home/homed.c @@ -39,7 +39,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 15c27af090..962c5681e4 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -1939,7 +1939,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/import/importd.c b/src/import/importd.c index b584a0e685..a7de9ed247 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -2044,7 +2044,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c index f0f722ac3e..bf3092ff31 100644 --- a/src/initctl/initctl.c +++ b/src/initctl/initctl.c @@ -328,7 +328,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); while (!server.quit) { struct epoll_event event; diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c index d33a7ab6b6..e244b668ee 100644 --- a/src/journal-remote/journal-remote-main.c +++ b/src/journal-remote/journal-remote-main.c @@ -1180,7 +1180,7 @@ static int run(int argc, char **argv) { log_debug("%s running as pid "PID_FMT, program_invocation_short_name, getpid_cached()); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); while (s.active) { r = sd_event_get_state(s.event); diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 7bf10f4de9..6de13e01f7 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -982,7 +982,7 @@ static int run(int argc, char **argv) { notify_message = notify_start("READY=1\n" "STATUS=Processing input...", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); for (;;) { r = sd_event_get_state(u.event); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 0a50467aaa..0593b97b16 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -2057,7 +2057,7 @@ static int dispatch_notify_event(sd_event_source *es, int fd, uint32_t revents, * there's something to send it will be turned on again. */ if (!s->sent_notify_ready) { - if (send(s->notify_fd, NOTIFY_READY, strlen(NOTIFY_READY), MSG_DONTWAIT) < 0) { + if (send(s->notify_fd, NOTIFY_READY_MESSAGE, strlen(NOTIFY_READY_MESSAGE), MSG_DONTWAIT) < 0) { if (errno == EAGAIN) return 0; diff --git a/src/locale/localed.c b/src/locale/localed.c index 5fc45819ca..3f742b8a62 100644 --- a/src/locale/localed.c +++ b/src/locale/localed.c @@ -664,7 +664,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/login/logind.c b/src/login/logind.c index e07b9e5296..ad76b06972 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -1088,7 +1088,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa else log_info("Config file reloaded."); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } @@ -1268,7 +1268,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); return manager_run(m); } diff --git a/src/machine/machined.c b/src/machine/machined.c index bc2739268f..364f9dfab6 100644 --- a/src/machine/machined.c +++ b/src/machine/machined.c @@ -345,7 +345,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/mountfsd/mountfsd.c b/src/mountfsd/mountfsd.c index 6073bd548e..87f4ab725a 100644 --- a/src/mountfsd/mountfsd.c +++ b/src/mountfsd/mountfsd.c @@ -31,7 +31,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index f4e8c41a76..cf713f3ffe 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1229,6 +1229,6 @@ int manager_reload(Manager *m, sd_bus_message *message) { log_debug("Reloaded."); r = 0; finish: - (void) sd_notify(/* unset_environment= */ false, NOTIFY_READY); + (void) sd_notify(/* unset_environment= */ false, NOTIFY_READY_MESSAGE); return r; } diff --git a/src/network/networkd.c b/src/network/networkd.c index 2060e6b2fa..d39cb19ed2 100644 --- a/src/network/networkd.c +++ b/src/network/networkd.c @@ -108,7 +108,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Could not start manager: %m"); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/nsresourced/nsresourced.c b/src/nsresourced/nsresourced.c index 07df95b4d7..ff84f766cd 100644 --- a/src/nsresourced/nsresourced.c +++ b/src/nsresourced/nsresourced.c @@ -34,7 +34,7 @@ static int run(int argc, char *argv[]) { return log_error_errno(r, "Failed to start up daemon: %m"); _unused_ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL; - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c index dcec133d6f..d62c07def4 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -660,7 +660,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa manager_set_defaults(m); manager_parse_config_file(m); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } diff --git a/src/oom/oomd.c b/src/oom/oomd.c index 15cbb3a2c3..11d11a3dc8 100644 --- a/src/oom/oomd.c +++ b/src/oom/oomd.c @@ -152,7 +152,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_msg = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_msg = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); log_debug("systemd-oomd started%s.", arg_dry_run ? " in dry run mode" : ""); diff --git a/src/portable/portabled.c b/src/portable/portabled.c index 75872d51fe..d94feb34cf 100644 --- a/src/portable/portabled.c +++ b/src/portable/portabled.c @@ -152,7 +152,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 78b14ea3bf..e130fe6fda 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -690,7 +690,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa manager_flush_caches(m, LOG_INFO); manager_verify_all(m); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c index d6a7f0cf5a..a0c8018023 100644 --- a/src/resolve/resolved.c +++ b/src/resolve/resolved.c @@ -85,7 +85,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to drop remaining caps: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index a2b6a48003..764548339d 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -154,7 +154,7 @@ int bus_event_loop_with_idle( /* Inform the service manager that we are going down, so that it will queue all * further start requests, instead of assuming we are still running. */ - (void) sd_notify(false, NOTIFY_STOPPING); + (void) sd_notify(false, NOTIFY_STOPPING_MESSAGE); r = bus_async_unregister_and_exit(e, bus, name); if (r < 0) diff --git a/src/shared/daemon-util.h b/src/shared/daemon-util.h index ff5e60e9be..e3daa9ebf5 100644 --- a/src/shared/daemon-util.h +++ b/src/shared/daemon-util.h @@ -7,8 +7,8 @@ #include "macro.h" -#define NOTIFY_READY "READY=1\n" "STATUS=Processing requests..." -#define NOTIFY_STOPPING "STOPPING=1\n" "STATUS=Shutting down..." +#define NOTIFY_READY_MESSAGE "READY=1\n" "STATUS=Processing requests..." +#define NOTIFY_STOPPING_MESSAGE "STOPPING=1\n" "STATUS=Shutting down..." static inline const char* notify_start(const char *start, const char *stop) { if (start) diff --git a/src/socket-activate/socket-activate.c b/src/socket-activate/socket-activate.c index 336d6fa754..c37fafd34a 100644 --- a/src/socket-activate/socket-activate.c +++ b/src/socket-activate/socket-activate.c @@ -478,7 +478,7 @@ static int run(int argc, char **argv) { if (r < 0) return r; - notify = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); } for (;;) { diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index 6c40617563..fb430757e3 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -688,7 +688,7 @@ static int run(int argc, char *argv[]) { return r; } - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(context.event); if (r < 0) return log_error_errno(r, "Failed to run event loop: %m"); diff --git a/src/storagetm/storagetm.c b/src/storagetm/storagetm.c index fbdf35df99..1f1ebe2e8f 100644 --- a/src/storagetm/storagetm.c +++ b/src/storagetm/storagetm.c @@ -1240,7 +1240,7 @@ static int run(int argc, char* argv[]) { _unused_ _cleanup_(notify_on_cleanup) const char *notify_message = notify_start("READY=1\n" "STATUS=Exposing disks in target mode...", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(event); if (r < 0) diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index c235573b92..5e0fb165a7 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -1182,7 +1182,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index cecd9fd6ea..6537f1ae92 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -205,7 +205,7 @@ static int run(int argc, char *argv[]) { notify_message = notify_start("READY=1\n" "STATUS=Daemon is running", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); r = manager_setup_save_time_event(m); if (r < 0) diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index a9240551f0..fd28591d19 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -406,7 +406,7 @@ static int process_and_watch_password_files(bool watch) { } _unused_ _cleanup_(notify_on_cleanup) const char *notify_stop = - notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); for (;;) { usec_t timeout = USEC_INFINITY; diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 2026e24f5d..6f67f466d5 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -234,7 +234,7 @@ void manager_exit(Manager *manager) { manager->exit = true; - (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING); + (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING_MESSAGE); /* close sources of new events and discard buffered events */ manager->ctrl = udev_ctrl_unref(manager->ctrl); @@ -1407,7 +1407,7 @@ int manager_main(Manager *manager) { log_warning_errno(r, "Failed to apply permissions on static device nodes, ignoring: %m"); _unused_ _cleanup_(notify_on_cleanup) const char *notify_message = - notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); /* We will start processing events in the loop below. Before starting processing, let's remove the * event serialization fd from the fdstore, to avoid retrieving the serialized events again in future diff --git a/src/userdb/userdbd.c b/src/userdb/userdbd.c index 434a50a329..64babef1c4 100644 --- a/src/userdb/userdbd.c +++ b/src/userdb/userdbd.c @@ -47,7 +47,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) From d30d1ed00a80c64a16c322e745eb32eca71e38d8 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 21:11:07 +0200 Subject: [PATCH 4/9] basic: Add our own net/if_arp.h header To avoid conflicts with . --- src/basic/include/net/if_arp.h | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/basic/include/net/if_arp.h diff --git a/src/basic/include/net/if_arp.h b/src/basic/include/net/if_arp.h new file mode 100644 index 0000000000..7b384aeb73 --- /dev/null +++ b/src/basic/include/net/if_arp.h @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include From 228e93c5c58fc680873e6e0e3abb2d95bd333e00 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 21:35:43 +0200 Subject: [PATCH 5/9] shared: Add blkid-util.c IWYU analyzes source files and their corresponding header file so let's add a source file blkid-util.c so blkid-util.h is analyzed as well. --- src/shared/blkid-util.c | 32 ++++++++++++++++++++++++++++++++ src/shared/blkid-util.h | 32 ++++++-------------------------- src/shared/meson.build | 1 + 3 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 src/shared/blkid-util.c diff --git a/src/shared/blkid-util.c b/src/shared/blkid-util.c new file mode 100644 index 0000000000..377a277851 --- /dev/null +++ b/src/shared/blkid-util.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#if HAVE_BLKID + +#include "blkid-util.h" +#include "string-util.h" + +int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret) { + const char *s; + + assert(p); + + s = blkid_partition_get_uuid(p); + if (isempty(s)) + return -ENXIO; + + return sd_id128_from_string(s, ret); +} + +int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret) { + const char *s; + + assert(p); + + s = blkid_partition_get_type_string(p); + if (isempty(s)) + return -ENXIO; + + return sd_id128_from_string(s, ret); +} + +#endif diff --git a/src/shared/blkid-util.h b/src/shared/blkid-util.h index abc4b6166d..fab4ab2987 100644 --- a/src/shared/blkid-util.h +++ b/src/shared/blkid-util.h @@ -2,38 +2,18 @@ #pragma once #if HAVE_BLKID -# include -# include "sd-id128.h" +#include -# include "macro.h" -# include "string-util.h" +#include "sd-id128.h" + +#include "memory-util.h" DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(blkid_probe, blkid_free_probe, NULL); -static inline int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret) { - const char *s; +int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret); - assert(p); - - s = blkid_partition_get_uuid(p); - if (isempty(s)) - return -ENXIO; - - return sd_id128_from_string(s, ret); -} - -static inline int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret) { - const char *s; - - assert(p); - - s = blkid_partition_get_type_string(p); - if (isempty(s)) - return -ENXIO; - - return sd_id128_from_string(s, ret); -} +int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret); /* Define symbolic names for blkid_do_safeprobe() return values, since blkid only uses literal numbers. We * prefix these symbolic definitions with underscores, to not invade libblkid's namespace needlessly. */ diff --git a/src/shared/meson.build b/src/shared/meson.build index e206aba851..5fc9cdc9a5 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -12,6 +12,7 @@ shared_sources = files( 'battery-util.c', 'binfmt-util.c', 'bitmap.c', + 'blkid-util.c', 'blockdev-list.c', 'blockdev-util.c', 'bond-util.c', From 95f87834f59199790eeb76f3c20729d435d1ea69 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 21:48:39 +0200 Subject: [PATCH 6/9] shared: Make sure ip-protocol-xxx.h headers include These headers use macros from so let's make sure they include the header. --- src/shared/meson.build | 2 +- tools/generate-gperfs.py | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/shared/meson.build b/src/shared/meson.build index 5fc9cdc9a5..782f4b2625 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -279,7 +279,7 @@ gperf_file = custom_target( fname, input : ip_protocol_list_txt, output : fname, - command : [generate_gperfs, 'ip_protocol', 'IPPROTO_', '@INPUT@'], + command : [generate_gperfs, 'ip_protocol', 'IPPROTO_', '@INPUT@', ''], capture : true) fname = 'ip-protocol-from-name.h' diff --git a/tools/generate-gperfs.py b/tools/generate-gperfs.py index 1e22a61406..fc349b43fa 100755 --- a/tools/generate-gperfs.py +++ b/tools/generate-gperfs.py @@ -9,18 +9,23 @@ Generate %-from-name.gperf from %-list.txt import sys if __name__ == '__main__': - if len(sys.argv) != 4: - sys.exit(f'Usage: {sys.argv[0]} name prefix file') + if len(sys.argv) < 4: + sys.exit(f'Usage: {sys.argv[0]} name prefix file [includes...]') - name, prefix, file = sys.argv[1:] + name, prefix, file, *includes = sys.argv[1:] + includes = [f"#include {i}" for i in includes] - print("""\ -%{ -_Pragma("GCC diagnostic ignored \\"-Wimplicit-fallthrough\\"") + # Older versions of python don't allow backslashes + # in f-strings so use chr(10) for newlines and chr(92) + # for backslashes instead as a workaround. + print(f"""\ +%{{ +_Pragma("GCC diagnostic ignored {chr(92)}"-Wimplicit-fallthrough{chr(92)}"") #if __GNUC__ >= 15 -_Pragma("GCC diagnostic ignored \\"-Wzero-as-null-pointer-constant\\"") +_Pragma("GCC diagnostic ignored {chr(92)}"-Wzero-as-null-pointer-constant{chr(92)}"") #endif -%}""") +{chr(10).join(includes)} +%}}""") print(f"""\ struct {name}_name {{ const char* name; int id; }}; %null-strings From 256c4203f95bc7b9774f2e4751964ca06ca91337 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 22:39:07 +0200 Subject: [PATCH 7/9] networkd-network-gperf.gperf: Add various missing includes We currently include these transitively but to allow using IWYU to remove headers later, let's add these as direct includes so the IWYU changes don't break compilation. --- src/network/networkd-network-gperf.gperf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 2b61f3b744..aa99829638 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -4,12 +4,14 @@ _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") #if __GNUC__ >= 15 _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #endif +#include #include #include #include "conf-parser.h" #include "in-addr-prefix-util.h" #include "net-condition.h" +#include "netif-sriov.h" #include "networkd-address-generation.h" #include "networkd-address-label.h" #include "networkd-address.h" @@ -38,6 +40,7 @@ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #include "networkd-routing-policy-rule.h" #include "networkd-sriov.h" #include "qdisc.h" +#include "socket-util.h" #include "tclass.h" #include "vlan-util.h" From a0233fcd86b8ccdb5104cd4a37b0ee2cc9947654 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 30 Apr 2025 22:09:37 +0200 Subject: [PATCH 8/9] socket-util: Replace sockaddr length macros with functions There's no need for these to be macros, let's just make them regular functions instead. --- src/basic/socket-util.c | 48 ++++++++++++++++++++ src/basic/socket-util.h | 57 ++---------------------- src/libsystemd-network/dhcp-network.c | 4 +- src/libsystemd/sd-bus/sd-bus.c | 2 +- src/libsystemd/sd-journal/journal-send.c | 2 +- src/libsystemd/sd-resolve/test-resolve.c | 2 +- src/mountfsd/mountfsd-manager.c | 2 +- src/nspawn/nspawn.c | 2 +- src/nsresourced/nsresourced-manager.c | 2 +- src/resolve/resolved-dns-server.c | 2 +- src/resolve/resolved-dns-stream.c | 2 +- src/resolve/resolved-dns-stub.c | 2 +- src/resolve/test-resolved-stream.c | 4 +- src/shared/local-addresses.c | 6 +-- src/shared/plymouth-util.c | 2 +- src/ssh-generator/ssh-proxy.c | 2 +- src/test/test-fileio.c | 2 +- src/test/test-mempress.c | 2 +- src/test/test-socket-util.c | 10 ++--- src/udev/udev-ctrl.c | 2 +- src/userdb/userdbd-manager.c | 2 +- 21 files changed, 78 insertions(+), 81 deletions(-) diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index b86b67e783..61a77370eb 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -1350,6 +1351,53 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf, return memcpy_safe(buf, CMSG_DATA(cmsg), buf_len); } +size_t sockaddr_ll_len(const struct sockaddr_ll *sa) { + /* Certain hardware address types (e.g Infiniband) do not fit into sll_addr + * (8 bytes) and run over the structure. This function returns the correct size that + * must be passed to kernel. */ + + assert(sa->sll_family == AF_PACKET); + + size_t mac_len = sizeof(sa->sll_addr); + + if (be16toh(sa->sll_hatype) == ARPHRD_ETHER) + mac_len = MAX(mac_len, (size_t) ETH_ALEN); + if (be16toh(sa->sll_hatype) == ARPHRD_INFINIBAND) + mac_len = MAX(mac_len, (size_t) INFINIBAND_ALEN); + + return offsetof(struct sockaddr_ll, sll_addr) + mac_len; +} + +size_t sockaddr_un_len(const struct sockaddr_un *sa) { + /* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */ + + assert(sa->sun_family == AF_UNIX); + + return offsetof(struct sockaddr_un, sun_path) + + (sa->sun_path[0] == 0 ? + 1 + strnlen(sa->sun_path+1, sizeof(sa->sun_path)-1) : + strnlen(sa->sun_path, sizeof(sa->sun_path))+1); +} + +size_t sockaddr_len(const union sockaddr_union *sa) { + switch (sa->sa.sa_family) { + case AF_INET: + return sizeof(struct sockaddr_in); + case AF_INET6: + return sizeof(struct sockaddr_in6); + case AF_UNIX: + return sockaddr_un_len(&sa->un); + case AF_PACKET: + return sockaddr_ll_len(&sa->ll); + case AF_NETLINK: + return sizeof(struct sockaddr_nl); + case AF_VSOCK: + return sizeof(struct sockaddr_vm); + default: + assert_not_reached(); + } +} + int socket_ioctl_fd(void) { int fd; diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h index d0aedb524e..a69277c639 100644 --- a/src/basic/socket-util.h +++ b/src/basic/socket-util.h @@ -238,62 +238,11 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf, (size) == CMSG_ALIGN(size) ? 1 : -1]; \ } -/* - * Certain hardware address types (e.g Infiniband) do not fit into sll_addr - * (8 bytes) and run over the structure. This macro returns the correct size that - * must be passed to kernel. - */ -#define SOCKADDR_LL_LEN(sa) \ - ({ \ - const struct sockaddr_ll *_sa = &(sa); \ - size_t _mac_len = sizeof(_sa->sll_addr); \ - assert(_sa->sll_family == AF_PACKET); \ - if (be16toh(_sa->sll_hatype) == ARPHRD_ETHER) \ - _mac_len = MAX(_mac_len, (size_t) ETH_ALEN); \ - if (be16toh(_sa->sll_hatype) == ARPHRD_INFINIBAND) \ - _mac_len = MAX(_mac_len, (size_t) INFINIBAND_ALEN); \ - offsetof(struct sockaddr_ll, sll_addr) + _mac_len; \ - }) +size_t sockaddr_ll_len(const struct sockaddr_ll *sa); -/* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */ -#define SOCKADDR_UN_LEN(sa) \ - ({ \ - const struct sockaddr_un *_sa = &(sa); \ - assert(_sa->sun_family == AF_UNIX); \ - offsetof(struct sockaddr_un, sun_path) + \ - (_sa->sun_path[0] == 0 ? \ - 1 + strnlen(_sa->sun_path+1, sizeof(_sa->sun_path)-1) : \ - strnlen(_sa->sun_path, sizeof(_sa->sun_path))+1); \ - }) +size_t sockaddr_un_len(const struct sockaddr_un *sa); -#define SOCKADDR_LEN(saddr) \ - ({ \ - const union sockaddr_union *__sa = &(saddr); \ - size_t _len; \ - switch (__sa->sa.sa_family) { \ - case AF_INET: \ - _len = sizeof(struct sockaddr_in); \ - break; \ - case AF_INET6: \ - _len = sizeof(struct sockaddr_in6); \ - break; \ - case AF_UNIX: \ - _len = SOCKADDR_UN_LEN(__sa->un); \ - break; \ - case AF_PACKET: \ - _len = SOCKADDR_LL_LEN(__sa->ll); \ - break; \ - case AF_NETLINK: \ - _len = sizeof(struct sockaddr_nl); \ - break; \ - case AF_VSOCK: \ - _len = sizeof(struct sockaddr_vm); \ - break; \ - default: \ - assert_not_reached(); \ - } \ - _len; \ - }) +size_t sockaddr_len(const union sockaddr_union *sa); int socket_ioctl_fd(void); diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c index e9e500623d..207f68a5e6 100644 --- a/src/libsystemd-network/dhcp-network.c +++ b/src/libsystemd-network/dhcp-network.c @@ -136,7 +136,7 @@ static int _bind_raw_socket( /* We may overflow link->ll. link->ll_buffer ensures we have enough space. */ memcpy(link->ll.sll_addr, bcast_addr->bytes, bcast_addr->length); - r = bind(s, &link->sa, SOCKADDR_LL_LEN(link->ll)); + r = bind(s, &link->sa, sockaddr_ll_len(&link->ll)); if (r < 0) return -errno; @@ -258,7 +258,7 @@ int dhcp_network_send_raw_socket( assert(packet); assert(len > 0); - if (sendto(s, packet, len, 0, &link->sa, SOCKADDR_LL_LEN(link->ll)) < 0) + if (sendto(s, packet, len, 0, &link->sa, sockaddr_ll_len(&link->ll)) < 0) return -errno; return 0; diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index db8c19e451..bbde421ebc 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -1030,7 +1030,7 @@ static int parse_container_unix_address(sd_bus *b, const char **p, char **guid) /* Note that we use the old /var/run prefix here, to increase compatibility with really old containers */ .sun_path = "/var/run/dbus/system_bus_socket", }; - b->sockaddr_size = SOCKADDR_UN_LEN(b->sockaddr.un); + b->sockaddr_size = sockaddr_un_len(&b->sockaddr.un); b->is_local = false; return 0; diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c index 012592b4cd..d043e1882d 100644 --- a/src/libsystemd/sd-journal/journal-send.c +++ b/src/libsystemd/sd-journal/journal-send.c @@ -230,7 +230,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) { }; struct msghdr mh = { .msg_name = (struct sockaddr*) &sa.sa, - .msg_namelen = SOCKADDR_UN_LEN(sa.un), + .msg_namelen = sockaddr_un_len(&sa.un), }; ssize_t k; bool have_syslog_identifier = false; diff --git a/src/libsystemd/sd-resolve/test-resolve.c b/src/libsystemd/sd-resolve/test-resolve.c index 829e13ea69..7a599925f4 100644 --- a/src/libsystemd/sd-resolve/test-resolve.c +++ b/src/libsystemd/sd-resolve/test-resolve.c @@ -84,7 +84,7 @@ int main(int argc, char *argv[]) { /* Make an address -> name query */ sa.in.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71"); - r = sd_resolve_getnameinfo(resolve, &q2, &sa.sa, SOCKADDR_LEN(sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL); + r = sd_resolve_getnameinfo(resolve, &q2, &sa.sa, sockaddr_len(&sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL); if (r < 0) log_error_errno(r, "sd_resolve_getnameinfo(): %m"); diff --git a/src/mountfsd/mountfsd-manager.c b/src/mountfsd/mountfsd-manager.c index 9b10f15937..0d24e2d696 100644 --- a/src/mountfsd/mountfsd-manager.c +++ b/src/mountfsd/mountfsd-manager.c @@ -256,7 +256,7 @@ int manager_startup(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); if (listen(m->listen_fd, SOMAXCONN) < 0) diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index b1eeef335d..dd9649d71e 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -3660,7 +3660,7 @@ static int setup_notify_child(const void *directory) { (void) sockaddr_un_unlink(&sa.un); WITH_UMASK(0577) { /* only set "w" bit, which is all that's necessary for connecting from the container */ - r = bind(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)); + r = bind(fd, &sa.sa, sockaddr_un_len(&sa.un)); if (r < 0) return log_error_errno(errno, "bind(" NSPAWN_NOTIFY_SOCKET_PATH ") failed: %m"); } diff --git a/src/nsresourced/nsresourced-manager.c b/src/nsresourced/nsresourced-manager.c index 9849d63b0a..ee52f09f84 100644 --- a/src/nsresourced/nsresourced-manager.c +++ b/src/nsresourced/nsresourced-manager.c @@ -445,7 +445,7 @@ static int manager_make_listen_socket(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); r = mkdir_p("/run/systemd/userdb", 0755); diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c index 36b7f74813..5996d9bcc6 100644 --- a/src/resolve/resolved-dns-server.c +++ b/src/resolve/resolved-dns-server.c @@ -1274,7 +1274,7 @@ int dns_server_is_accessible(DnsServer *s) { return r; } - r = RET_NERRNO(connect(fd, &sa.sa, SOCKADDR_LEN(sa))); + r = RET_NERRNO(connect(fd, &sa.sa, sockaddr_len(&sa))); if (!IN_SET(r, 0, -ENETUNREACH, diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index 41c31c5a41..03c6cd7cf4 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -572,7 +572,7 @@ int dns_stream_new( if (tfo_address) { s->tfo_address = *tfo_address; - s->tfo_salen = SOCKADDR_LEN(*tfo_address); + s->tfo_salen = sockaddr_len(tfo_address); } *ret = TAKE_PTR(s); diff --git a/src/resolve/resolved-dns-stub.c b/src/resolve/resolved-dns-stub.c index 08b35690ba..053365f7fa 100644 --- a/src/resolve/resolved-dns-stub.c +++ b/src/resolve/resolved-dns-stub.c @@ -1322,7 +1322,7 @@ static int manager_dns_stub_fd_extra(Manager *m, DnsStubListenerExtra *l, int ty log_debug_errno(r, "Failed to enable fragment size reception, ignoring: %m"); } - r = RET_NERRNO(bind(fd, &sa.sa, SOCKADDR_LEN(sa))); + r = RET_NERRNO(bind(fd, &sa.sa, sockaddr_len(&sa))); if (r < 0) goto fail; diff --git a/src/resolve/test-resolved-stream.c b/src/resolve/test-resolved-stream.c index ef5c2763ec..b5e8ce9f95 100644 --- a/src/resolve/test-resolved-stream.c +++ b/src/resolve/test-resolved-stream.c @@ -111,7 +111,7 @@ static void *tcp_dns_server(void *p) { assert_se((bindfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0); assert_se(setsockopt(bindfd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) >= 0); - assert_se(bind(bindfd, &server_address.sa, SOCKADDR_LEN(server_address)) >= 0); + assert_se(bind(bindfd, &server_address.sa, sockaddr_len(&server_address)) >= 0); assert_se(listen(bindfd, 1) >= 0); assert_se((acceptfd = accept(bindfd, NULL, NULL)) >= 0); server_handle(acceptfd); @@ -246,7 +246,7 @@ static void test_dns_stream(bool tls) { assert_se((clientfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0); for (int i = 0; i < 100; i++) { - r = connect(clientfd, &server_address.sa, SOCKADDR_LEN(server_address)); + r = connect(clientfd, &server_address.sa, sockaddr_len(&server_address)); if (r >= 0) break; usleep_safe(EVENT_TIMEOUT_USEC / 100); diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c index 1874bcbcee..85269d4d70 100644 --- a/src/shared/local-addresses.c +++ b/src/shared/local-addresses.c @@ -680,16 +680,16 @@ int local_outbounds( * make use of the binding and return it. Hence, let's not unnecessarily fail early here: we * can still easily detect if the auto-binding worked or not, by comparing the bound IP * address with zero — which we do below. */ - if (connect(fd, &sa.sa, SOCKADDR_LEN(sa)) < 0) + if (connect(fd, &sa.sa, sockaddr_len(&sa)) < 0) log_debug_errno(errno, "Failed to connect SOCK_DGRAM socket to gateway, ignoring: %m"); /* Let's now read the socket address of the socket. A routing decision should have been * made. Let's verify that and use the data. */ - salen = SOCKADDR_LEN(sa); + salen = sockaddr_len(&sa); if (getsockname(fd, &sa.sa, &salen) < 0) return -errno; assert(sa.sa.sa_family == i->family); - assert(salen == SOCKADDR_LEN(sa)); + assert(salen == sockaddr_len(&sa)); switch (i->family) { diff --git a/src/shared/plymouth-util.c b/src/shared/plymouth-util.c index 8ef52d90c8..72f282f9bd 100644 --- a/src/shared/plymouth-util.c +++ b/src/shared/plymouth-util.c @@ -17,7 +17,7 @@ int plymouth_connect(int flags) { if (fd < 0) return -errno; - if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) + if (connect(fd, &sa.sa, sockaddr_un_len(&sa.un)) < 0) return -errno; return TAKE_FD(fd); diff --git a/src/ssh-generator/ssh-proxy.c b/src/ssh-generator/ssh-proxy.c index 3c21f8d898..86db2e1cde 100644 --- a/src/ssh-generator/ssh-proxy.c +++ b/src/ssh-generator/ssh-proxy.c @@ -37,7 +37,7 @@ static int process_vsock_cid(unsigned cid, const char *port) { if (fd < 0) return log_error_errno(errno, "Failed to allocate AF_VSOCK socket: %m"); - if (connect(fd, &sa.sa, SOCKADDR_LEN(sa)) < 0) + if (connect(fd, &sa.sa, sockaddr_len(&sa)) < 0) return log_error_errno(errno, "Failed to connect to vsock:%u:%u: %m", sa.vm.svm_cid, sa.vm.svm_port); /* OpenSSH wants us to send a single byte along with the file descriptor, hence do so */ diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 97eeb59afb..731a37caf1 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -928,7 +928,7 @@ TEST(read_full_file_socket) { assert_se(sockaddr_un_set_path(&sa.un, j) >= 0); - assert_se(bind(listener, &sa.sa, SOCKADDR_UN_LEN(sa.un)) >= 0); + assert_se(bind(listener, &sa.sa, sockaddr_un_len(&sa.un)) >= 0); assert_se(listen(listener, 1) >= 0); /* Make sure the socket doesn't fit into a struct sockaddr_un, but we can still access it */ diff --git a/src/test/test-mempress.c b/src/test/test-mempress.c index 6bbc485de6..6f4e658616 100644 --- a/src/test/test-mempress.c +++ b/src/test/test-mempress.c @@ -86,7 +86,7 @@ TEST(fake_pressure) { socket_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(socket_fd >= 0); assert_se(sockaddr_un_set_path(&sa.un, k) >= 0); - assert_se(bind(socket_fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) >= 0); + assert_se(bind(socket_fd, &sa.sa, sockaddr_un_len(&sa.un)) >= 0); assert_se(listen(socket_fd, 1) >= 0); /* Ideally we'd just allocate this on the stack, but AddressSanitizer doesn't like it if threads diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c index 63bbb1d1d2..acf11f3639 100644 --- a/src/test/test-socket-util.c +++ b/src/test/test-socket-util.c @@ -134,8 +134,8 @@ TEST(sockaddr_un_len) { .sun_path = "\0foobar", }; - assert_se(SOCKADDR_UN_LEN(fs) == offsetof(struct sockaddr_un, sun_path) + strlen(fs.sun_path) + 1); - assert_se(SOCKADDR_UN_LEN(abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1)); + assert_se(sockaddr_un_len(&fs) == offsetof(struct sockaddr_un, sun_path) + strlen(fs.sun_path) + 1); + assert_se(sockaddr_un_len(&abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1)); } TEST(in_addr_is_multicast) { @@ -564,14 +564,14 @@ TEST(sockaddr_un_set_path) { fd1 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(fd1 >= 0); - assert_se(bind(fd1, &sa.sa, SOCKADDR_LEN(sa)) >= 0); + assert_se(bind(fd1, &sa.sa, sockaddr_len(&sa)) >= 0); assert_se(listen(fd1, 1) >= 0); sh = unlink_and_free(sh); /* remove temporary symlink */ fd2 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(fd2 >= 0); - assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) < 0); + assert_se(connect(fd2, &sa.sa, sockaddr_len(&sa)) < 0); assert_se(errno == ENOENT); /* we removed the symlink, must fail */ free(j); @@ -581,7 +581,7 @@ TEST(sockaddr_un_set_path) { assert_se(fd3 > 0); assert_se(sockaddr_un_set_path(&sa.un, FORMAT_PROC_FD_PATH(fd3)) >= 0); /* connect via O_PATH instead, circumventing 108ch limit */ - assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) >= 0); + assert_se(connect(fd2, &sa.sa, sockaddr_len(&sa)) >= 0); } TEST(getpeerpidref) { diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 42e42ee336..1914bf7929 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -73,7 +73,7 @@ int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) { .sun_path = "/run/udev/control", }; - uctrl->addrlen = SOCKADDR_UN_LEN(uctrl->saddr.un); + uctrl->addrlen = sockaddr_un_len(&uctrl->saddr.un); *ret = TAKE_PTR(uctrl); return 0; diff --git a/src/userdb/userdbd-manager.c b/src/userdb/userdbd-manager.c index 63a53f0e00..e30ec8ed75 100644 --- a/src/userdb/userdbd-manager.c +++ b/src/userdb/userdbd-manager.c @@ -287,7 +287,7 @@ static int manager_make_listen_socket(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); FOREACH_STRING(alias, From 7e674d22d33511e76cff0de5adb2e3bdfcb6a091 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Thu, 1 May 2025 14:39:58 +0200 Subject: [PATCH 9/9] test: Remove unused sources from tests --- src/shared/meson.build | 5 ++--- src/test/meson.build | 9 +++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/shared/meson.build b/src/shared/meson.build index 782f4b2625..298dbcf18e 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -304,9 +304,8 @@ target2 = custom_target( command : [awk, '-f', '@INPUT0@', '@INPUT1@'], capture : true) -shared_generated_gperf_headers = [target1, target2] -generated_sources += shared_generated_gperf_headers -shared_sources += shared_generated_gperf_headers +generated_sources += [target1, target2] +shared_sources += [target1, target2] fname = 'ethtool-link-mode.h' ethtool_link_mode_h = custom_target( diff --git a/src/test/meson.build b/src/test/meson.build index 480ff5e412..8640932d67 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -225,8 +225,7 @@ executables += [ generated_gperf_headers, }, test_template + { - 'sources' : files('test-arphrd-util.c') + - generated_gperf_headers, + 'sources' : files('test-arphrd-util.c') }, test_template + { 'sources' : files('test-ask-password-api.c'), @@ -249,8 +248,7 @@ executables += [ 'type' : 'manual', }, test_template + { - 'sources' : files('test-cap-list.c') + - generated_gperf_headers, + 'sources' : files('test-cap-list.c'), 'dependencies' : libcap, }, test_template + { @@ -313,8 +311,7 @@ executables += [ 'timeout' : 180, }, test_template + { - 'sources' : files('test-ip-protocol-list.c') + - shared_generated_gperf_headers, + 'sources' : files('test-ip-protocol-list.c'), }, test_template + { 'sources' : files('test-ipcrm.c'),