From ab5b1380c1717c22c9d6188b334e8a93c877be57 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Wed, 19 Sep 2018 10:32:03 -0700 Subject: fs.unix: fallback for when $USER variable is unset Also, declare Unix version of current_user in luarocks.fs.unix.tools, so that the pure-Lua version based on LuaPosix takes precedence when available. --- spec/install_spec.lua | 4 +++- src/luarocks/fs/lua.lua | 2 +- src/luarocks/fs/unix.lua | 8 -------- src/luarocks/fs/unix/tools.lua | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/spec/install_spec.lua b/spec/install_spec.lua index 24dbdb30..1154e9b9 100644 --- a/spec/install_spec.lua +++ b/spec/install_spec.lua @@ -54,7 +54,9 @@ describe("luarocks install #integration", function() end) it("fails with local flag as root #unix", function() - assert.is_false(run.luarocks_bool("install --local luasocket ", { USER = "root" } )) + if test_env.TYPE_TEST_ENV ~= "full" then + assert.is_false(run.luarocks_bool("install --local luasocket ", { USER = "root" } )) + end end) it("fails with no downloader", function() diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 14bf0369..145a60de 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua @@ -1045,7 +1045,7 @@ function fs_lua.current_user() end function fs_lua.is_superuser() - return false + return posix.geteuid() == 0 end -- This call is not available on all systems, see #677 diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua index 28189089..61569e30 100644 --- a/src/luarocks/fs/unix.lua +++ b/src/luarocks/fs/unix.lua @@ -176,14 +176,6 @@ function unix.tmpname() return os.tmpname() end -function unix.current_user() - return os.getenv("USER") -end - -function unix.is_superuser() - return os.getenv("USER") == "root" -end - function unix.export_cmd(var, val) return ("export %s='%s'"):format(var, val) end diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index f0c0a05c..b7fd4de5 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua @@ -297,4 +297,22 @@ function tools.is_file(file) return fs.execute(vars.TEST, "-f", file) end +function tools.current_user() + local user = os.getenv("USER") + if user then + return user + end + local pd = io.popen("whoami", "r") + if not pd then + return "" + end + user = pd:read("*l") + pd:close() + return user +end + +function tools.is_superuser() + return fs.current_user() == "root" +end + return tools -- cgit v1.2.3-55-g6feb