From 78d40e304be182b7e07be449ebda668b8b9d0fcd Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 4 Mar 2024 12:17:56 -0300 Subject: fix: check permissions before trying to lock This should provide a better error message. --- src/luarocks/cmd.lua | 5 +++++ src/luarocks/cmd/build.lua | 6 ------ src/luarocks/cmd/install.lua | 4 ---- src/luarocks/cmd/make.lua | 6 +----- src/luarocks/cmd/purge.lua | 5 ----- src/luarocks/cmd/remove.lua | 7 +------ src/luarocks/fs/unix/tools.lua | 2 +- 7 files changed, 8 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/luarocks/cmd.lua b/src/luarocks/cmd.lua index b6d0d47e..6085fc9d 100644 --- a/src/luarocks/cmd.lua +++ b/src/luarocks/cmd.lua @@ -730,6 +730,11 @@ function cmd.run_command(description, commands, external_namespace, ...) local lock if cmd_mod.needs_lock and cmd_mod.needs_lock(args) then + local ok, err = fs.check_command_permissions(args) + if not ok then + die(err, cmd.errorcodes.PERMISSIONDENIED) + end + lock, err = fs.lock_access(path.root_dir(cfg.root_dir), args.force_lock) if not lock then err = args.force_lock diff --git a/src/luarocks/cmd/build.lua b/src/luarocks/cmd/build.lua index 710c89f2..ada6b7d2 100644 --- a/src/luarocks/cmd/build.lua +++ b/src/luarocks/cmd/build.lua @@ -15,7 +15,6 @@ local build = require("luarocks.build") local writer = require("luarocks.manif.writer") local search = require("luarocks.search") local make = require("luarocks.cmd.make") -local cmd = require("luarocks.cmd") local repos = require("luarocks.repos") function cmd_build.add_to_parser(parser) @@ -156,11 +155,6 @@ function cmd_build.command(args) end) end - local ok, err = fs.check_command_permissions(args) - if not ok then - return nil, err, cmd.errorcodes.PERMISSIONDENIED - end - local name, version, skip = do_build(args.rock, args.namespace, args.version, opts) if not name then return nil, version diff --git a/src/luarocks/cmd/install.lua b/src/luarocks/cmd/install.lua index a6dddd2b..e71b6db8 100644 --- a/src/luarocks/cmd/install.lua +++ b/src/luarocks/cmd/install.lua @@ -13,7 +13,6 @@ local remove = require("luarocks.remove") local search = require("luarocks.search") local queries = require("luarocks.queries") local cfg = require("luarocks.core.cfg") -local cmd = require("luarocks.cmd") function install.add_to_parser(parser) local cmd = parser:command("install", "Install a rock.", util.see_also()) -- luacheck: ignore 431 @@ -226,9 +225,6 @@ end -- @return boolean or (nil, string, exitcode): True if installation was -- successful, nil and an error message otherwise. exitcode is optionally returned. function install.command(args) - local ok, err = fs.check_command_permissions(args) - if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end - if args.rock:match("%.rockspec$") or args.rock:match("%.src%.rock$") then local build = require("luarocks.cmd.build") return build.command(args) diff --git a/src/luarocks/cmd/make.lua b/src/luarocks/cmd/make.lua index ef794b91..eaa4b899 100644 --- a/src/luarocks/cmd/make.lua +++ b/src/luarocks/cmd/make.lua @@ -6,7 +6,6 @@ local make = {} local build = require("luarocks.build") -local fs = require("luarocks.fs") local util = require("luarocks.util") local cfg = require("luarocks.core.cfg") local fetch = require("luarocks.fetch") @@ -14,7 +13,6 @@ local pack = require("luarocks.pack") local remove = require("luarocks.remove") local deps = require("luarocks.deps") local writer = require("luarocks.manif.writer") -local cmd = require("luarocks.cmd") function make.cmd_options(parser) parser:flag("--no-install", "Do not install the rock.") @@ -126,9 +124,7 @@ function make.command(args) return name, version end) else - local ok, err = fs.check_command_permissions(args) - if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end - ok, err = build.build_rockspec(rockspec, opts) + local ok, err = build.build_rockspec(rockspec, opts) if not ok then return nil, err end local name, version = ok, err -- luacheck: ignore 421 diff --git a/src/luarocks/cmd/purge.lua b/src/luarocks/cmd/purge.lua index 16d96531..30811ddf 100644 --- a/src/luarocks/cmd/purge.lua +++ b/src/luarocks/cmd/purge.lua @@ -4,7 +4,6 @@ local purge = {} local util = require("luarocks.util") -local fs = require("luarocks.fs") local path = require("luarocks.path") local search = require("luarocks.search") local vers = require("luarocks.core.vers") @@ -13,7 +12,6 @@ local writer = require("luarocks.manif.writer") local cfg = require("luarocks.core.cfg") local remove = require("luarocks.remove") local queries = require("luarocks.queries") -local cmd = require("luarocks.cmd") function purge.add_to_parser(parser) -- luacheck: push ignore 431 @@ -39,9 +37,6 @@ end function purge.command(args) local tree = args.tree - local ok, err = fs.check_command_permissions(args) - if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end - local results = {} search.local_manifest_search(results, path.rocks_dir(tree), queries.all()) diff --git a/src/luarocks/cmd/remove.lua b/src/luarocks/cmd/remove.lua index 91aa8914..8b11bcd3 100644 --- a/src/luarocks/cmd/remove.lua +++ b/src/luarocks/cmd/remove.lua @@ -6,13 +6,11 @@ local cmd_remove = {} local remove = require("luarocks.remove") local util = require("luarocks.util") local cfg = require("luarocks.core.cfg") -local fs = require("luarocks.fs") local search = require("luarocks.search") local path = require("luarocks.path") local deps = require("luarocks.deps") local writer = require("luarocks.manif.writer") local queries = require("luarocks.queries") -local cmd = require("luarocks.cmd") function cmd_remove.add_to_parser(parser) -- luacheck: push ignore 431 @@ -43,9 +41,6 @@ function cmd_remove.command(args) local name = args.rock local deps_mode = deps.get_deps_mode(args) - local ok, err = fs.check_command_permissions(args) - if not ok then return nil, err, cmd.errorcodes.PERMISSIONDENIED end - local rock_type = name:match("%.(rock)$") or name:match("%.(rockspec)$") local version = args.version local filename = name @@ -63,7 +58,7 @@ function cmd_remove.command(args) return nil, "Could not find rock '"..rock.."' in "..path.rocks_tree_to_string(cfg.root_dir) end - ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast) + local ok, err = remove.remove_search_results(results, name, deps_mode, args.force, args.force_fast) if not ok then return nil, err end diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index a0fba784..16b31335 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua @@ -338,7 +338,7 @@ function tools.lock_access(dirname, force) fd:close() - local lockfile = dir.path(dirname, "lockfile.luarocks") + local lockfile = dir.path(dirname, "lockfile.lfs") local force_flag = force and " -f" or "" -- cgit v1.2.3-55-g6feb