dsh-wsl-desktop 0.3.2 → 0.3.3
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.en.md +56 -345
- package/README.md +54 -344
- package/lib/wsl/confinement.js +4 -4
- package/lib/wsl/fence.js +3 -3
- package/lib/wsl/preset.js +1 -1
- package/lib/wsl/subprocess.js +1 -1
- package/lib/wsl/world.js +2 -2
- package/package.json +1 -1
package/lib/wsl/fence.js
CHANGED
|
@@ -42,7 +42,7 @@ export function canonicalHostPath(path) {
|
|
|
42
42
|
*
|
|
43
43
|
* Only the WINDOWS spellings fold. The UNC host and the distribution segment are
|
|
44
44
|
* Windows spellings and compare case-insensitively; the Linux portion does not,
|
|
45
|
-
* because the share resolves it with Linux semantics (
|
|
45
|
+
* because the share resolves it with Linux semantics (docs/FS-FENCE.md, "Measured fence
|
|
46
46
|
* facts": `/TMP` is ENOENT where `/tmp` exists, so `PROJ` and `proj` are
|
|
47
47
|
* different directories). Folding it judged a target under a case-variant
|
|
48
48
|
* sibling of the writable root to be contained — and that escape needed no
|
|
@@ -203,7 +203,7 @@ export async function isUnderHost(targetKey, root) {
|
|
|
203
203
|
// THROUGH THE TARGET'S OWN SHARE — so a foreign target's ancestors are compared
|
|
204
204
|
// against a LOCAL root's identity. Inode numbers are per-filesystem, but the 9P
|
|
205
205
|
// shares are not: this machine's `debian` and `debian-dev` report the SAME
|
|
206
|
-
// (dev,ino) for /, /tmp and /home (dev 0; ino 2, 1, 16386 —
|
|
206
|
+
// (dev,ino) for /, /tmp and /home (dev 0; ino 2, 1, 16386 — docs/FS-FENCE.md, "Measured fence
|
|
207
207
|
// facts"), so an identity collision across two distributions read as containment, and
|
|
208
208
|
// a workspace-write session could be authorized to write into another distribution's
|
|
209
209
|
// /tmp — which `writableHostRootsFor` ALWAYS grants. `contains()` (./fs.js) already
|
|
@@ -274,7 +274,7 @@ export function writableHostRootsFor(policy, distro) {
|
|
|
274
274
|
// coerces to the STRING "undefined", which matches the grammar — so an absent
|
|
275
275
|
// distro used to produce a root spelled \\wsl.localhost\undefined\tmp. That
|
|
276
276
|
// root can never match, silently dropping the distribution's /tmp from the
|
|
277
|
-
// allow-list (a write
|
|
277
|
+
// allow-list (a write docs/FS-FENCE.md grants was refused), and it disguised the
|
|
278
278
|
// provider-side config bug that made the distro undefined in the first place.
|
|
279
279
|
const distroTmp = typeof distro === 'string' && DISTRO_NAME.test(distro)
|
|
280
280
|
? joinWslUnc(distro, '/tmp')
|
package/lib/wsl/preset.js
CHANGED
|
@@ -133,7 +133,7 @@ export function buildWorldGroup({ subprocessPath, shellPath, fsPath, distro, inc
|
|
|
133
133
|
// a Linux-only workdir fell back to the machine's DEFAULT distribution, and the
|
|
134
134
|
// fs fence derived its distro `/tmp` writable root from the literal string
|
|
135
135
|
// "undefined" (joinWslUnc(undefined, '/tmp') does not throw), so a write the
|
|
136
|
-
//
|
|
136
|
+
// docs/FS-FENCE.md grants was refused.
|
|
137
137
|
const distroConfig = distro === undefined ? {} : { config: { distro } }
|
|
138
138
|
/** Re-mount one host-world tool row, keeping the operator's own config for it. */
|
|
139
139
|
const toolRow = (id, name) => {
|
package/lib/wsl/subprocess.js
CHANGED
|
@@ -34,7 +34,7 @@ import { LoginShellUnresolvedError, WSL_CHILD_ENV, buildWslExecArgv, planWsl, re
|
|
|
34
34
|
/**
|
|
35
35
|
* The executable lookup's ceiling, on the documented probe policy.
|
|
36
36
|
*
|
|
37
|
-
* Was 15s and the shortest ceiling in the plugin.
|
|
37
|
+
* Was 15s and the shortest ceiling in the plugin. docs/CONFINEMENT.md:36 names
|
|
38
38
|
* `resolveExecutable` in the same sentence as 探针超时 60s + 超时后一次透明重试, and it is an
|
|
39
39
|
* output-parsed probe like the siblings that sentence lists (the comment on the probe below
|
|
40
40
|
* says so), so it gets the same 60s as `listLinuxDir`/`checkLinuxPath`/`resolveDistroHome`
|
package/lib/wsl/world.js
CHANGED
|
@@ -520,7 +520,7 @@ const PROBE_TIMEOUT_MS = 60_000
|
|
|
520
520
|
/**
|
|
521
521
|
* Ceiling for one parsed-output probe, and the retry that goes with it.
|
|
522
522
|
*
|
|
523
|
-
*
|
|
523
|
+
* docs/CONFINEMENT.md states this policy for exactly these probes — 探针超时 60s + 超时后一次透明
|
|
524
524
|
* 重试:桌面重启后的首个 wsl.exe 冷启动可以超过短上限 — and it names `listLinuxDir`,
|
|
525
525
|
* `checkLinuxPath` and `resolveDistroHome` in the same sentence as the probes that
|
|
526
526
|
* already had it (`resolveIdentity`, `detectRunner`, the NO_NEW_PRIVS probe, the PTY's
|
|
@@ -768,7 +768,7 @@ export class LoginShellUnresolvedError extends Error {
|
|
|
768
768
|
*
|
|
769
769
|
* A probe that did not complete is NOT the empty-field case either. It used to
|
|
770
770
|
* return `/bin/bash` like a real answer, so a stalled relay — the machine
|
|
771
|
-
* transient
|
|
771
|
+
* transient docs/CONFINEMENT.md's probe policy exists for — silently pinned the session's
|
|
772
772
|
* shell with a value the caller could not tell from the distribution's own. The
|
|
773
773
|
* ceiling and the repeat are `probeWithRetry`'s (探针超时 60s + 超时后一次透明重试),
|
|
774
774
|
* the same ruling `listLinuxDir`/`checkLinuxPath`/`resolveDistroHome` follow, and a
|