@ai-ecoverse/slicc-kernel 1.175.1 → 1.176.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/driver-worker.js +2 -1
- package/dist/driver-worker.js.map +2 -2
- package/dist/index.js +3 -1
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +44 -5
- package/dist/kernel-worker.js.map +2 -2
- package/dist/node-driver-worker.js +2 -1
- package/dist/node-driver-worker.js.map +2 -2
- package/dist/node-process-worker.cjs +1 -1
- package/dist/node-process-worker.js +1 -1
- package/dist/node.js +45 -6
- package/dist/node.js.map +2 -2
- package/dist/process-worker.js +1 -1
- package/dist/types/fs/dac.d.ts +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/kernel/embedder.d.ts +3 -0
- package/dist/types/serve.d.ts +5 -0
- package/dist/types/users.d.ts +5 -1
- package/package.json +1 -1
|
@@ -7514,7 +7514,7 @@ var init_version = __esm({
|
|
|
7514
7514
|
"src/version.ts"() {
|
|
7515
7515
|
"use strict";
|
|
7516
7516
|
init_captured_globals();
|
|
7517
|
-
KERNEL_VERSION = true ? "1.
|
|
7517
|
+
KERNEL_VERSION = true ? "1.176.0" : "0.0.0-dev";
|
|
7518
7518
|
OS_RELEASE = "6.0.0-slicc";
|
|
7519
7519
|
}
|
|
7520
7520
|
});
|
|
@@ -7513,7 +7513,7 @@ var init_version = __esm({
|
|
|
7513
7513
|
"src/version.ts"() {
|
|
7514
7514
|
"use strict";
|
|
7515
7515
|
init_captured_globals();
|
|
7516
|
-
KERNEL_VERSION = true ? "1.
|
|
7516
|
+
KERNEL_VERSION = true ? "1.176.0" : "0.0.0-dev";
|
|
7517
7517
|
OS_RELEASE = "6.0.0-slicc";
|
|
7518
7518
|
}
|
|
7519
7519
|
});
|
package/dist/node.js
CHANGED
|
@@ -3702,7 +3702,7 @@ function satisfies(version, range2) {
|
|
|
3702
3702
|
}
|
|
3703
3703
|
|
|
3704
3704
|
// src/version.ts
|
|
3705
|
-
var KERNEL_VERSION = true ? "1.
|
|
3705
|
+
var KERNEL_VERSION = true ? "1.176.0" : "0.0.0-dev";
|
|
3706
3706
|
var OS_RELEASE = "6.0.0-slicc";
|
|
3707
3707
|
function procVersion() {
|
|
3708
3708
|
return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
|
|
@@ -9064,6 +9064,7 @@ var EmbedderBroker = class {
|
|
|
9064
9064
|
budget;
|
|
9065
9065
|
open = /* @__PURE__ */ new Map();
|
|
9066
9066
|
tagsOf;
|
|
9067
|
+
denied;
|
|
9067
9068
|
constructor(users, lookup4, tagsOf2 = () => void 0, budget = EMBEDDER_BUDGET) {
|
|
9068
9069
|
this.users = users;
|
|
9069
9070
|
this.tagsOf = tagsOf2;
|
|
@@ -9081,7 +9082,8 @@ var EmbedderBroker = class {
|
|
|
9081
9082
|
return this.hooks.get(client);
|
|
9082
9083
|
}
|
|
9083
9084
|
async allowed(policy, caller) {
|
|
9084
|
-
if (caller.euid === 0
|
|
9085
|
+
if (caller.euid === 0) return true;
|
|
9086
|
+
if (policy.session !== false && caller.euid === caller.sessionUid) return true;
|
|
9085
9087
|
if (policy.group !== void 0) {
|
|
9086
9088
|
const gid = await this.lookup.groupId(policy.group);
|
|
9087
9089
|
if (gid !== void 0 && (caller.egid === gid || caller.groups.includes(gid))) return true;
|
|
@@ -9097,9 +9099,22 @@ var EmbedderBroker = class {
|
|
|
9097
9099
|
if (!hook) throw new KernelError("ENOTSUP", "no page answers requests for this session");
|
|
9098
9100
|
const policy = Object.hasOwn(hook.kinds, kind) ? hook.kinds[kind] : void 0;
|
|
9099
9101
|
if (!policy) throw new KernelError("ENOTSUP", `this embedder does not answer ${kind}`);
|
|
9100
|
-
if (this.users !== "off" && !await this.allowed(policy, caller))
|
|
9101
|
-
throw new KernelError("EACCES", `${kind} is not allowed for this user`);
|
|
9102
9102
|
const tags = caller.tags;
|
|
9103
|
+
if (this.users !== "off" && !await this.allowed(policy, caller)) {
|
|
9104
|
+
try {
|
|
9105
|
+
this.denied?.({
|
|
9106
|
+
pid: caller.pid,
|
|
9107
|
+
uid: caller.euid,
|
|
9108
|
+
op: "embedder",
|
|
9109
|
+
path: EMBEDDER_PATH,
|
|
9110
|
+
errno: "EACCES",
|
|
9111
|
+
kind,
|
|
9112
|
+
...tags?.length ? { tag: tags[0] } : {}
|
|
9113
|
+
});
|
|
9114
|
+
} catch {
|
|
9115
|
+
}
|
|
9116
|
+
throw new KernelError("EACCES", `${kind} is not allowed for this user`);
|
|
9117
|
+
}
|
|
9103
9118
|
return {
|
|
9104
9119
|
pid: caller.shownPid,
|
|
9105
9120
|
uid: caller.euid,
|
|
@@ -9142,7 +9157,8 @@ function kindsOf(hook) {
|
|
|
9142
9157
|
kind,
|
|
9143
9158
|
{
|
|
9144
9159
|
...policy?.group !== void 0 ? { group: String(policy.group) } : {},
|
|
9145
|
-
...policy?.users ? { users: [...policy.users] } : {}
|
|
9160
|
+
...policy?.users ? { users: [...policy.users] } : {},
|
|
9161
|
+
...policy?.session === false ? { session: false } : {}
|
|
9146
9162
|
}
|
|
9147
9163
|
])
|
|
9148
9164
|
);
|
|
@@ -15429,11 +15445,12 @@ function parsePolicy(text, file) {
|
|
|
15429
15445
|
var PASSWD = "/etc/passwd";
|
|
15430
15446
|
var GROUP = "/etc/group";
|
|
15431
15447
|
var DEFAULT_PASSWD = "root:x:0:0:root:/root:/bin/bash\nnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\n";
|
|
15432
|
-
var DEFAULT_GROUP = "root:x:0:\nsudo:x:27:\nusers:x:100:\nnogroup:x:65534:\n";
|
|
15448
|
+
var DEFAULT_GROUP = "root:x:0:\ndialout:x:20:\nsudo:x:27:\nusers:x:100:\nnogroup:x:65534:\n";
|
|
15433
15449
|
var NAME3 = /^[a-z_][a-z0-9_.-]*$/;
|
|
15434
15450
|
var MAX_NAME = 255;
|
|
15435
15451
|
var FIRST_UID = 1e3;
|
|
15436
15452
|
var LAST_UID = 6e4;
|
|
15453
|
+
var MAX_GID = 4294967294;
|
|
15437
15454
|
var USERS_GROUP = "users";
|
|
15438
15455
|
var HOME_DIR = /^\/home\/[^/]+$/;
|
|
15439
15456
|
var SYSTEM_PNPM_HOME = "/usr/local/share/pnpm";
|
|
@@ -15729,6 +15746,26 @@ var UserDb = class {
|
|
|
15729
15746
|
const { group } = await this.tables();
|
|
15730
15747
|
return parsed(group).map(({ name: name2, gid, members }) => ({ name: name2, gid, members: [...members] }));
|
|
15731
15748
|
}
|
|
15749
|
+
addGroup(name2, gid) {
|
|
15750
|
+
return this.serial(async () => {
|
|
15751
|
+
if (typeof name2 !== "string" || name2.length > MAX_NAME || !NAME3.test(name2)) {
|
|
15752
|
+
throw fsError("EINVAL", `not a group name: ${String(name2)}`);
|
|
15753
|
+
}
|
|
15754
|
+
if (typeof gid !== "number" || !Number.isInteger(gid) || gid < 0 || gid > MAX_GID) {
|
|
15755
|
+
throw fsError("EINVAL", `not a group id: ${String(gid)}`);
|
|
15756
|
+
}
|
|
15757
|
+
const { group } = await this.tables();
|
|
15758
|
+
const rows = parsed(group);
|
|
15759
|
+
const found = rows.find((g) => g.name === name2);
|
|
15760
|
+
if (found) return { name: found.name, gid: found.gid, members: [...found.members] };
|
|
15761
|
+
const taken = rows.find((g) => g.gid === gid);
|
|
15762
|
+
if (taken) throw fsError("EEXIST", `group id ${gid} is group ${taken.name}`);
|
|
15763
|
+
group.push({ name: name2, gid, members: [] });
|
|
15764
|
+
await this.fs.mkdir("/etc", { recursive: true });
|
|
15765
|
+
await this.fs.writeFile(GROUP, formatGroup(group));
|
|
15766
|
+
return { name: name2, gid, members: [] };
|
|
15767
|
+
});
|
|
15768
|
+
}
|
|
15732
15769
|
addMember(group, user) {
|
|
15733
15770
|
return this.member(group, user, true);
|
|
15734
15771
|
}
|
|
@@ -32360,6 +32397,7 @@ var Launcher = class {
|
|
|
32360
32397
|
(pid) => this.tagsOf(pid)
|
|
32361
32398
|
);
|
|
32362
32399
|
this.embedder = this.embedderBroker(options.embedder);
|
|
32400
|
+
this.embedder.denied = options.onDenial;
|
|
32363
32401
|
this.sealed = new SealedBroker(
|
|
32364
32402
|
options.sealed,
|
|
32365
32403
|
this.usersMode,
|
|
@@ -37686,6 +37724,7 @@ async function createNodeKernel(options = {}) {
|
|
|
37686
37724
|
},
|
|
37687
37725
|
groups: {
|
|
37688
37726
|
list: () => guard2(() => launcher.users.groups()),
|
|
37727
|
+
add: (name2, options2) => guard2(() => launcher.users.addGroup(name2, options2?.gid)),
|
|
37689
37728
|
addMember: (group, user) => guard2(() => launcher.users.addMember(group, user)),
|
|
37690
37729
|
removeMember: (group, user) => guard2(() => launcher.users.removeMember(group, user))
|
|
37691
37730
|
},
|