• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

systemd / systemd / 14766779411

30 Apr 2025 04:55PM UTC coverage: 72.225% (-0.06%) from 72.282%
14766779411

push

github

web-flow
wait-online: handle varlink connection errors while waiting for DNS (#37283)

Currently, if systemd-networkd-wait-online is started with --dns, and
systemd-resolved is not running, it will exit with an error right away.
Similarly, if systemd-resolved is restarted while waiting for DNS
configuration, systemd-networkd-wait-online will not attempt to
re-connect, and will potentially never see subsequent DNS
configurations.

Improve this by adding socket units for the systemd-resolved varlink
servers, and re-establish the connection in systemd-networkd-wait-online
when we receive `SD_VARLINK_ERROR_DISCONNECTED`.

8 of 16 new or added lines in 2 files covered. (50.0%)

5825 existing lines in 217 files now uncovered.

297168 of 411450 relevant lines covered (72.22%)

695892.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

56.76
/src/shared/bus-log-control-api.c
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2

3
#include "sd-bus.h"
4

5
#include "alloc-util.h"
6
#include "bus-get-properties.h"
7
#include "bus-log-control-api.h"
8
#include "bus-util.h"
9
#include "log.h"
10
#include "syslog-util.h"
11

12
int bus_property_get_log_level(
21✔
13
                sd_bus *bus,
14
                const char *path,
15
                const char *interface,
16
                const char *property,
17
                sd_bus_message *reply,
18
                void *userdata,
19
                sd_bus_error *error) {
20

21
        _cleanup_free_ char *t = NULL;
21✔
22
        int r;
21✔
23

24
        assert(bus);
21✔
25
        assert(reply);
21✔
26

27
        r = log_level_to_string_alloc(log_get_max_level(), &t);
21✔
28
        if (r < 0)
21✔
29
                return r;
30

31
        return sd_bus_message_append(reply, "s", t);
21✔
32
}
33

34
int bus_property_set_log_level(
13✔
35
                sd_bus *bus,
36
                const char *path,
37
                const char *interface,
38
                const char *property,
39
                sd_bus_message *value,
40
                void *userdata,
41
                sd_bus_error *error) {
42

43
        const char *t;
13✔
44
        int r;
13✔
45

46
        assert(bus);
13✔
47
        assert(value);
13✔
48

49
        r = sd_bus_message_read(value, "s", &t);
13✔
50
        if (r < 0)
13✔
51
                return r;
13✔
52

53
        r = log_level_from_string(t);
13✔
54
        if (r < 0)
13✔
UNCOV
55
                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid log level '%s'", t);
×
56

57
        log_info("Setting log level to %s.", t);
13✔
58
        log_set_max_level(r);
13✔
59

60
        return 0;
61
}
62

63
BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_log_target, "s", log_target_to_string(log_get_target()));
21✔
64

UNCOV
65
int bus_property_set_log_target(
×
66
                sd_bus *bus,
67
                const char *path,
68
                const char *interface,
69
                const char *property,
70
                sd_bus_message *value,
71
                void *userdata,
72
                sd_bus_error *error) {
73

74
        LogTarget target;
×
75
        const char *t;
×
UNCOV
76
        int r;
×
77

78
        assert(bus);
×
UNCOV
79
        assert(value);
×
80

81
        r = sd_bus_message_read(value, "s", &t);
×
82
        if (r < 0)
×
UNCOV
83
                return r;
×
84

85
        target = log_target_from_string(t);
×
86
        if (target < 0)
×
UNCOV
87
                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid log target '%s'", t);
×
88

89
        log_info("Setting log target to %s.", log_target_to_string(target));
×
UNCOV
90
        log_set_target_and_open(target);
×
91

92
        return 0;
93
}
94

UNCOV
95
BUS_DEFINE_PROPERTY_GET_GLOBAL(bus_property_get_syslog_identifier, "s", program_invocation_short_name);
×
96

97
static const sd_bus_vtable log_control_vtable[] = {
98
        SD_BUS_VTABLE_START(0),
99

100
        SD_BUS_WRITABLE_PROPERTY("LogLevel", "s", bus_property_get_log_level, bus_property_set_log_level, 0, 0),
101
        SD_BUS_WRITABLE_PROPERTY("LogTarget", "s", bus_property_get_log_target, bus_property_set_log_target, 0, 0),
102
        SD_BUS_PROPERTY("SyslogIdentifier", "s", bus_property_get_syslog_identifier, 0, 0),
103

104
        /* One of those days we might want to add a similar, second interface to cover common service
105
         * operations such as Reload(), Reexecute(), Exit() …  and maybe some properties exposing version
106
         * number and other meta-data of the service. */
107

108
        SD_BUS_VTABLE_END,
109
};
110

111
const BusObjectImplementation log_control_object = {
112
        "/org/freedesktop/LogControl1",
113
        "org.freedesktop.LogControl1",
114
        .vtables = BUS_VTABLES(log_control_vtable),
115
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc