]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
conf-parse: add generic config_parse_safe_string() helper
authorLennart Poettering <lennart@poettering.net>
Wed, 9 Feb 2022 08:45:12 +0000 (09:45 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 9 Feb 2022 09:16:42 +0000 (10:16 +0100)
This helper is just like config_parse_string() but does some superficial
checks for control characters and quotes.

In most cases we currently use config_parse_string() we probably want to
use config_parse_safe_string() for safety reasons.

src/shared/conf-parser.c
src/shared/conf-parser.h

index 64e67fb6f5754a7f58c91d7fdc1a95e8d4da003f..bc80eaffeb93960d1dd21728fa74959bec99f6d0 100644 (file)
@@ -873,6 +873,33 @@ int config_parse_string(
         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;
+
+        assert(filename);
+        assert(lvalue);
+        assert(rvalue);
+        assert(data);
+
+        if (!string_is_safe(rvalue)) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0, "Specified string contains unsafe characters, ignoring: %s", rvalue);
+                return 0;
+        }
+
+        return free_and_strdup_warn(s, empty_to_null(rvalue));
+}
+
 int config_parse_path(
                 const char *unit,
                 const char *filename,
index 1e03f93bce14aacfd77b028c778e3682afb75337..e93ea89b29fcc3e1e97c3ecd1db2e38cf94976cc 100644 (file)
@@ -168,6 +168,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_bool);
 CONFIG_PARSER_PROTOTYPE(config_parse_id128);
 CONFIG_PARSER_PROTOTYPE(config_parse_tristate);
 CONFIG_PARSER_PROTOTYPE(config_parse_string);
+CONFIG_PARSER_PROTOTYPE(config_parse_safe_string);
 CONFIG_PARSER_PROTOTYPE(config_parse_path);
 CONFIG_PARSER_PROTOTYPE(config_parse_strv);
 CONFIG_PARSER_PROTOTYPE(config_parse_sec);