]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Revert "shared/conf-parser,networkd: EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE → EXTRACT_...
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 14 Aug 2019 15:41:31 +0000 (17:41 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 19 Aug 2019 07:54:06 +0000 (09:54 +0200)
This reverts commit 8a07b4033e5d3c86931b3dd2ddbca41118c05c60.
The tests are kept. test-networkd-conf is adjusted to pass.

This fixes #13276. I think current rules are extremely confusing, as the
case in test-networkd-conf shows. We apply some kinds of unescaping (relating
to quoting), but not others (related to escaping of special characters).
But fixing this is hard, because people have adjusted quoting to match
our rules, and if we make the rules "better", things might break in unexpected
places.

src/basic/extract-word.c
src/libsystemd-network/network-internal.c
src/network/test-networkd-conf.c
src/shared/conf-parser.c

index b7ae2ed1cd59085521d0d60356302a9d87630f07..34cfb36a4a806ce0ffa646de28c73340af5f684f 100644 (file)
@@ -28,8 +28,6 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
 
         assert(p);
         assert(ret);
-        /* Those two don't make sense together. */
-        assert(!FLAGS_SET(flags, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE));
 
         /* Bail early if called after last value or with no input */
         if (!*p)
index f18ec88300bdea423238e09a3c19493db24ae05e..1f2e5c7e65eb5c5318c41c1c7ddb1079e747494a 100644 (file)
@@ -254,7 +254,7 @@ int config_parse_match_strv(
         for (;;) {
                 _cleanup_free_ char *word = NULL, *k = NULL;
 
-                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
+                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
                 if (r == 0)
                         return 0;
                 if (r == -ENOMEM)
index 6883cbe1ec3bf1f7e759fd1b2b65db2c8de814f8..2007acb7812e5c2854ea9fc9b058958d0d67d822 100644 (file)
@@ -240,7 +240,7 @@ static void test_config_parse_match_strv(void) {
                                        "!baz",
                                        "KEY=val",
                                        "KEY2=val with space",
-                                       "KEY3=val with \"quotation\"")));
+                                       "KEY3=val with \\quotation\\")));
 }
 
 int main(int argc, char **argv) {
index a495c2538ba9c3543bbd2b707bfdc478e91de0fd..40792086da13c1b5b13dc627fd6535d6edb35600 100644 (file)
@@ -760,7 +760,7 @@ int config_parse_strv(
         for (;;) {
                 char *word = NULL;
 
-                r = extract_first_word(&rvalue, &word, NULL, EXTRACT_UNQUOTE);
+                r = extract_first_word(&rvalue, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
                 if (r == 0)
                         break;
                 if (r == -ENOMEM)