From nobody Fri Jul 4 20:11:24 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bYlC04vsnz60jKk; Fri, 04 Jul 2025 20:11:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bYlC03RDTz3jDS; Fri, 04 Jul 2025 20:11:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751659884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=gOVMIR9ke6AjUAmtpFmv4QR4mTKcGEtRN+DAq0FT5bQ=; b=XCl/DcIPqGvm05xeiOJUCVSFRKwV8EFpG7rVEmLrD0TsxJ94+8JU6QdBI0xAsM4QDZ7qpn QLnMdCXeuWohHA2b0mh2fPPVF1Jghv3Qg3+Z32quwmpzJZnrz6ylnLrfADJM+uvQE9Bag9 LkpZEi/PoQM2RrQdgQwg6Av8WhPrsYO5MfIWyEx0kHl2zEHJoqRcX0QWIFGQpHafwEUKpV dPUwxzWLcJfZTRsCSPMb2X6lFxrYPdtAcM+mvTBFLf1kCu+45hZGcyOXCh0tAZGKTgib62 AdZhC4c7HWRsvhMsuucUQifCSbYLUGg4Z2SBO6mlJVhDQx6xkJCRRHgzmY+6jw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751659884; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=gOVMIR9ke6AjUAmtpFmv4QR4mTKcGEtRN+DAq0FT5bQ=; b=EBFQr4SF1TVLIP20e9s4fwv25VCvO1ZGkm0v9HJpRk60LNKcqc4U6m+XWcEyzjoG4WRsna XA525FtAhhaQMGPH/mrImk6Wbso2TTFhATH0sUgvrYqum/Q8GfYE88nSbsFXBWmbweFeSC kqrr/bmjZ2V7DpTPFP5oSRuI4gQyiznvLugq/x+iTL5IO1uJU6509WD1XFGTihw5EELvic RMuRclYqR6skt14SK8iwBvYQ0rh9TKEu7uIrFzqGGP5fkYvvcfXmpkP4/TXPYV5JrJbUl/ 3oe0hbXjgQIn62HFF5bKgCrQOpMPnLR4I3szzIHVNwi5kkozC+WrAN/7blT9sA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751659884; a=rsa-sha256; cv=none; b=vKSeGJR4HOurrsjVPYX6bIYYPvL3TpdvkhaKz7f+1YM0ts8u2YnH2BDtqL4sExff9EUUOL gXmzWnNV4Nmmgmz9/1kW8b3X+sMJdagcoqF/vHL9t8esb4lOXha/zgXXkYRIdEBuEcxn2V t19PnL98KNSzuouyNKf4O86sWj+CFfpS1PVpmHO+P/qvc692uqK97eS+kEfW20zivwEzYb UpAyBFWd0X0uoQNxsDC+7zaJZ1qhdNegPXcI98pEF+aAJTka69bs23SNCiyO9bSoRcRIFC JWSHt/E6FjKrXMUSbNY6kqIA+TbnKpJYdrQtXuc7UFNRfE9qc1QV1Sv1qSDhrw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bYlC02szNz13x9; Fri, 04 Jul 2025 20:11:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 564KBOkU074010; Fri, 4 Jul 2025 20:11:24 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 564KBOGH074007; Fri, 4 Jul 2025 20:11:24 GMT (envelope-from git) Date: Fri, 4 Jul 2025 20:11:24 GMT Message-Id: <202507042011.564KBOGH074007@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 88d94ead7f7c - main - lposix: Use reentrant passwd and group lookup functions List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 88d94ead7f7cfb7ea7c4134b4cd2f89da670a8e1 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=88d94ead7f7cfb7ea7c4134b4cd2f89da670a8e1 commit 88d94ead7f7cfb7ea7c4134b4cd2f89da670a8e1 Author: Mark Johnston AuthorDate: 2025-07-04 19:06:10 +0000 Commit: Mark Johnston CommitDate: 2025-07-04 20:11:12 +0000 lposix: Use reentrant passwd and group lookup functions The implementation of chown() in the posix module handles user and group names as well as numeric IDs. When resolving names, be sure to use reentrant lookup functions rather than assuming it's safe to clobber the internal buffers used by getpwnam() and getgrnam(). Fix some style nits while here. Reviewed by: imp, bapt MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D46555 --- libexec/flua/modules/lposix.c | 29 +++++++++++++++++++---------- 1 file 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",