From: Yu Watanabe Date: Sun, 3 Jun 2018 14:57:30 +0000 (+0900) Subject: conf-parse: use path_simplify_and_warn() in config_parse_path() X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=19608fbfbab0e48fcda2e1ac60f5b5a689fe3376;p=elogind.git conf-parse: use path_simplify_and_warn() in config_parse_path() --- diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 899711e54..5e25eef18 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -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; } diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c index 85954e097..b95aa7a22 100644 --- a/src/test/test-conf-parser.c +++ b/src/test/test-conf-parser.c @@ -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);