diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-03-07 15:39:07 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-03-10 14:43:43 +0900 |
commit | 3f87eaa5d812099a5d7bcec4e0a123706612a0ed (patch) | |
tree | 2a4aceec007987a6de03bb5190f4e9e2317d25c7 /src/shared/conf-parser.c | |
parent | b62c27050320c697392d40167b5ebaaa0057e5f0 (diff) | |
download | systemd-3f87eaa5d812099a5d7bcec4e0a123706612a0ed.tar.gz |
conf-parser: merge config_parse_string() and config_parse_safe_string()
This also makes unsafe strings escaped when logged. Otherwise,
journalctl may not show the log message unless '--all' is specified.
Diffstat (limited to 'src/shared/conf-parser.c')
-rw-r--r-- | src/shared/conf-parser.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index 853f60f517..1640500d57 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -11,6 +11,7 @@ #include "conf-files.h" #include "conf-parser.h" #include "def.h" +#include "escape.h" #include "ether-addr-util.h" #include "extract-word.h" #include "fd-util.h" @@ -873,37 +874,23 @@ int config_parse_string( void *data, void *userdata) { - char **s = data; + char **s = ASSERT_PTR(data); assert(filename); assert(lvalue); assert(rvalue); - assert(data); - - return free_and_strdup_warn(s, empty_to_null(rvalue)); -} - -int config_parse_safe_string( - const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { - char **s = data; + if (isempty(rvalue)) { + *s = mfree(*s); + return 0; + } - assert(filename); - assert(lvalue); - assert(rvalue); - assert(data); + if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_SAFE) && !string_is_safe(rvalue)) { + _cleanup_free_ char *escaped = NULL; - if (!string_is_safe(rvalue)) { - log_syntax(unit, LOG_WARNING, filename, line, 0, "Specified string contains unsafe characters, ignoring: %s", rvalue); + escaped = cescape(rvalue); + log_syntax(unit, LOG_WARNING, filename, line, 0, + "Specified string contains unsafe characters, ignoring: %s", strna(escaped)); return 0; } |