From 3c0445e1b22bd0b6ab0fa160f2ad3250da48014c Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 5 Oct 2020 21:13:23 +0200 Subject: util.prosodyctl: Construct luarocks command line with templates More flexible and safer wrt escaping --- util/prosodyctl.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'util') 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); -- cgit v1.2.3