diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2024-05-14 14:59:56 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-05-14 15:48:56 -0300 |
| commit | e930ef7868056f1eb666dc3179ef7f7ce094d805 (patch) | |
| tree | e8c454b33d89b030f0709a39a85e24d2c95ad04e | |
| parent | 81c23bc4cb518b2892ed1ffd089e610a45013692 (diff) | |
| download | luarocks-honor-umask.tar.gz luarocks-honor-umask.tar.bz2 luarocks-honor-umask.zip | |
fs(unix): honor umask correctlyhonor-umask
| -rw-r--r-- | src/luarocks/fs/lua.lua | 14 | ||||
| -rw-r--r-- | src/luarocks/fs/unix.lua | 18 | ||||
| -rw-r--r-- | src/luarocks/fs/unix/tools.lua | 15 |
3 files changed, 24 insertions, 23 deletions
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 6e8c4670..4016ddcd 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua | |||
| @@ -1070,17 +1070,9 @@ do | |||
| 1070 | end | 1070 | end |
| 1071 | 1071 | ||
| 1072 | function fs_lua.set_permissions(filename, mode, scope) | 1072 | function fs_lua.set_permissions(filename, mode, scope) |
| 1073 | local perms | 1073 | local perms, err = fs._unix_mode_scope_to_perms(mode, scope) |
| 1074 | if mode == "read" and scope == "user" then | 1074 | if err then |
| 1075 | perms = fs._unix_moderate_permissions("600") | 1075 | return false, err |
| 1076 | elseif mode == "exec" and scope == "user" then | ||
| 1077 | perms = fs._unix_moderate_permissions("700") | ||
| 1078 | elseif mode == "read" and scope == "all" then | ||
| 1079 | perms = fs._unix_moderate_permissions("644") | ||
| 1080 | elseif mode == "exec" and scope == "all" then | ||
| 1081 | perms = fs._unix_moderate_permissions("755") | ||
| 1082 | else | ||
| 1083 | return false, "Invalid permission " .. mode .. " for " .. scope | ||
| 1084 | end | 1076 | end |
| 1085 | 1077 | ||
| 1086 | -- LuaPosix (as of 5.1.15) does not support octal notation... | 1078 | -- LuaPosix (as of 5.1.15) does not support octal notation... |
diff --git a/src/luarocks/fs/unix.lua b/src/luarocks/fs/unix.lua index f5f3b349..41a9ba8b 100644 --- a/src/luarocks/fs/unix.lua +++ b/src/luarocks/fs/unix.lua | |||
| @@ -197,7 +197,7 @@ end | |||
| 197 | --- Moderate the given permissions based on the local umask | 197 | --- Moderate the given permissions based on the local umask |
| 198 | -- @param perms string: permissions to moderate | 198 | -- @param perms string: permissions to moderate |
| 199 | -- @return string: the moderated permissions | 199 | -- @return string: the moderated permissions |
| 200 | function unix._unix_moderate_permissions(perms) | 200 | local function apply_umask(perms) |
| 201 | local umask = fs._unix_umask() | 201 | local umask = fs._unix_umask() |
| 202 | 202 | ||
| 203 | local moderated_perms = "" | 203 | local moderated_perms = "" |
| @@ -219,6 +219,22 @@ function unix._unix_moderate_permissions(perms) | |||
| 219 | return moderated_perms | 219 | return moderated_perms |
| 220 | end | 220 | end |
| 221 | 221 | ||
| 222 | function unix._unix_mode_scope_to_perms(mode, scope) | ||
| 223 | local perms | ||
| 224 | if mode == "read" and scope == "user" then | ||
| 225 | perms = apply_umask("600") | ||
| 226 | elseif mode == "exec" and scope == "user" then | ||
| 227 | perms = apply_umask("700") | ||
| 228 | elseif mode == "read" and scope == "all" then | ||
| 229 | perms = apply_umask("666") | ||
| 230 | elseif mode == "exec" and scope == "all" then | ||
| 231 | perms = apply_umask("777") | ||
| 232 | else | ||
| 233 | return false, "Invalid permission " .. mode .. " for " .. scope | ||
| 234 | end | ||
| 235 | return perms | ||
| 236 | end | ||
| 237 | |||
| 222 | function unix.system_cache_dir() | 238 | function unix.system_cache_dir() |
| 223 | if fs.is_dir("/var/cache") then | 239 | if fs.is_dir("/var/cache") then |
| 224 | return "/var/cache" | 240 | return "/var/cache" |
diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index 16b31335..d7334733 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua | |||
| @@ -221,18 +221,11 @@ end | |||
| 221 | function tools.set_permissions(filename, mode, scope) | 221 | function tools.set_permissions(filename, mode, scope) |
| 222 | assert(filename and mode and scope) | 222 | assert(filename and mode and scope) |
| 223 | 223 | ||
| 224 | local perms | 224 | local perms, err = fs._unix_mode_scope_to_perms(mode, scope) |
| 225 | if mode == "read" and scope == "user" then | 225 | if err then |
| 226 | perms = fs._unix_moderate_permissions("600") | 226 | return false, err |
| 227 | elseif mode == "exec" and scope == "user" then | ||
| 228 | perms = fs._unix_moderate_permissions("700") | ||
| 229 | elseif mode == "read" and scope == "all" then | ||
| 230 | perms = fs._unix_moderate_permissions("644") | ||
| 231 | elseif mode == "exec" and scope == "all" then | ||
| 232 | perms = fs._unix_moderate_permissions("755") | ||
| 233 | else | ||
| 234 | return false, "Invalid permission " .. mode .. " for " .. scope | ||
| 235 | end | 227 | end |
| 228 | |||
| 236 | return fs.execute(vars.CHMOD, perms, filename) | 229 | return fs.execute(vars.CHMOD, perms, filename) |
| 237 | end | 230 | end |
| 238 | 231 | ||
