Skip to content

Commit 4e11ddf

Browse files
committed
network: add DBus method to set DNS server with port number and SNI
1 parent 87d6489 commit 4e11ddf

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

src/network/networkd-link-bus.c

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_
114114
return sd_bus_reply_method_return(message, NULL);
115115
}
116116

117-
int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_bus_error *error) {
117+
static int bus_link_method_set_dns_servers_internal(sd_bus_message *message, void *userdata, sd_bus_error *error, bool extended) {
118118
struct in_addr_full **dns = NULL;
119119
size_t allocated = 0, n = 0;
120120
Link *l = userdata;
@@ -127,19 +127,21 @@ int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_
127127
if (r < 0)
128128
return r;
129129

130-
r = sd_bus_message_enter_container(message, 'a', "(iay)");
130+
r = sd_bus_message_enter_container(message, 'a', extended ? "(iayqs)" : "(iay)");
131131
if (r < 0)
132132
return r;
133133

134134
for (;;) {
135+
const char *server_name = NULL;
135136
union in_addr_union a;
137+
uint16_t port = 0;
138+
const void *d;
136139
int family;
137140
size_t sz;
138-
const void *d;
139141

140142
assert_cc(sizeof(int) == sizeof(int32_t));
141143

142-
r = sd_bus_message_enter_container(message, 'r', "iay");
144+
r = sd_bus_message_enter_container(message, 'r', extended ? "iayqs" : "iay");
143145
if (r < 0)
144146
goto finalize;
145147
if (r == 0)
@@ -167,6 +169,19 @@ int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_
167169
goto finalize;
168170
}
169171

172+
if (extended) {
173+
r = sd_bus_message_read(message, "q", &port);
174+
if (r < 0)
175+
goto finalize;
176+
177+
if (IN_SET(port, 53, 853))
178+
port = 0;
179+
180+
r = sd_bus_message_read(message, "s", &server_name);
181+
if (r < 0)
182+
goto finalize;
183+
}
184+
170185
r = sd_bus_message_exit_container(message);
171186
if (r < 0)
172187
goto finalize;
@@ -177,7 +192,7 @@ int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_
177192
}
178193

179194
memcpy(&a, d, sz);
180-
r = in_addr_full_new(family, &a, 0, 0, NULL, dns + n);
195+
r = in_addr_full_new(family, &a, port, 0, server_name, dns + n);
181196
if (r < 0)
182197
goto finalize;
183198

@@ -218,6 +233,14 @@ int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_
218233
return r;
219234
}
220235

236+
int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_bus_error *error) {
237+
return bus_link_method_set_dns_servers_internal(message, userdata, error, false);
238+
}
239+
240+
int bus_link_method_set_dns_servers_ex(sd_bus_message *message, void *userdata, sd_bus_error *error) {
241+
return bus_link_method_set_dns_servers_internal(message, userdata, error, true);
242+
}
243+
221244
int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_error *error) {
222245
_cleanup_(ordered_set_freep) OrderedSet *search_domains = NULL, *route_domains = NULL;
223246
Link *l = userdata;
@@ -696,6 +719,7 @@ const sd_bus_vtable link_vtable[] = {
696719

697720
SD_BUS_METHOD("SetNTP", "as", NULL, bus_link_method_set_ntp_servers, SD_BUS_VTABLE_UNPRIVILEGED),
698721
SD_BUS_METHOD("SetDNS", "a(iay)", NULL, bus_link_method_set_dns_servers, SD_BUS_VTABLE_UNPRIVILEGED),
722+
SD_BUS_METHOD("SetDNSEx", "a(iayqs)", NULL, bus_link_method_set_dns_servers_ex, SD_BUS_VTABLE_UNPRIVILEGED),
699723
SD_BUS_METHOD("SetDomains", "a(sb)", NULL, bus_link_method_set_domains, SD_BUS_VTABLE_UNPRIVILEGED),
700724
SD_BUS_METHOD("SetDefaultRoute", "b", NULL, bus_link_method_set_default_route, SD_BUS_VTABLE_UNPRIVILEGED),
701725
SD_BUS_METHOD("SetLLMNR", "s", NULL, bus_link_method_set_llmnr, SD_BUS_VTABLE_UNPRIVILEGED),

src/network/networkd-link-bus.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ int property_get_address_state(sd_bus *bus, const char *path, const char *interf
2121

2222
int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_bus_error *error);
2323
int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_bus_error *error);
24+
int bus_link_method_set_dns_servers_ex(sd_bus_message *message, void *userdata, sd_bus_error *error);
2425
int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_error *error);
2526
int bus_link_method_set_default_route(sd_bus_message *message, void *userdata, sd_bus_error *error);
2627
int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_error *error);

src/network/networkd-manager-bus.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ static int bus_method_set_link_dns_servers(sd_bus_message *message, void *userda
151151
return call_link_method(userdata, message, bus_link_method_set_dns_servers, error);
152152
}
153153

154+
static int bus_method_set_link_dns_servers_ex(sd_bus_message *message, void *userdata, sd_bus_error *error) {
155+
return call_link_method(userdata, message, bus_link_method_set_dns_servers_ex, error);
156+
}
157+
154158
static int bus_method_set_link_domains(sd_bus_message *message, void *userdata, sd_bus_error *error) {
155159
return call_link_method(userdata, message, bus_link_method_set_domains, error);
156160
}
@@ -243,6 +247,7 @@ const sd_bus_vtable manager_vtable[] = {
243247
SD_BUS_METHOD("GetLinkByIndex", "i", "so", method_get_link_by_index, SD_BUS_VTABLE_UNPRIVILEGED),
244248
SD_BUS_METHOD("SetLinkNTP", "ias", NULL, bus_method_set_link_ntp_servers, SD_BUS_VTABLE_UNPRIVILEGED),
245249
SD_BUS_METHOD("SetLinkDNS", "ia(iay)", NULL, bus_method_set_link_dns_servers, SD_BUS_VTABLE_UNPRIVILEGED),
250+
SD_BUS_METHOD("SetLinkDNSEx", "ia(iayqs)", NULL, bus_method_set_link_dns_servers_ex, SD_BUS_VTABLE_UNPRIVILEGED),
246251
SD_BUS_METHOD("SetLinkDomains", "ia(sb)", NULL, bus_method_set_link_domains, SD_BUS_VTABLE_UNPRIVILEGED),
247252
SD_BUS_METHOD("SetLinkDefaultRoute", "ib", NULL, bus_method_set_link_default_route, SD_BUS_VTABLE_UNPRIVILEGED),
248253
SD_BUS_METHOD("SetLinkLLMNR", "is", NULL, bus_method_set_link_llmnr, SD_BUS_VTABLE_UNPRIVILEGED),

0 commit comments

Comments
 (0)