NetworkManager/libnm-core
Thomas Haller b6d0be2d3b libnm: use nm_utils_escaped_tokens_*() for parsing NMIPRoutingRule
Replace nm_utils_str_simpletokens_extract_next() by
nm_utils_escaped_tokens_split().

nm_utils_escaped_tokens_split() should become our first choice for
parsing and tokenizing.

Note that both nm_utils_str_simpletokens_extract_next() and
nm_utils_escaped_tokens_split() need to strdup the string once,
and tokenizing takes O(n). So, they are roughtly the same performance
wise. The only difference is, that as we iterate through the tokens,
we might abort early on error with nm_utils_str_simpletokens_extract_next()
and not parse the entire string. But that is a small benefit, since we
anyway always strdup() the string (being O(n) already).

Note that to-string will no longer escape ',' and ';'. This is a change
in behavior, of unreleased API. Also note, that escaping these is no
longer necessary, because nmcli soon will also use nm_utils_escaped_tokens_*().

Another change in behavior is that nm_utils_str_simpletokens_extract_next()
treated invalid escape sequences (backslashes followed by an arbitrary
character), buy stripping the backslash. nm_utils_escaped_tokens_*()
leaves such backslashes as is, and only honors them if they are followed
by a whitespace (the delimiter) or another backslash. The disadvantage
of the new approach is that backslashes are treated differently
depending on the following character. The benefit is, that most
backslashes can now be written verbatim, not requiring them to escape
them with a double-backslash.

Yes, there is a problem with these nested escape schemes:

  - the caller may already need to escape backslash in shell.

  - then nmcli will use backslash escaping to split the rules at ','.

  - then nm_ip_routing_rule_from_string() will honor backslash escaping
    for spaces.

  - then iifname and oifname use backslash escaping for nm_utils_buf_utf8safe_escape()
    to express non-UTF-8 characters (because interface names are not
    necessarily UTF-8).

This is only redeamed because escaping is really only necessary for very
unusual cases, if you want to embed a backslash, a space, a comma, or a
non-UTF-8 character. But if you have to, now you will be able to express
that.

The other upside of these layers of escaping is that they become all
indendent from each other:

  - shell can accept quoted/escaped arguments and will unescape them.

  - nmcli can do the tokenizing for ',' (and escape the content
    unconditionally when converting to string).

  - nm_ip_routing_rule_from_string() can do its tokenizing without
    special consideration of utf8safe escaping.

  - NMIPRoutingRule takes iifname/oifname as-is and is not concerned
    about nm_utils_buf_utf8safe_escape(). However, before configuring
    the rule in kernel, this utf8safe escape will be unescaped to get
    the interface name (which is non-UTF8 binary).
2019-04-17 11:11:21 +02:00
..
tests libnm: use nm_utils_escaped_tokens_*() for parsing NMIPRoutingRule 2019-04-17 11:11:21 +02:00
meson.build shared: add "shared/nm-libnm-core-utils.h" utils 2019-03-25 09:12:32 +01:00
nm-connection-private.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-connection.c libnm/infiniband: lift restriction of MTU to 2044 for IPoIB in "datagram" mode 2019-04-05 16:27:17 +02:00
nm-connection.h Revert "libnm-core: don't serialize synthetic properties in nm_setting_to_string()" 2019-01-07 10:09:10 +01:00
nm-core-enum-types.c.template libnm,cli: add NMSettingWireGuard 2019-02-22 11:00:10 +01:00
nm-core-enum-types.h.template build: use template files for enum types' sources generation 2017-12-18 11:25:06 +01:00
nm-core-internal.h libnm: add NMIPRoutingRule API 2019-03-27 16:23:30 +01:00
nm-core-types-internal.h platform/wireguard: rework parsing wireguard links in platform 2018-09-07 11:24:17 +02:00
nm-core-types.h libnm,cli: add NMSettingWireGuard 2019-02-22 11:00:10 +01:00
nm-crypto-gnutls.c libnm/crypto: clean crypto implementations for gnutls/nss 2018-09-04 07:38:30 +02:00
nm-crypto-impl.h libnm/crypto: refactor to use enum for supported ciphers 2018-09-04 07:38:30 +02:00
nm-crypto-nss.c libnm/crypto: clean crypto implementations for gnutls/nss 2018-09-04 07:38:30 +02:00
nm-crypto.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-crypto.h libnm/crypto: mark nm_crypto_make_des_aes_key() as test-only function 2018-09-04 07:38:30 +02:00
nm-dbus-interface.h lldp: support IEEE 802.3 TLVs 2019-03-27 10:47:24 +01:00
nm-dbus-utils.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-errors.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-errors.h wifi-p2p: strict validate options argument to "StartFind" 2019-02-05 13:55:32 +01:00
nm-json.c libnm-core: don't use RTLD_DEEPBIND when building with asan 2018-02-15 15:34:03 +01:00
nm-json.h libnm: only include "nm-jansson.h" from "nm-json.h" 2018-01-16 14:47:24 +01:00
nm-keyfile-internal.h keyfile: add helper functions to record loaded UUID files 2018-12-03 12:09:57 +01:00
nm-keyfile-utils.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-keyfile-utils.h libnm: add NMWireGuardPeer and libnm support for peers 2019-02-22 11:00:10 +01:00
nm-keyfile.c libnm-core: fix build warning 2019-04-04 15:34:41 +02:00
nm-property-compare.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-property-compare.h build: refine the NETWORKMANAGER_COMPILATION define 2018-01-08 12:38:53 +01:00
nm-setting-6lowpan.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-6lowpan.h libnm-core: add NMSetting{6Lowpan,Wpan}Class to a public header 2018-06-29 22:34:23 +02:00
nm-setting-8021x.c nm: Fix syntax on introspection annotations 2019-03-07 10:04:41 +01:00
nm-setting-8021x.h docs: use numeric values in enum definitions in public headers 2019-02-19 16:08:11 +01:00
nm-setting-adsl.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-adsl.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-bluetooth.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-bluetooth.h core/bluetooth: add NAP type 2017-05-31 20:15:52 +02:00
nm-setting-bond.c libnm,core: use _nm_utils_ascii_str_to_uint64() instead of strtol() 2019-02-12 08:50:28 +01:00
nm-setting-bond.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-bridge-port.c ifcfg-rh: add bridge vlans support 2019-03-26 17:19:39 +01:00
nm-setting-bridge-port.h libnm-core: add vlans property to bridge-port setting 2019-03-26 17:18:29 +01:00
nm-setting-bridge.c shared: add flags argument to nm_utils_strsplit_set() 2019-04-10 15:05:57 +02:00
nm-setting-bridge.h libnm-core: add bridge vlan conversion utils 2019-03-26 17:18:29 +01:00
nm-setting-cdma.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-cdma.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-connection.c cli: implement connection:permissions as multilist property 2019-03-25 09:12:32 +01:00
nm-setting-connection.h libnm-core: add connection.llmnr property 2018-09-06 09:07:41 +02:00
nm-setting-dcb.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-dcb.h all: don't use gchar/gshort/gint/glong but C types 2018-07-11 12:02:06 +02:00
nm-setting-dummy.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-dummy.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ethtool.c libnm, cli, ifcfg-rh: add NMSettingEthtool setting 2018-08-10 10:38:19 +02:00
nm-setting-ethtool.h libnm: add missing NM_AVAILABLE_IN_1_14 macro to new API 2018-09-14 16:54:40 +02:00
nm-setting-generic.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-generic.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-gsm.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-gsm.h settings,gsm: deprecate and stop using 'number' property 2018-12-19 08:54:50 +01:00
nm-setting-infiniband.c libnm/infiniband: lift restriction of MTU to 2044 for IPoIB in "datagram" mode 2019-04-05 16:27:17 +02:00
nm-setting-infiniband.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ip-config.c libnm: use nm_utils_escaped_tokens_*() for parsing NMIPRoutingRule 2019-04-17 11:11:21 +02:00
nm-setting-ip-config.h libnm: add API to NMSettingIPConfig for routing rules 2019-03-27 16:23:30 +01:00
nm-setting-ip-tunnel.c libnm: fix range of MTU property to uint32 for ip-tunnel 2019-04-05 16:27:17 +02:00
nm-setting-ip-tunnel.h ip-tunnel: add support for tunnel flags 2018-01-05 18:25:08 +01:00
nm-setting-ip4-config.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-ip4-config.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ip6-config.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-ip6-config.h libnm-core: add ipv6.dhcp-duid property 2018-06-08 18:23:31 +02:00
nm-setting-macsec.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-macsec.h macsec: enable send-sci by default and make the option configurable 2018-06-14 15:13:11 +02:00
nm-setting-macvlan.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-macvlan.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-match.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-match.h all: add 'match' setting 2018-08-11 09:41:07 +02:00
nm-setting-olpc-mesh.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-olpc-mesh.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-ovs-bridge.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-ovs-bridge.h libnm-core: add ovs-bridge setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-interface.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-ovs-interface.h libnm-core: add ovs-interface setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-patch.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-ovs-patch.h libnm-core: add ovs-patch setting 2017-10-30 17:40:08 +01:00
nm-setting-ovs-port.c libnm-core: cleanup NMSetting's class initialization 2019-01-15 09:55:24 +01:00
nm-setting-ovs-port.h libnm-core: add ovs-port setting 2017-10-30 17:40:08 +01:00
nm-setting-ppp.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-ppp.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-pppoe.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-pppoe.h libnm,clients: add 'parent' property to PPPoE setting 2017-08-05 08:03:15 +02:00
nm-setting-private.h libnm-core: add vlans property to bridge-port setting 2019-03-26 17:18:29 +01:00
nm-setting-proxy.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-proxy.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-serial.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-serial.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-sriov.c libnm-core: fix typos in API documentation 2019-03-26 17:18:29 +01:00
nm-setting-sriov.h libnm-core: add SR-IOV setting 2018-07-11 16:16:22 +02:00
nm-setting-tc-config.c core/qdisc: add support for attributes 2019-04-12 18:04:04 +02:00
nm-setting-tc-config.h core/qdisc: add support for attributes 2019-04-12 18:04:04 +02:00
nm-setting-team-port.c libnm/team: add function to compare list of link-watchers 2019-03-24 09:21:14 +01:00
nm-setting-team-port.h all: don't use gchar/gshort/gint/glong but C types 2018-07-11 12:02:06 +02:00
nm-setting-team.c cli: implement team:runner-tx-hash as multilist property 2019-03-25 09:12:33 +01:00
nm-setting-team.h docs: use numeric values in enum definitions in public headers 2019-02-19 16:08:11 +01:00
nm-setting-tun.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-tun.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-user.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-user.h all: remove consecutive empty lines 2018-04-30 16:24:52 +02:00
nm-setting-vlan.c libnm/cli: support deleting VLAN egress/ingress priority map by "from" 2019-03-25 09:12:32 +01:00
nm-setting-vlan.h all: replace "it's" with "its" where needed 2018-04-18 14:14:07 +02:00
nm-setting-vpn.c libnm: don't use strlen() for checking for non-empty string 2019-03-25 09:12:32 +01:00
nm-setting-vpn.h all: remove consecutive empty lines 2018-04-30 16:24:52 +02:00
nm-setting-vxlan.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-vxlan.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-wifi-p2p.c core/setting-wifi-p2p: Add WFD IEs property to P2P settings 2019-02-21 10:10:20 +01:00
nm-setting-wifi-p2p.h core/setting-wifi-p2p: Add WFD IEs property to P2P settings 2019-02-21 10:10:20 +01:00
nm-setting-wimax.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-wimax.h libnm-core: sensible docstrings for NMSettings* 2017-03-17 10:15:11 +01:00
nm-setting-wired.c libnm: don't assert for valid string length in nm_setting_wired_add_s390_option() 2019-03-25 09:12:32 +01:00
nm-setting-wired.h libnm/docs: fix enum definition that confuses gtk-doc 2019-02-22 10:12:13 +01:00
nm-setting-wireguard.c libnm: rename and expose nm_utils_base64secret_decode() in libnm 2019-03-07 17:54:25 +01:00
nm-setting-wireguard.h libnm: change nm_wireguard_peer_set_endpoint() API to allow validation 2019-03-07 17:54:25 +01:00
nm-setting-wireless-security.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-wireless-security.h all: fix misspellings 2019-01-24 17:19:44 +01:00
nm-setting-wireless.c all: drop unnecessary includes of <errno.h> and <string.h> 2019-02-12 08:50:28 +01:00
nm-setting-wireless.h docs: use numeric values in enum definitions in public headers 2019-02-19 16:08:11 +01:00
nm-setting-wpan.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-setting-wpan.h core/setting-wpan: add page and channel properties 2018-10-07 15:46:02 +02:00
nm-setting.c all: goodbye libnm-glib 2019-04-16 15:52:27 +02:00
nm-setting.h libnm,core: make for-each-secret implementation virtual functions of NMSetting 2019-02-04 20:15:20 +01:00
nm-simple-connection.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-simple-connection.h include: use double-quotes to include our own headers 2017-03-09 14:12:35 +01:00
nm-utils-private.h libnm-core: add vlans property to bridge-port setting 2019-03-26 17:18:29 +01:00
nm-utils.c core/qdisc: add support for attributes 2019-04-12 18:04:04 +02:00
nm-utils.h libnm: rename and expose nm_utils_base64secret_decode() in libnm 2019-03-07 17:54:25 +01:00
nm-version.h release: bump version to 1.19.0 (development) 2019-04-13 18:54:31 +02:00
nm-vpn-dbus-interface.h all: remove consecutive empty lines 2018-04-30 16:24:52 +02:00
nm-vpn-editor-plugin.c libnm-core: reorder code in settings 2019-01-15 09:55:24 +01:00
nm-vpn-editor-plugin.h all: remove consecutive empty lines 2018-04-30 16:24:52 +02:00
nm-vpn-plugin-info.c nm: Fix syntax on introspection annotations 2019-03-07 10:04:41 +01:00
nm-vpn-plugin-info.h gobject-introspection: made several fixes to the annotations 2018-03-26 12:45:49 +02:00