From: Yu Watanabe Date: Tue, 21 Sep 2021 23:36:11 +0000 (+0900) Subject: network: split manager_new() into two part X-Git-Tag: v250-rc1~599^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=96243149bdb2a8e1791ad729213c3421ff73c2f4;p=thirdparty%2Fsystemd.git network: split manager_new() into two part Initialize dbus or netlink is not necessary for fuzzers. --- diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 9fb12a07f8c..d07a9bb4649 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -109,13 +109,11 @@ static int on_connected(sd_bus_message *message, void *userdata, sd_bus_error *r return 0; } -int manager_connect_bus(Manager *m) { +static int manager_connect_bus(Manager *m) { int r; assert(m); - - if (m->bus) - return 0; + assert(!m->bus); r = bus_open_system_watch_bind_with_description(&m->bus, "bus-api-network"); if (r < 0) @@ -372,28 +370,10 @@ static int signal_restart_callback(sd_event_source *s, const struct signalfd_sig return sd_event_exit(sd_event_source_get_event(s), 0); } -int manager_new(Manager **ret) { - _cleanup_(manager_freep) Manager *m = NULL; +int manager_setup(Manager *m, bool test_mode) { int r; - m = new(Manager, 1); - if (!m) - return -ENOMEM; - - *m = (Manager) { - .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL, - .online_state = _LINK_ONLINE_STATE_INVALID, - .manage_foreign_routes = true, - .manage_foreign_rules = true, - .ethtool_fd = -1, - .dhcp_duid.type = DUID_TYPE_EN, - .dhcp6_duid.type = DUID_TYPE_EN, - .duid_product_uuid.type = DUID_TYPE_UUID, - }; - - m->state_file = strdup("/run/systemd/netif/state"); - if (!m->state_file) - return -ENOMEM; + assert(m); r = sd_event_default(&m->event); if (r < 0) @@ -422,6 +402,13 @@ int manager_new(Manager **ret) { if (r < 0) return r; + if (test_mode) + return 0; + + r = manager_connect_bus(m); + if (r < 0) + return r; + r = manager_connect_udev(m); if (r < 0) return r; @@ -438,8 +425,32 @@ int manager_new(Manager **ret) { if (r < 0) return r; - *ret = TAKE_PTR(m); + m->state_file = strdup("/run/systemd/netif/state"); + if (!m->state_file) + return -ENOMEM; + + return 0; +} + +int manager_new(Manager **ret) { + _cleanup_(manager_freep) Manager *m = NULL; + m = new(Manager, 1); + if (!m) + return -ENOMEM; + + *m = (Manager) { + .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL, + .online_state = _LINK_ONLINE_STATE_INVALID, + .manage_foreign_routes = true, + .manage_foreign_rules = true, + .ethtool_fd = -1, + .dhcp_duid.type = DUID_TYPE_EN, + .dhcp6_duid.type = DUID_TYPE_EN, + .duid_product_uuid.type = DUID_TYPE_UUID, + }; + + *ret = TAKE_PTR(m); return 0; } diff --git a/src/network/networkd-manager.h b/src/network/networkd-manager.h index c80095544ad..9fce86bb04d 100644 --- a/src/network/networkd-manager.h +++ b/src/network/networkd-manager.h @@ -99,7 +99,7 @@ struct Manager { int manager_new(Manager **ret); Manager* manager_free(Manager *m); -int manager_connect_bus(Manager *m); +int manager_setup(Manager *m, bool test_mode); int manager_start(Manager *m); int manager_load_config(Manager *m); diff --git a/src/network/networkd.c b/src/network/networkd.c index ff3380c82cf..b79cac1418c 100644 --- a/src/network/networkd.c +++ b/src/network/networkd.c @@ -77,9 +77,9 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Could not create manager: %m"); - r = manager_connect_bus(m); + r = manager_setup(m, /* test_mode = */ false); if (r < 0) - return log_error_errno(r, "Could not connect to bus: %m"); + return log_error_errno(r, "Could not setup manager: %m"); r = manager_parse_config_file(m); if (r < 0) diff --git a/src/network/test-network.c b/src/network/test-network.c index d04a7e35e8e..5498d9ef042 100644 --- a/src/network/test-network.c +++ b/src/network/test-network.c @@ -270,6 +270,7 @@ int main(void) { test_dhcp_hostname_shorten_overlong(); assert_se(manager_new(&manager) >= 0); + assert_se(manager_setup(manager, /* test_mode = */ true) >= 0); test_route_tables(manager);