From: noxiouz Date: Thu, 19 Mar 2026 11:50:26 +0000 (+0000) Subject: network: add unmanaged interface checks to Link.Renew and Link.ForceRenew Varlink... X-Git-Tag: v261-rc1~767^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F40780%2Fhead;p=thirdparty%2Fsystemd.git network: add unmanaged interface checks to Link.Renew and Link.ForceRenew Varlink methods The D-Bus counterparts (bus_link_method_renew, bus_link_method_force_renew) reject calls on unmanaged interfaces with BUS_ERROR_UNMANAGED_INTERFACE, but the Varlink methods silently succeed. Add the same guard to both Varlink methods, returning io.systemd.Network.Link.InterfaceUnmanaged, and declare the error in the IDL. Co-Authored-By: Claude Opus 4.6 --- diff --git a/src/network/networkctl-link-info.c b/src/network/networkctl-link-info.c index 05990bffbc8..0b40b442537 100644 --- a/src/network/networkctl-link-info.c +++ b/src/network/networkctl-link-info.c @@ -2,8 +2,8 @@ #include -#include "sd-netlink.h" #include "sd-json.h" +#include "sd-netlink.h" #include "alloc-util.h" #include "device-util.h" diff --git a/src/network/networkd-link-varlink.c b/src/network/networkd-link-varlink.c index 5864132ef82..c802c7fb43f 100644 --- a/src/network/networkd-link-varlink.c +++ b/src/network/networkd-link-varlink.c @@ -136,6 +136,9 @@ int vl_method_link_renew(sd_varlink *vlink, sd_json_variant *parameters, sd_varl if (r != 0) return r; + if (!link->network) + return sd_varlink_error(vlink, "io.systemd.Network.Link.InterfaceUnmanaged", NULL); + r = varlink_verify_polkit_async( vlink, manager->bus, @@ -163,6 +166,9 @@ int vl_method_link_force_renew(sd_varlink *vlink, sd_json_variant *parameters, s if (r != 0) return r; + if (!link->network) + return sd_varlink_error(vlink, "io.systemd.Network.Link.InterfaceUnmanaged", NULL); + r = varlink_verify_polkit_async( vlink, manager->bus, diff --git a/src/shared/varlink-io.systemd.Network.Link.c b/src/shared/varlink-io.systemd.Network.Link.c index 5474e5e4753..82807939e32 100644 --- a/src/shared/varlink-io.systemd.Network.Link.c +++ b/src/shared/varlink-io.systemd.Network.Link.c @@ -41,6 +41,8 @@ static SD_VARLINK_DEFINE_METHOD( VARLINK_NETWORK_INTERFACE_INPUTS, VARLINK_DEFINE_POLKIT_INPUT); +static SD_VARLINK_DEFINE_ERROR(InterfaceUnmanaged); + SD_VARLINK_DEFINE_INTERFACE( io_systemd_Network_Link, "io.systemd.Network.Link", @@ -56,6 +58,8 @@ SD_VARLINK_DEFINE_INTERFACE( &vl_method_Reconfigure, SD_VARLINK_SYMBOL_COMMENT("Describe the specified link by index or name."), &vl_method_Describe, + SD_VARLINK_SYMBOL_COMMENT("The specified interface is not managed by systemd-networkd."), + &vl_error_InterfaceUnmanaged, &vl_type_Address, &vl_type_BitRates, &vl_type_DHCPLease,