chiark / gitweb /
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)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
src/shared/conf-parser.c
src/test/test-conf-parser.c

index 899711e54f8f0ef1f91ccd411233b6417ca22631..5e25eef18f15e1fd517338a64ff4e0ad25e9cd02 100644 (file)
@@ -42,6 +42,7 @@
 //#include "rlimit-util.h"
 //#include "rlimit-util.h"
 //#include "rlimit-util.h"
+//#include "rlimit-util.h"
 
 int config_item_table_lookup(
                 const void *table,
@@ -731,6 +732,7 @@ int config_parse_path(
 
         char **s = data, *n;
         bool fatal = ltype;
+        int r;
 
         assert(filename);
         assert(lvalue);
@@ -742,27 +744,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 85954e097944c3f5e2a05cd31cfc8d18b00e7cbb..b95aa7a22c43f86a458eb7abcaa95f7b2e8f0d1f 100644 (file)
@@ -106,6 +106,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);