summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-03-07 16:09:23 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-03-10 14:43:48 +0900
commite289ce7f67bb5a560bf9dcdc9017c0e1a135fec0 (patch)
tree84730e7b2132dfd86cdaaf8e996f8c69ffe81dea
parent3f87eaa5d812099a5d7bcec4e0a123706612a0ed (diff)
downloadsystemd-e289ce7f67bb5a560bf9dcdc9017c0e1a135fec0.tar.gz
conf-parser: introduce CONFIG_PARSE_STRING_ASCII flag
When the flag is set, the string which contains non-ascii characters will be refused.
-rw-r--r--src/shared/conf-parser.c9
-rw-r--r--src/shared/conf-parser.h3
2 files changed, 12 insertions, 0 deletions
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 1640500d57..ceadfdb723 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -894,6 +894,15 @@ int config_parse_string(
return 0;
}
+ if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_ASCII) && !ascii_is_valid(rvalue)) {
+ _cleanup_free_ char *escaped = NULL;
+
+ escaped = cescape(rvalue);
+ log_syntax(unit, LOG_WARNING, filename, line, 0,
+ "Specified string contains invalid ASCII characters, ignoring: %s", strna(escaped));
+ return 0;
+ }
+
return free_and_strdup_warn(s, empty_to_null(rvalue));
}
diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
index b0d6cebc97..f3044b0ca6 100644
--- a/src/shared/conf-parser.h
+++ b/src/shared/conf-parser.h
@@ -204,6 +204,9 @@ typedef enum Disabled {
typedef enum ConfigParseStringFlags {
CONFIG_PARSE_STRING_SAFE = 1 << 0,
+ CONFIG_PARSE_STRING_ASCII = 1 << 1,
+
+ CONFIG_PARSE_STRING_SAFE_AND_ASCII = CONFIG_PARSE_STRING_SAFE | CONFIG_PARSE_STRING_ASCII,
} ConfigParseStringFlags;
#define DEFINE_CONFIG_PARSE(function, parser, msg) \