From nobody Tue Jul 8 14:32:21 2025 X-Original-To: dev-commits-src-all@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 4bc3Tx6WCvz614tn; Tue, 08 Jul 2025 14:32:21 +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 4bc3Tx5LX8z49Lh; Tue, 08 Jul 2025 14:32:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751985141; 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=01sUur/HOJPoATB/Uzl02MzYs2Jf6qZpU71f7I1UNaQ=; b=R4ypncxTK4auAAwsKpUlWJbuInCTFdW70Ty8r0GEkT+PzxGLoYMVbzmL71P5gfiBVgi4W1 ncSL3zMsXMiZ0JWWlVKGpuZUG/jEJiVTcSsMHp/9AXeFPS5p6F0EuLCjJZQM0YGTLOMet9 IHjDG1kVXlu3n1kZYWybGrlcdDcItwpTNHA/z9m7lmX3+a1pgOupH/N629uAMc/UDis6tF SjzmfgtCN/gpwaN8ZtEi2ajc7VEhc+4OOTAJe6htHEHXTn4CLXF5nt3539bE6Tv0QkdFRD brx6carH12rSx62cTXsiTae9vbxlXWQNQkBjg4IalG4WTi33nSetiCUhqlSYgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751985141; 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=01sUur/HOJPoATB/Uzl02MzYs2Jf6qZpU71f7I1UNaQ=; b=S7U8XI7Zf4KO2z3ZvWwIibYkIC6v+kqARWm5Q8kx7fLH0tAcRMrpzPA07d4/gzK/lOA36J 69Oycuh47GArhlupAJeR6aLDVq0Db7Rkkr/NWMy9WhZMe+5ZIJ8FCRWiWQxIeCEB7Q79w3 YZFdxftBeXig6vF8XA+A9h1q3Cz+mKwFeU21exJtVfBWKqkQBeXZp0wcvljHS0r7uJaS+x u7ZDZole3Lt27YzBlNJrP+Bwaey8F/jHWb4EU2UFTBaNC5UF7h/Bam/8eAy5a0XNFv5giQ NaWalkpD8YTc1ya0w4iqtO83q/tzDmaV9Jy5PhADrHf7txbTEfWEleIpLgbZKA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751985141; a=rsa-sha256; cv=none; b=KdwOYIfnhB77aj9eol5Tx8ycj4EM4N/x3ttyH3hSTctPUM1Y3dco+fa2qWVT2xbHUieZK5 3/BaP4IJ2OMukXtY4TysFS3U/21quEIj3ck0QLkJttcvuPRR2aRBo9/HSUZfg0476SvauM +GPkT3dkZoI2TV6qZ8Y3ROSdlORNEBPVY5KHFLAbcrD7sLQYRn0RP2/ocpw2uf4LPMwc/Q Nza492A3I4AyueW9xFfJ++DwMTRM3n1NRwjplp7TqewyVit4fvGU/eO8qvbegkYuwLdXaF fVLV5CWvzkizfhdVTrl2+kYAVXwBCpvMCacfwS257rsgTx1ZZYHghnPdOShSaQ== 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 4bc3Tx4y5tzhGY; Tue, 08 Jul 2025 14:32:21 +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 568EWL4x072406; Tue, 8 Jul 2025 14:32:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 568EWLZ0072390; Tue, 8 Jul 2025 14:32:21 GMT (envelope-from git) Date: Tue, 8 Jul 2025 14:32:21 GMT Message-Id: <202507081432.568EWLZ0072390@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Baptiste Daroussin Subject: git: 4ea761b726fe - stable/14 - flua: add freebsd.kenv, kenv(2) bindings List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 4ea761b726fe6a3531a7f7a17933226c03a7c772 Auto-Submitted: auto-generated The branch stable/14 has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=4ea761b726fe6a3531a7f7a17933226c03a7c772 commit 4ea761b726fe6a3531a7f7a17933226c03a7c772 Author: Baptiste Daroussin AuthorDate: 2024-09-12 12:42:01 +0000 Commit: Baptiste Daroussin CommitDate: 2025-07-08 14:28:16 +0000 flua: add freebsd.kenv, kenv(2) bindings Add bindings for kenv(2) right now only get() has been created it allows do dump into a key/value table the kernel environement if no argument is passed, or it returns the value associated to the provided key. Reviewed by: imp, kevans, markj Accepted by: imp, kevans Differential Revision: https://reviews.freebsd.org/D46654 (cherry picked from commit 696922fbfa3e1c400701a3a39dcadf7dee12b06c) --- libexec/flua/libfreebsd/Makefile | 1 + libexec/flua/libfreebsd/Makefile.inc | 2 + libexec/flua/libfreebsd/kenv/Makefile | 5 ++ libexec/flua/libfreebsd/kenv/freebsd.kenv.3lua | 44 ++++++++++++ libexec/flua/libfreebsd/kenv/kenv.c | 96 ++++++++++++++++++++++++++ 5 files changed, 148 insertions(+) diff --git a/libexec/flua/libfreebsd/Makefile b/libexec/flua/libfreebsd/Makefile index 6ed0451055ff..36d39d6b0502 100644 --- a/libexec/flua/libfreebsd/Makefile +++ b/libexec/flua/libfreebsd/Makefile @@ -1,3 +1,4 @@ +SUBDIR+= kenv SUBDIR+= sys .include diff --git a/libexec/flua/libfreebsd/Makefile.inc b/libexec/flua/libfreebsd/Makefile.inc index 01b5f23410c8..26a1540482c7 100644 --- a/libexec/flua/libfreebsd/Makefile.inc +++ b/libexec/flua/libfreebsd/Makefile.inc @@ -1 +1,3 @@ +SHLIBDIR?= ${LIBDIR}/flua/freebsd + .include "../Makefile.inc" diff --git a/libexec/flua/libfreebsd/kenv/Makefile b/libexec/flua/libfreebsd/kenv/Makefile new file mode 100644 index 000000000000..1726c892c515 --- /dev/null +++ b/libexec/flua/libfreebsd/kenv/Makefile @@ -0,0 +1,5 @@ +SHLIB_NAME= kenv.so +SRCS+= kenv.c +MAN= freebsd.kenv.3lua + +.include diff --git a/libexec/flua/libfreebsd/kenv/freebsd.kenv.3lua b/libexec/flua/libfreebsd/kenv/freebsd.kenv.3lua new file mode 100644 index 000000000000..d254dd22c91c --- /dev/null +++ b/libexec/flua/libfreebsd/kenv/freebsd.kenv.3lua @@ -0,0 +1,44 @@ +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.\" Copyright (c) 2024, Baptiste Daroussin +.\" +.Dd September 6, 2024 +.Dt FREEBSD.KENV 3lua +.Os +.Sh NAME +.Nm freebsd.kenv +.Nd Lua binding to +.Fx 's +Linker functions +.Sh SYNOPSIS +.Bd -literal +local kenv = require('freebsd.kenv') +.Ed +.Pp +.Bl -tag -width XXXX -compact +.It Dv table = kenv.get() +.It Dv value = kenv.get(key) +.El +.Sh DESCRIPTION +The +.Nm +module is a binding to the +.Xr kenv 2 +function. +.Pp +List of functions: +.Bl -tag -width XXXX +.It Dv table = freebsd.kenv.get() +Dump the kernel environnement into a key/value +.Fa table . +.It Dv value = freebsd.kenv.get(key) +Return the +.Fa value +associated to the +.Fa key , +if it exists, or +.Va nil +otherwise. +.Sh SEE ALSO +.Xr kenv 2 diff --git a/libexec/flua/libfreebsd/kenv/kenv.c b/libexec/flua/libfreebsd/kenv/kenv.c new file mode 100644 index 000000000000..954baa00facb --- /dev/null +++ b/libexec/flua/libfreebsd/kenv/kenv.c @@ -0,0 +1,96 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2024, Baptiste Daroussin + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +int luaopen_freebsd_kenv(lua_State *L); + +static int +lua_kenv_get(lua_State *L) +{ + const char *env; + int ret, n; + char value[1024]; + + n = lua_gettop(L); + if (n == 0) { + char *buf, *bp, *cp; + int size; + + size = kenv(KENV_DUMP, NULL, NULL, 0); + if (size < 0) { + lua_pushnil(L); + lua_pushstring(L, strerror(errno)); + lua_pushinteger(L, errno); + return (3); + } + size += 1; + buf = malloc(size); + if (buf == NULL) { + lua_pushnil(L); + lua_pushstring(L, strerror(errno)); + lua_pushinteger(L, errno); + return (3); + } + if (kenv(KENV_DUMP, NULL, buf, size) < 0) { + free(buf); + lua_pushnil(L); + lua_pushstring(L, strerror(errno)); + lua_pushinteger(L, errno); + return (3); + } + + lua_newtable(L); + for (bp = buf; *bp != '\0'; bp += strlen(bp) + 1) { + cp = strchr(bp, '='); + if (cp == NULL) + continue; + *cp++ = '\0'; + lua_pushstring(L, cp); + lua_setfield(L, -2, bp); + bp = cp; + } + free(buf); + return (1); + } + env = luaL_checkstring(L, 1); + ret = kenv(KENV_GET, env, value, sizeof(value)); + if (ret == -1) { + if (errno == ENOENT) { + lua_pushnil(L); + return (1); + } + lua_pushnil(L); + lua_pushstring(L, strerror(errno)); + lua_pushinteger(L, errno); + return (3); + } + lua_pushstring(L, value); + return (1); +} + +#define REG_SIMPLE(n) { #n, lua_kenv_ ## n } +static const struct luaL_Reg freebsd_kenv[] = { + REG_SIMPLE(get), + { NULL, NULL }, +}; +#undef REG_SIMPLE + +int +luaopen_freebsd_kenv(lua_State *L) +{ + luaL_newlib(L, freebsd_kenv); + + return (1); +}