resolved: move verification that link is unmanaged into the proper bus calls
Previously, we checked only for the various SetLinkXYZ() calls on the Manager object exposed on the bus if the specified interface is managed/unmanaged by networkd (as we don't permit overriding DNS configuration via bus calls if networkd owns the device), but the equivalent SetXYZ() calls on the Link object did not have such a check. Fix that by moving the appropriate check into the latter, as the former just calls that anyway.
This commit is contained in:
parent
ba35662fbd
commit
04b764bf76
|
@ -1442,26 +1442,6 @@ static int get_any_link(Manager *m, int ifindex, Link **ret, sd_bus_error *error
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int get_unmanaged_link(Manager *m, int ifindex, Link **ret, sd_bus_error *error) {
|
||||
Link *l;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
assert(ret);
|
||||
|
||||
r = get_any_link(m, ifindex, &l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (l->flags & IFF_LOOPBACK)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_LINK_BUSY, "Link %s is loopback device.", l->name);
|
||||
if (l->is_managed)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_LINK_BUSY, "Link %s is managed.", l->name);
|
||||
|
||||
*ret = l;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int call_link_method(Manager *m, sd_bus_message *message, sd_bus_message_handler_t handler, sd_bus_error *error) {
|
||||
int ifindex, r;
|
||||
Link *l;
|
||||
|
@ -1475,7 +1455,7 @@ static int call_link_method(Manager *m, sd_bus_message *message, sd_bus_message_
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = get_unmanaged_link(m, ifindex, &l, error);
|
||||
r = get_any_link(m, ifindex, &l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
***/
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "bus-common-errors.h"
|
||||
#include "bus-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "resolve-util.h"
|
||||
|
@ -158,6 +159,17 @@ static int property_get_dnssec_supported(
|
|||
return sd_bus_message_append(reply, "b", link_dnssec_supported(l));
|
||||
}
|
||||
|
||||
static int verify_unmanaged_link(Link *l, sd_bus_error *error) {
|
||||
assert(l);
|
||||
|
||||
if (l->flags & IFF_LOOPBACK)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_LINK_BUSY, "Link %s is loopback device.", l->name);
|
||||
if (l->is_managed)
|
||||
return sd_bus_error_setf(error, BUS_ERROR_LINK_BUSY, "Link %s is managed.", l->name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||
_cleanup_free_ struct in_addr_data *dns = NULL;
|
||||
size_t allocated = 0, n = 0;
|
||||
|
@ -168,6 +180,10 @@ int bus_link_method_set_dns_servers(sd_bus_message *message, void *userdata, sd_
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_enter_container(message, 'a', "(iay)");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -249,6 +265,10 @@ int bus_link_method_set_domains(sd_bus_message *message, void *userdata, sd_bus_
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_enter_container(message, 'a', "(sb)");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -328,6 +348,10 @@ int bus_link_method_set_llmnr(sd_bus_message *message, void *userdata, sd_bus_er
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(message, "s", &llmnr);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -356,6 +380,10 @@ int bus_link_method_set_mdns(sd_bus_message *message, void *userdata, sd_bus_err
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(message, "s", &mdns);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -384,6 +412,10 @@ int bus_link_method_set_dnssec(sd_bus_message *message, void *userdata, sd_bus_e
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read(message, "s", &dnssec);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -411,6 +443,10 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
|
|||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_read_strv(message, &ntas);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -442,10 +478,15 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
|
|||
|
||||
int bus_link_method_revert(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||
Link *l = userdata;
|
||||
int r;
|
||||
|
||||
assert(message);
|
||||
assert(l);
|
||||
|
||||
r = verify_unmanaged_link(l, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
link_flush_settings(l);
|
||||
link_allocate_scopes(l);
|
||||
link_add_rrs(l, false);
|
||||
|
|
Loading…
Reference in New Issue