summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2025-07-22 15:00:11 +0100
committerGitHub <noreply@github.com>2025-07-22 15:00:11 +0100
commit9ca458bc1eaedf45dcca8c7e4a85ba3e3562396a (patch)
treef919ff4488a6b4a4ea6e67c5f3e1d82798599efd /src
parent3ab1a758eb5a84e8997eecf074d584a44d1f945d (diff)
parentc25ed29baa321a72c5bdcb2054141d5d44f901ae (diff)
downloadvyos1x-config-9ca458bc1eaedf45dcca8c7e4a85ba3e3562396a.tar.gz
vyos1x-config-9ca458bc1eaedf45dcca8c7e4a85ba3e3562396a.zip
Merge pull request #48 from jestabro/sanitize-string
T7605: add string sanitization functions for direct load of config file
Diffstat (limited to 'src')
-rw-r--r--src/config_file.ml25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/config_file.ml b/src/config_file.ml
index d8dc8c9..abf08ef 100644
--- a/src/config_file.ml
+++ b/src/config_file.ml
@@ -1,3 +1,23 @@
+
+let rx =
+ let p =
+ {|("[^"]*[\][^"]*"\n|'[^']*[\][^']*'\n)|}
+ in
+ Pcre2.regexp p
+
+let escape_backslash s =
+ let func s =
+ Pcre2.qreplace ~pat:{|\\|} ~templ:{|\\|} s
+ in
+ Pcre2.substitute ~rex:rx ~subst:func s
+
+let unescape_backslash s =
+ let defunc s =
+ Pcre2.qreplace ~pat:{|\\\\|} ~templ:{|\|} s
+ in
+ Pcre2.substitute ~rex:rx ~subst:defunc s
+
+
(* strip commponent version string *)
let strip_version s =
let rex = Pcre2.regexp ~flags:[`MULTILINE;`DOTALL] "(^//.*)" in
@@ -13,7 +33,7 @@ let load_config file =
let () = close_in chan in
let prep = strip_version s in
let s = match prep with
- | Ok s -> s
+ | Ok t -> escape_backslash t
| Error msg -> raise (Sys_error msg)
in
let config = Parser.from_string s in
@@ -33,7 +53,8 @@ let load_config file =
let save_config ct file =
try
- let s = Config_tree.render_config ct in
+ let t = Config_tree.render_config ct in
+ let s = unescape_backslash t in
let chan = open_out file in
let () = output_string chan s in
let () = close_out chan in