summaryrefslogtreecommitdiff
path: root/src/shared/conf-parser.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-03-07 15:39:07 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-03-10 14:43:43 +0900
commit3f87eaa5d812099a5d7bcec4e0a123706612a0ed (patch)
tree2a4aceec007987a6de03bb5190f4e9e2317d25c7 /src/shared/conf-parser.c
parentb62c27050320c697392d40167b5ebaaa0057e5f0 (diff)
downloadsystemd-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.c35
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;
}