From: Zbigniew Jędrzejewski-Szmek Date: Tue, 4 Feb 2020 07:42:50 +0000 (+0100) Subject: network,udev: refuse .link and .network settings with no matches X-Git-Tag: v245-rc1~19^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F14761%2Fhead;p=thirdparty%2Fsystemd.git network,udev: refuse .link and .network settings with no matches Two releases ago we started warning about this, and I think it is now to turn this into a hard error. People get bitten by this every once in a while, and there doesn't see to be any legitimate use case where the same .link or .network files should be applied to _all_ interfaces, since in particular that configuration would apply both to lo and any other interfaces. And if for whatever reason that is actually desired, OriginalName=* or Name=* can be easily added to silence the warning and achieve the effect. (The case described in #12098 is particularly nasty: 'echo -n >foo.network' creates a mask file, 'echo >foo.network' creates a "match all" file.) Fixes #717, #12098 for realz now. --- diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 4fd48be52a0..ed59584fd1f 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -164,10 +164,10 @@ int network_verify(Network *network) { strv_isempty(network->match_path) && strv_isempty(network->match_driver) && strv_isempty(network->match_type) && strv_isempty(network->match_name) && strv_isempty(network->match_property) && strv_isempty(network->match_ssid) && !network->conditions) - log_warning("%s: No valid settings found in the [Match] section. " - "The file will match all interfaces. " - "If that is intended, please add Name=* in the [Match] section.", - network->filename); + return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), + "%s: No valid settings found in the [Match] section, ignoring file. " + "To match all interfaces, add Name=* in the [Match] section.", + network->filename); /* skip out early if configuration does not match the environment */ if (!condition_test_list(network->conditions, NULL, NULL, NULL)) diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c index 4a44edfc014..dfe9b9f3130 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -165,11 +165,12 @@ int link_load_one(link_config_ctx *ctx, const char *filename) { if (set_isempty(link->match_mac) && set_isempty(link->match_permanent_mac) && strv_isempty(link->match_path) && strv_isempty(link->match_driver) && strv_isempty(link->match_type) && - strv_isempty(link->match_name) && strv_isempty(link->match_property) && !link->conditions) - log_warning("%s: No valid settings found in the [Match] section. " - "The file will match all interfaces. " - "If that is intended, please add OriginalName=* in the [Match] section.", + strv_isempty(link->match_name) && strv_isempty(link->match_property) && !link->conditions) { + log_warning("%s: No valid settings found in the [Match] section, ignoring file. " + "To match all interfaces, add OriginalName=* in the [Match] section.", filename); + return 0; + } if (!condition_test_list(link->conditions, NULL, NULL, NULL)) { log_debug("%s: Conditions do not match the system environment, skipping.", filename);