diff options
author | Kim Alvefur <zash@zash.se> | 2020-10-05 21:13:23 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2020-10-05 21:13:23 +0200 |
commit | 22bcfff5cea846a83397de89b4a78e71245ed95c (patch) | |
tree | 70e942c1404b037d337db494636727cc3946fb80 /util | |
parent | 7f390f42dad75c3f4d1cee214ccded9b20e4552a (diff) | |
download | prosody-22bcfff5cea846a83397de89b4a78e71245ed95c.tar.gz prosody-22bcfff5cea846a83397de89b4a78e71245ed95c.zip |
util.prosodyctl: Construct luarocks command line with templates
More flexible and safer wrt escaping
Diffstat (limited to 'util')
-rw-r--r-- | util/prosodyctl.lua | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/util/prosodyctl.lua b/util/prosodyctl.lua index cb86a5a1..6378856a 100644 --- a/util/prosodyctl.lua +++ b/util/prosodyctl.lua @@ -12,6 +12,7 @@ local encodings = require "util.encodings"; local stringprep = encodings.stringprep; local storagemanager = require "core.storagemanager"; local usermanager = require "core.usermanager"; +local interpolation = require "util.interpolation"; local signal = require "util.signal"; local set = require "util.set"; local lfs = require "lfs"; @@ -224,6 +225,8 @@ local function get_path_custom_plugins(plugin_paths) end end +local render_cli = interpolation.new("%b{}", function (s) return "'"..s:gsub("'","'\\''").."'" end) + local function call_luarocks(mod, operation) local dir = get_path_custom_plugins(prosody.paths.plugins); if operation == "install" then @@ -232,9 +235,11 @@ local function call_luarocks(mod, operation) show_message("Removing %s from %s", mod, dir); end if operation == "list" then - os.execute("luarocks list --tree='"..dir.."'") + os.execute(render_cli("luarocks list --tree={dir}", {dir = dir})); else - os.execute("luarocks --tree='"..dir.."' --server='http://localhost/' "..operation.." "..mod); + os.execute(render_cli("luarocks {op} --tree={dir} {server&--server={server}} {mod}", { + dir = dir; op = operation; mod = mod; server = "http://localhost/"; + })); end if operation == "install" then show_module_configuration_help(mod); |