diff options
author | Lennart Poettering <lennart@poettering.net> | 2019-12-04 14:12:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-04 14:12:24 +0100 |
commit | b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0 (patch) | |
tree | b54d054faa39d0f02fefd1fc04d8eef0f8878aaf | |
parent | Merge pull request #13953 from SpencerMichaels/systemd-boot-efistub-id-fix (diff) | |
parent | shared/install: warn about unkown sections in unit files (diff) | |
download | systemd-b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0.tar.xz systemd-b7aa08ca15d0080bfbdc8820b8b9b617b550a0e0.zip |
Merge pull request #14111 from keszybz/unknown-section-warning
Warn about unknown sections
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; } } |