diff options
| author | Daniil Baturin <daniil@vyos.io> | 2025-07-22 15:00:11 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-22 15:00:11 +0100 |
| commit | 9ca458bc1eaedf45dcca8c7e4a85ba3e3562396a (patch) | |
| tree | f919ff4488a6b4a4ea6e67c5f3e1d82798599efd /src | |
| parent | 3ab1a758eb5a84e8997eecf074d584a44d1f945d (diff) | |
| parent | c25ed29baa321a72c5bdcb2054141d5d44f901ae (diff) | |
| download | vyos1x-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.ml | 25 |
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 |
