aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-12-04 14:12:24 +0100
committerGitHub <noreply@github.com>2019-12-04 14:12:24 +0100
commitb7aa08ca15d0080bfbdc8820b8b9b617b550a0e0 (patch)
treeb54d054faa39d0f02fefd1fc04d8eef0f8878aaf
parentMerge pull request #13953 from SpencerMichaels/systemd-boot-efistub-id-fix (diff)
parentshared/install: warn about unkown sections in unit files (diff)
downloadsystemd-b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0.tar.xz
systemd-b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0.zip
Merge pull request #14111 from keszybz/unknown-section-warning
Warn about unknown sections
-rw-r--r--src/network/netdev/bond.c2
-rw-r--r--src/network/netdev/bridge.c2
-rw-r--r--src/network/netdev/dummy.c2
-rw-r--r--src/network/netdev/fou-tunnel.c2
-rw-r--r--src/network/netdev/geneve.c2
-rw-r--r--src/network/netdev/ipvlan.c4
-rw-r--r--src/network/netdev/l2tp-tunnel.c2
-rw-r--r--src/network/netdev/macsec.c2
-rw-r--r--src/network/netdev/macvlan.c4
-rw-r--r--src/network/netdev/netdev.c4
-rw-r--r--src/network/netdev/netdev.h29
-rw-r--r--src/network/netdev/netdevsim.c2
-rw-r--r--src/network/netdev/nlmon.c2
-rw-r--r--src/network/netdev/tunnel.c20
-rw-r--r--src/network/netdev/tuntap.c4
-rw-r--r--src/network/netdev/vcan.c2
-rw-r--r--src/network/netdev/veth.c2
-rw-r--r--src/network/netdev/vlan.c2
-rw-r--r--src/network/netdev/vrf.c2
-rw-r--r--src/network/netdev/vxcan.c2
-rw-r--r--src/network/netdev/vxlan.c2
-rw-r--r--src/network/netdev/wireguard.c2
-rw-r--r--src/network/netdev/xfrm.c2
-rw-r--r--src/shared/conf-parser.c19
-rw-r--r--src/shared/conf-parser.h7
-rw-r--r--src/shared/install.c16
-rw-r--r--src/test/test-conf-parser.c20
27 files changed, 112 insertions, 49 deletions
diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c
index 185b155440e..8df39e35843 100644
--- a/src/network/netdev/bond.c
+++ b/src/network/netdev/bond.c
@@ -587,7 +587,7 @@ const NetDevVTable bond_vtable = {
.object_size = sizeof(Bond),
.init = bond_init,
.done = bond_done,
- .sections = "Match\0NetDev\0Bond\0",
+ .sections = NETDEV_COMMON_SECTIONS "Bond\0",
.fill_message_create = netdev_bond_fill_message_create,
.create_type = NETDEV_CREATE_MASTER,
.generate_mac = true,
diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c
index 59a40faef8f..6b8f9944612 100644
--- a/src/network/netdev/bridge.c
+++ b/src/network/netdev/bridge.c
@@ -355,7 +355,7 @@ static void bridge_init(NetDev *n) {
const NetDevVTable bridge_vtable = {
.object_size = sizeof(Bridge),
.init = bridge_init,
- .sections = "Match\0NetDev\0Bridge\0",
+ .sections = NETDEV_COMMON_SECTIONS "Bridge\0",
.post_create = netdev_bridge_post_create,
.create_type = NETDEV_CREATE_MASTER,
};
diff --git a/src/network/netdev/dummy.c b/src/network/netdev/dummy.c
index 23c733cbe7b..e06dc02f3aa 100644
--- a/src/network/netdev/dummy.c
+++ b/src/network/netdev/dummy.c
@@ -4,7 +4,7 @@
const NetDevVTable dummy_vtable = {
.object_size = sizeof(Dummy),
- .sections = "Match\0NetDev\0",
+ .sections = NETDEV_COMMON_SECTIONS,
.create_type = NETDEV_CREATE_INDEPENDENT,
.generate_mac = true,
};
diff --git a/src/network/netdev/fou-tunnel.c b/src/network/netdev/fou-tunnel.c
index 7627ccee9cd..3cc273c7fed 100644
--- a/src/network/netdev/fou-tunnel.c
+++ b/src/network/netdev/fou-tunnel.c
@@ -262,7 +262,7 @@ static void fou_tunnel_init(NetDev *netdev) {
const NetDevVTable foutnl_vtable = {
.object_size = sizeof(FouTunnel),
.init = fou_tunnel_init,
- .sections = "Match\0NetDev\0FooOverUDP\0",
+ .sections = NETDEV_COMMON_SECTIONS "FooOverUDP\0",
.create = netdev_fou_tunnel_create,
.create_type = NETDEV_CREATE_INDEPENDENT,
.config_verify = netdev_fou_tunnel_verify,
diff --git a/src/network/netdev/geneve.c b/src/network/netdev/geneve.c
index 771e0292def..b960840a543 100644
--- a/src/network/netdev/geneve.c
+++ b/src/network/netdev/geneve.c
@@ -348,7 +348,7 @@ static void geneve_init(NetDev *netdev) {
const NetDevVTable geneve_vtable = {
.object_size = sizeof(Geneve),
.init = geneve_init,
- .sections = "Match\0NetDev\0GENEVE\0",
+ .sections = NETDEV_COMMON_SECTIONS "GENEVE\0",
.create = netdev_geneve_create,
.create_type = NETDEV_CREATE_INDEPENDENT,
.config_verify = netdev_geneve_verify,
diff --git a/src/network/netdev/ipvlan.c b/src/network/netdev/ipvlan.c
index 53b4bc944fd..1d87cfa865a 100644
--- a/src/network/netdev/ipvlan.c
+++ b/src/network/netdev/ipvlan.c
@@ -74,7 +74,7 @@ static void ipvlan_init(NetDev *n) {
const NetDevVTable ipvlan_vtable = {
.object_size = sizeof(IPVlan),
.init = ipvlan_init,
- .sections = "Match\0NetDev\0IPVLAN\0",
+ .sections = NETDEV_COMMON_SECTIONS "IPVLAN\0",
.fill_message_create = netdev_ipvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.generate_mac = true,
@@ -83,7 +83,7 @@ const NetDevVTable ipvlan_vtable = {
const NetDevVTable ipvtap_vtable = {
.object_size = sizeof(IPVlan),
.init = ipvlan_init,
- .sections = "Match\0NetDev\0IPVTAP\0",
+ .sections = NETDEV_COMMON_SECTIONS "IPVTAP\0",
.fill_message_create = netdev_ipvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.generate_mac = true,
diff --git a/src/network/netdev/l2tp-tunnel.c b/src/network/netdev/l2tp-tunnel.c
index f10506af1ea..19683c0a004 100644
--- a/src/network/netdev/l2tp-tunnel.c
+++ b/src/network/netdev/l2tp-tunnel.c
@@ -723,7 +723,7 @@ static void l2tp_tunnel_done(NetDev *netdev) {
const NetDevVTable l2tptnl_vtable = {
.object_size = sizeof(L2tpTunnel),
.init = l2tp_tunnel_init,
- .sections = "Match\0NetDev\0L2TP\0L2TPSession\0",
+ .sections = NETDEV_COMMON_SECTIONS "L2TP\0L2TPSession\0",
.create_after_configured = l2tp_create_tunnel,
.done = l2tp_tunnel_done,
.create_type = NETDEV_CREATE_AFTER_CONFIGURED,
diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c
index 25dc23ff033..010e16bcaf8 100644
--- a/src/network/netdev/macsec.c
+++ b/src/network/netdev/macsec.c
@@ -1235,7 +1235,7 @@ static void macsec_done(NetDev *netdev) {
const NetDevVTable macsec_vtable = {
.object_size = sizeof(MACsec),
.init = macsec_init,
- .sections = "Match\0NetDev\0MACsec\0MACsecReceiveChannel\0MACsecTransmitAssociation\0MACsecReceiveAssociation\0",
+ .sections = NETDEV_COMMON_SECTIONS "MACsec\0MACsecReceiveChannel\0MACsecTransmitAssociation\0MACsecReceiveAssociation\0",
.fill_message_create = netdev_macsec_fill_message_create,
.post_create = netdev_macsec_configure,
.done = macsec_done,
diff --git a/src/network/netdev/macvlan.c b/src/network/netdev/macvlan.c
index fe596c295ac..dbe25e9e34f 100644
--- a/src/network/netdev/macvlan.c
+++ b/src/network/netdev/macvlan.c
@@ -58,7 +58,7 @@ static void macvlan_init(NetDev *n) {
const NetDevVTable macvtap_vtable = {
.object_size = sizeof(MacVlan),
.init = macvlan_init,
- .sections = "Match\0NetDev\0MACVTAP\0",
+ .sections = NETDEV_COMMON_SECTIONS "MACVTAP\0",
.fill_message_create = netdev_macvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.generate_mac = true,
@@ -67,7 +67,7 @@ const NetDevVTable macvtap_vtable = {
const NetDevVTable macvlan_vtable = {
.object_size = sizeof(MacVlan),
.init = macvlan_init,
- .sections = "Match\0NetDev\0MACVLAN\0",
+ .sections = NETDEV_COMMON_SECTIONS "MACVLAN\0",
.fill_message_create = netdev_macvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.generate_mac = true,
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index 6908c4e811b..423750a6a0e 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -682,9 +682,9 @@ int netdev_load_one(Manager *manager, const char *filename) {
dropin_dirname = strjoina(basename(filename), ".d");
r = config_parse_many(filename, NETWORK_DIRS, dropin_dirname,
- "Match\0NetDev\0",
+ NETDEV_COMMON_SECTIONS NETDEV_OTHER_SECTIONS,
config_item_perf_lookup, network_netdev_gperf_lookup,
- CONFIG_PARSE_WARN|CONFIG_PARSE_RELAXED, netdev_raw);
+ CONFIG_PARSE_WARN, netdev_raw);
if (r < 0)
return r;
diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h
index 8d16ec57696..078d0aca4f9 100644
--- a/src/network/netdev/netdev.h
+++ b/src/network/netdev/netdev.h
@@ -8,6 +8,35 @@
#include "networkd-link.h"
#include "time-util.h"
+#define NETDEV_COMMON_SECTIONS "Match\0NetDev\0"
+/* This is the list of known sections. We need to ignore them in the initial parsing phase. */
+#define NETDEV_OTHER_SECTIONS \
+ "-Bond\0" \
+ "-Bridge\0" \
+ "-FooOverUDP\0" \
+ "-GENEVE\0" \
+ "-IPVLAN\0" \
+ "-IPVTAP\0" \
+ "-L2TP\0" \
+ "-L2TPSession\0" \
+ "-MACsec\0" \
+ "-MACsecReceiveChannel\0" \
+ "-MACsecTransmitAssociation\0" \
+ "-MACsecReceiveAssociation\0" \
+ "-MACVTAP\0" \
+ "-MACVLAN\0" \
+ "-Tunnel\0" \
+ "-Tun\0" \
+ "-Tap\0" \
+ "-Peer\0" \
+ "-VLAN\0" \
+ "-VRF\0" \
+ "-VXCAN\0" \
+ "-VXLAN\0" \
+ "-WireGuard\0" \
+ "-WireGuardPeer\0" \
+ "-Xfrm\0"
+
typedef struct netdev_join_callback netdev_join_callback;
struct netdev_join_callback {
diff --git a/src/network/netdev/netdevsim.c b/src/network/netdev/netdevsim.c
index 96f3932ccb9..bfd2a16035c 100644
--- a/src/network/netdev/netdevsim.c
+++ b/src/network/netdev/netdevsim.c
@@ -4,7 +4,7 @@
const NetDevVTable netdevsim_vtable = {
.object_size = sizeof(NetDevSim),
- .sections = "Match\0NetDev\0",
+ .sections = NETDEV_COMMON_SECTIONS,
.create_type = NETDEV_CREATE_INDEPENDENT,
.generate_mac = true,
};
diff --git a/src/network/netdev/nlmon.c b/src/network/netdev/nlmon.c
index 3a6179f5037..30e49a55abc 100644
--- a/src/network/netdev/nlmon.c
+++ b/src/network/netdev/nlmon.c
@@ -16,7 +16,7 @@ static int netdev_nlmon_verify(NetDev *netdev, const char *filename) {
const NetDevVTable nlmon_vtable = {
.object_size = sizeof(NLMon),
- .sections = "Match\0NetDev\0",
+ .sections = NETDEV_COMMON_SECTIONS,
.create_type = NETDEV_CREATE_INDEPENDENT,
.config_verify = netdev_nlmon_verify,
};
diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c
index 8b79051ef57..8b0e3d27eae 100644
--- a/src/network/netdev/tunnel.c
+++ b/src/network/netdev/tunnel.c
@@ -805,7 +805,7 @@ static void ip6tnl_init(NetDev *n) {
const NetDevVTable ipip_vtable = {
.object_size = sizeof(Tunnel),
.init = ipip_sit_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_ipip_sit_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -815,7 +815,7 @@ const NetDevVTable ipip_vtable = {
const NetDevVTable sit_vtable = {
.object_size = sizeof(Tunnel),
.init = ipip_sit_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_ipip_sit_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -825,7 +825,7 @@ const NetDevVTable sit_vtable = {
const NetDevVTable vti_vtable = {
.object_size = sizeof(Tunnel),
.init = vti_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_vti_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -835,7 +835,7 @@ const NetDevVTable vti_vtable = {
const NetDevVTable vti6_vtable = {
.object_size = sizeof(Tunnel),
.init = vti_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_vti_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -845,7 +845,7 @@ const NetDevVTable vti6_vtable = {
const NetDevVTable gre_vtable = {
.object_size = sizeof(Tunnel),
.init = gre_erspan_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_gre_erspan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -855,7 +855,7 @@ const NetDevVTable gre_vtable = {
const NetDevVTable gretap_vtable = {
.object_size = sizeof(Tunnel),
.init = gre_erspan_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_gre_erspan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -865,7 +865,7 @@ const NetDevVTable gretap_vtable = {
const NetDevVTable ip6gre_vtable = {
.object_size = sizeof(Tunnel),
.init = ip6gre_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_ip6gre_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -875,7 +875,7 @@ const NetDevVTable ip6gre_vtable = {
const NetDevVTable ip6gretap_vtable = {
.object_size = sizeof(Tunnel),
.init = ip6gre_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_ip6gre_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -885,7 +885,7 @@ const NetDevVTable ip6gretap_vtable = {
const NetDevVTable ip6tnl_vtable = {
.object_size = sizeof(Tunnel),
.init = ip6tnl_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_ip6tnl_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
@@ -895,7 +895,7 @@ const NetDevVTable ip6tnl_vtable = {
const NetDevVTable erspan_vtable = {
.object_size = sizeof(Tunnel),
.init = gre_erspan_init,
- .sections = "Match\0NetDev\0Tunnel\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tunnel\0",
.fill_message_create = netdev_gre_erspan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_tunnel_verify,
diff --git a/src/network/netdev/tuntap.c b/src/network/netdev/tuntap.c
index ce69ef4124a..aef72e7bbb4 100644
--- a/src/network/netdev/tuntap.c
+++ b/src/network/netdev/tuntap.c
@@ -147,7 +147,7 @@ static int tuntap_verify(NetDev *netdev, const char *filename) {
const NetDevVTable tun_vtable = {
.object_size = sizeof(TunTap),
- .sections = "Match\0NetDev\0Tun\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tun\0",
.config_verify = tuntap_verify,
.done = tuntap_done,
.create = netdev_create_tuntap,
@@ -156,7 +156,7 @@ const NetDevVTable tun_vtable = {
const NetDevVTable tap_vtable = {
.object_size = sizeof(TunTap),
- .sections = "Match\0NetDev\0Tap\0",
+ .sections = NETDEV_COMMON_SECTIONS "Tap\0",
.config_verify = tuntap_verify,
.done = tuntap_done,
.create = netdev_create_tuntap,
diff --git a/src/network/netdev/vcan.c b/src/network/netdev/vcan.c
index 9b3ab48f1af..9a0f87b1e18 100644
--- a/src/network/netdev/vcan.c
+++ b/src/network/netdev/vcan.c
@@ -4,7 +4,7 @@
const NetDevVTable vcan_vtable = {
.object_size = sizeof(VCan),
- .sections = "Match\0NetDev\0",
+ .sections = NETDEV_COMMON_SECTIONS,
.create_type = NETDEV_CREATE_INDEPENDENT,
.generate_mac = true,
};
diff --git a/src/network/netdev/veth.c b/src/network/netdev/veth.c
index 4ed9e81511d..98bbe868199 100644
--- a/src/network/netdev/veth.c
+++ b/src/network/netdev/veth.c
@@ -85,7 +85,7 @@ static void veth_done(NetDev *n) {
const NetDevVTable veth_vtable = {
.object_size = sizeof(Veth),
- .sections = "Match\0NetDev\0Peer\0",
+ .sections = NETDEV_COMMON_SECTIONS "Peer\0",
.done = veth_done,
.fill_message_create = netdev_veth_fill_message_create,
.create_type = NETDEV_CREATE_INDEPENDENT,
diff --git a/src/network/netdev/vlan.c b/src/network/netdev/vlan.c
index 1b4e5bc2d38..902aa804ffb 100644
--- a/src/network/netdev/vlan.c
+++ b/src/network/netdev/vlan.c
@@ -85,7 +85,7 @@ static void vlan_init(NetDev *netdev) {
const NetDevVTable vlan_vtable = {
.object_size = sizeof(VLan),
.init = vlan_init,
- .sections = "Match\0NetDev\0VLAN\0",
+ .sections = NETDEV_COMMON_SECTIONS "VLAN\0",
.fill_message_create = netdev_vlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_vlan_verify,
diff --git a/src/network/netdev/vrf.c b/src/network/netdev/vrf.c
index dc7a9672306..a8ed3fadcbe 100644
--- a/src/network/netdev/vrf.c
+++ b/src/network/netdev/vrf.c
@@ -25,7 +25,7 @@ static int netdev_vrf_fill_message_create(NetDev *netdev, Link *link, sd_netlink
const NetDevVTable vrf_vtable = {
.object_size = sizeof(Vrf),
- .sections = "Match\0NetDev\0VRF\0",
+ .sections = NETDEV_COMMON_SECTIONS "VRF\0",
.fill_message_create = netdev_vrf_fill_message_create,
.create_type = NETDEV_CREATE_MASTER,
.generate_mac = true,
diff --git a/src/network/netdev/vxcan.c b/src/network/netdev/vxcan.c
index d1c3f091c35..1a5786a0b71 100644
--- a/src/network/netdev/vxcan.c
+++ b/src/network/netdev/vxcan.c
@@ -65,7 +65,7 @@ static void vxcan_done(NetDev *n) {
const NetDevVTable vxcan_vtable = {
.object_size = sizeof(VxCan),
- .sections = "Match\0NetDev\0VXCAN\0",
+ .sections = NETDEV_COMMON_SECTIONS "VXCAN\0",
.done = vxcan_done,
.fill_message_create = netdev_vxcan_fill_message_create,
.create_type = NETDEV_CREATE_INDEPENDENT,
diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
index 92f6005dcd8..ace3c5d2ed3 100644
--- a/src/network/netdev/vxlan.c
+++ b/src/network/netdev/vxlan.c
@@ -371,7 +371,7 @@ static void vxlan_init(NetDev *netdev) {
const NetDevVTable vxlan_vtable = {
.object_size = sizeof(VxLan),
.init = vxlan_init,
- .sections = "Match\0NetDev\0VXLAN\0",
+ .sections = NETDEV_COMMON_SECTIONS "VXLAN\0",
.fill_message_create = netdev_vxlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
.config_verify = netdev_vxlan_verify,
diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c
index 4a1228584d7..71ff41d574d 100644
--- a/src/network/netdev/wireguard.c
+++ b/src/network/netdev/wireguard.c
@@ -967,7 +967,7 @@ static int wireguard_verify(NetDev *netdev, const char *filename) {
const NetDevVTable wireguard_vtable = {
.object_size = sizeof(Wireguard),
- .sections = "Match\0NetDev\0WireGuard\0WireGuardPeer\0",
+ .sections = NETDEV_COMMON_SECTIONS "WireGuard\0WireGuardPeer\0",
.post_create = netdev_wireguard_post_create,
.init = wireguard_init,
.done = wireguard_done,
diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c
index 7157af4df3e..ff8ff356897 100644
--- a/src/network/netdev/xfrm.c
+++ b/src/network/netdev/xfrm.c
@@ -27,7 +27,7 @@ static int xfrm_fill_message_create(NetDev *netdev, Link *link, sd_netlink_messa
const NetDevVTable xfrm_vtable = {
.object_size = sizeof(Xfrm),
- .sections = "Match\0NetDev\0Xfrm\0",
+ .sections = NETDEV_COMMON_SECTIONS "Xfrm\0",
.fill_message_create = xfrm_fill_message_create,
.create_type = NETDEV_CREATE_STACKED
};
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 3269d830311..90b31148f3e 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -221,8 +221,19 @@ static int parse_line(
return -ENOMEM;
if (sections && !nulstr_contains(sections, n)) {
+ bool ignore = flags & CONFIG_PARSE_RELAXED;
+ const char *t;
- if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(n, "X-"))
+ ignore = ignore || startswith(n, "X-");
+
+ if (!ignore)
+ NULSTR_FOREACH(t, sections)
+ if (streq_ptr(n, startswith(t, "-"))) {
+ ignore = true;
+ break;
+ }
+
+ if (!ignore)
log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n);
free(n);
@@ -282,7 +293,7 @@ int config_parse(const char *unit,
_cleanup_free_ char *section = NULL, *continuation = NULL;
_cleanup_fclose_ FILE *ours = NULL;
unsigned line = 0, section_line = 0;
- bool section_ignored = false;
+ bool section_ignored = false, bom_seen = false;
int r;
assert(filename);
@@ -328,13 +339,13 @@ int config_parse(const char *unit,
continue;
l = buf;
- if (!(flags & CONFIG_PARSE_REFUSE_BOM)) {
+ if (!bom_seen) {
char *q;
q = startswith(buf, UTF8_BYTE_ORDER_MARK);
if (q) {
l = q;
- flags |= CONFIG_PARSE_REFUSE_BOM;
+ bom_seen = true;
}
}
diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
index 04c68b18d8a..9ec77778670 100644
--- a/src/shared/conf-parser.h
+++ b/src/shared/conf-parser.h
@@ -14,10 +14,9 @@
/* An abstract parser for simple, line based, shallow configuration files consisting of variable assignments only. */
typedef enum ConfigParseFlags {
- CONFIG_PARSE_RELAXED = 1 << 0,
- CONFIG_PARSE_ALLOW_INCLUDE = 1 << 1,
- CONFIG_PARSE_WARN = 1 << 2,
- CONFIG_PARSE_REFUSE_BOM = 1 << 3,
+ CONFIG_PARSE_RELAXED = 1 << 0, /* Do not warn about unknown non-extension fields */
+ CONFIG_PARSE_ALLOW_INCLUDE = 1 << 1, /* Allow the deprecated .include stanza */
+ CONFIG_PARSE_WARN = 1 << 2, /* Emit non-debug messages */
} ConfigParseFlags;
/* Argument list for parsers of specific configuration settings. */
diff --git a/src/shared/install.c b/src/shared/install.c
index 14dfd331d58..56806609280 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -1290,9 +1290,21 @@ static int unit_file_load(
assert(c);
r = config_parse(info->name, path, f,
- NULL,
+ "Install\0"
+ "-Unit\0"
+ "-Automount\0"
+ "-Device\0"
+ "-Mount\0"
+ "-Path\0"
+ "-Scope\0"
+ "-Service\0"
+ "-Slice\0"
+ "-Socket\0"
+ "-Swap\0"
+ "-Target\0"
+ "-Timer\0",
config_item_table_lookup, items,
- CONFIG_PARSE_RELAXED|CONFIG_PARSE_ALLOW_INCLUDE, info);
+ CONFIG_PARSE_ALLOW_INCLUDE, info);
if (r < 0)
return log_debug_errno(r, "Failed to parse %s: %m", info->name);
diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c
index 661eb1795a1..18b083d87fc 100644
--- a/src/test/test-conf-parser.c
+++ b/src/test/test-conf-parser.c
@@ -299,6 +299,15 @@ static const char* const config_file[] = {
"[Section]\n"
"setting1=" /* many continuation lines, together above the limit */
x1000(x1000("x") x10("abcde") "\\\n") "xxx",
+
+ "[Section]\n"
+ "setting1=2\n"
+ "[NoWarnSection]\n"
+ "setting1=3\n"
+ "[WarnSection]\n"
+ "setting1=3\n"
+ "[X-Section]\n"
+ "setting1=3\n",
};
static void test_config_parse(unsigned i, const char *s) {
@@ -325,14 +334,12 @@ static void test_config_parse(unsigned i, const char *s) {
const char *sections,
ConfigItemLookup lookup,
const void *table,
- bool relaxed,
- bool allow_include,
- bool warn,
+ ConfigParseFlags flags,
void *userdata)
*/
r = config_parse(NULL, name, f,
- "Section\0",
+ "Section\0-NoWarnSection\0",
config_item_table_lookup, items,
CONFIG_PARSE_WARN, NULL);
@@ -366,6 +373,11 @@ static void test_config_parse(unsigned i, const char *s) {
assert_se(r == -ENOBUFS);
assert_se(setting1 == NULL);
break;
+
+ case 17:
+ assert_se(r == 0);
+ assert_se(streq(setting1, "2"));
+ break;
}
}