aboutsummaryrefslogtreecommitdiff
path: root/libexec/flua
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2025-07-04 19:06:10 +0000
committerMark Johnston <markj@FreeBSD.org>2025-07-04 20:11:12 +0000
commit88d94ead7f7cfb7ea7c4134b4cd2f89da670a8e1 (patch)
tree4cf3df1656973c986a5d433f8d5fa37f4ca2beb3 /libexec/flua
parent3b1c4cb1bfff6efa363919de6c05765c24607b83 (diff)
Diffstat (limited to 'libexec/flua')
-rw-r--r--libexec/flua/modules/lposix.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/libexec/flua/modules/lposix.c b/libexec/flua/modules/lposix.c
index 816d4bc688d2..9edc7e687786 100644
--- a/libexec/flua/modules/lposix.c
+++ b/libexec/flua/modules/lposix.c
@@ -88,18 +88,23 @@ static int
lua_chown(lua_State *L)
{
const char *path;
- uid_t owner = (uid_t) -1;
- gid_t group = (gid_t) -1;
+ uid_t owner = (uid_t)-1;
+ gid_t group = (gid_t)-1;
+ int error;
enforce_max_args(L, 3);
path = luaL_checkstring(L, 1);
if (lua_isinteger(L, 2))
- owner = (uid_t) lua_tointeger(L, 2);
+ owner = (uid_t)lua_tointeger(L, 2);
else if (lua_isstring(L, 2)) {
- struct passwd *p = getpwnam(lua_tostring(L, 2));
- if (p != NULL)
- owner = p->pw_uid;
+ char buf[4096];
+ struct passwd passwd, *pwd;
+
+ error = getpwnam_r(lua_tostring(L, 2), &passwd,
+ buf, sizeof(buf), &pwd);
+ if (error == 0)
+ owner = pwd->pw_uid;
else
return (luaL_argerror(L, 2,
lua_pushfstring(L, "unknown user %s",
@@ -112,11 +117,15 @@ lua_chown(lua_State *L)
}
if (lua_isinteger(L, 3))
- group = (gid_t) lua_tointeger(L, 3);
+ group = (gid_t)lua_tointeger(L, 3);
else if (lua_isstring(L, 3)) {
- struct group *g = getgrnam(lua_tostring(L, 3));
- if (g != NULL)
- group = g->gr_gid;
+ char buf[4096];
+ struct group gr, *grp;
+
+ error = getgrnam_r(lua_tostring(L, 3), &gr, buf, sizeof(buf),
+ &grp);
+ if (error == 0)
+ group = grp->gr_gid;
else
return (luaL_argerror(L, 3,
lua_pushfstring(L, "unknown group %s",