]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
conf-parse: use path_simplify_and_warn() in config_parse_path()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 3 Jun 2018 14:57:30 +0000 (23:57 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 3 Jun 2018 14:57:30 +0000 (23:57 +0900)
src/shared/conf-parser.c
src/test/test-conf-parser.c

index f10366c265ddad70ec3724f672da03a382a65c20..a71ff524aea1f40cd81acda4523c6b4fadfaf37b 100644 (file)
@@ -713,6 +713,7 @@ int config_parse_path(
 
         char **s = data, *n;
         bool fatal = ltype;
+        int r;
 
         assert(filename);
         assert(lvalue);
@@ -724,27 +725,16 @@ int config_parse_path(
                 goto finalize;
         }
 
-        if (!utf8_is_valid(rvalue)) {
-                log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, rvalue);
-                return fatal ? -ENOEXEC : 0;
-        }
-
-        if (!path_is_absolute(rvalue)) {
-                log_syntax(unit, LOG_ERR, filename, line, 0,
-                           "Not an absolute path%s: %s",
-                           fatal ? "" : ", ignoring", rvalue);
-                return fatal ? -ENOEXEC : 0;
-        }
-
         n = strdup(rvalue);
         if (!n)
                 return log_oom();
 
-        path_simplify(n, false);
+        r = path_simplify_and_warn(n, PATH_CHECK_ABSOLUTE | (fatal ? PATH_CHECK_FATAL : 0), unit, filename, line, lvalue);
+        if (r < 0)
+                return fatal ? -ENOEXEC : 0;
 
 finalize:
-        free(*s);
-        *s = n;
+        free_and_replace(*s, n);
 
         return 0;
 }
index d569bdd85fafe99d4e27e8977db408378528f1c3..f0e3d6c07ea4a866870e6e240ab8d1b3c1a93574 100644 (file)
@@ -96,6 +96,7 @@ static void test_config_parse_path(void) {
         test_config_parse_path_one("/path", "/path");
         test_config_parse_path_one("/path//////////", "/path");
         test_config_parse_path_one("///path/foo///bar////bar//", "/path/foo/bar/bar");
+        test_config_parse_path_one("/path//./////hogehoge///.", "/path/hogehoge");
         test_config_parse_path_one("/path/\xc3\x80", "/path/\xc3\x80");
 
         test_config_parse_path_one("not_absolute/path", NULL);