@ai-ecoverse/slicc-kernel 1.47.0 → 1.47.1

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 CHANGED
@@ -495,7 +495,7 @@ OPFS stays authoritative: an entry is consulted only for a path that exists in O
495
495
 
496
496
  The database is `slicc-kernel` (or the `metadata` option), schema version 1, with one object store, `entries`, keyed by absolute path (`keyPath: 'path'`) and an index `dir` on the parent directory of symlinks. A record looks like `{ path, mode?, atimeMs?, mtimeMs?, mtimeFor?, ctimeMs?, ino?, link?, dir? }`, where `mtimeFor` is the OPFS `lastModified` an explicit `mtimeMs` belongs to. A future schema bumps the version and migrates in `onupgradeneeded`; an older kernel then closes its connection. The sidecar is keyed by path from the `root` handle, so use a different `metadata` name for each distinct root.
497
497
 
498
- Not covered: hard links (they fail with `EMLINK`, as Emscripten reports; OPFS cannot share contents between names) and file ownership. Emscripten's `chown` doesn't pass the owner to filesystem backends, so there is nothing to store, and processes see every file as owned by uid and gid 1000. Emscripten also doesn't enforce permission bits, so a file runs whether or not its exec bit is set; the bits are what `ls`, `stat` and `test` report.
498
+ Not covered: hard links (they fail with `EMLINK`, as Emscripten reports; OPFS cannot share contents between names) and file ownership. Emscripten's `chown` doesn't pass the owner to filesystem backends, so there is nothing to store. Until owners are stored, an Emscripten process sees every file as owned by its own effective uid and gid (root's 0 by default, a user's own ids when it runs as one, and the new ids after a `setuid`), so owner checks such as git's `safe.directory`, ssh's key checks and gnupg's home directory check pass, as WASIX programs already see through their libc. Emscripten also doesn't enforce permission bits, so a file runs whether or not its exec bit is set; the bits are what `ls`, `stat` and `test` report.
499
499
 
500
500
  Reads retry briefly when a concurrent write has invalidated the OPFS file snapshot (`NotReadableError`).
501
501
 
@@ -10206,7 +10206,7 @@ function openLane(token, dispatch2) {
10206
10206
  }
10207
10207
  };
10208
10208
  }
10209
- function processInit(opts, sab, umask, lane) {
10209
+ function processInit(opts, sab, umask, cred, lane) {
10210
10210
  const base = {
10211
10211
  type: WASM_PROCESS_INIT,
10212
10212
  pid: opts.shownPid ?? opts.pid,
@@ -10216,6 +10216,7 @@ function processInit(opts, sab, umask, lane) {
10216
10216
  cwd: opts.cwd,
10217
10217
  sab,
10218
10218
  umask,
10219
+ cred,
10219
10220
  ...opts.ppid !== void 0 ? { ppid: opts.ppid } : {}
10220
10221
  };
10221
10222
  if (opts.program.abi === "js") {
@@ -10394,13 +10395,14 @@ function spawnWasmProcess(opts) {
10394
10395
  env: opts.env,
10395
10396
  cwd: opts.cwd,
10396
10397
  sab: tsab,
10398
+ cred: copyCred(process.cred),
10397
10399
  ...opts.ppid !== void 0 ? { ppid: opts.ppid } : {},
10398
10400
  thread
10399
10401
  };
10400
10402
  tw.postMessage(tinit);
10401
10403
  };
10402
10404
  worker.postMessage(
10403
- processInit(opts, sab, process.umask, lane?.lane),
10405
+ processInit(opts, sab, process.umask, copyCred(process.cred), lane?.lane),
10404
10406
  transferOf(opts, lane?.lane)
10405
10407
  );
10406
10408
  const signal = (sig) => {