code wiki / _hdl_build / nx_media_path_gate.nx
nx_media_path_gate.nx source
↩ module page · 52 lines · 3363 B
1// nx_media_path_gate.nx -- proves the /media (everyone/family) file allowlist: SFW library paths are served,
2// but the OWNER-ONLY recordings/NSFW (/mnt/nas_logging, served only by /gallery) are DENIED even by direct path.
3// Operator 2026-06-17: /media live for everyone, /gallery (owner-only) is the other thread. license_tier: ORIGINAL
4import "nx_galx_authz.nx"
5import "nx_syscalls.nx"
6
7func mpw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
8func mpslen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
9func mprow(id: i64, ok: i64, what: *u8) -> i64 { mpw("MPROW " as *u8); let b: *u8=sys_mmap(8); b[0]=(48+id) as u8; sys_write(1,b,1); mpw(" " as *u8); if ok==1 { mpw("PASS " as *u8) } else { mpw("FAIL " as *u8) } mpw(what); mpw("\n" as *u8); return ok }
10func mpok(p: *u8) -> i64 { return galx_media_path_ok(p, mpslen(p)) }
11
12func main() -> i64 {
13 mpw("media path allowlist gate: /media serves SFW library, DENIES owner-only nas_logging\n" as *u8)
14 var rows: i64=0
15 var pass: i64=0
16 var ok: i64=0
17
18 // R0: SFW movie library is allowed (Zatoichi)
19 ok=0; if mpok("/mnt/nas_movies/Zatoichi_01_1962.mkv" as *u8)==1 { ok=1 }
20 rows=rows+1; pass=pass+mprow(0, ok, "/mnt/nas_movies (SFW: Zatoichi) ALLOWED on /media" as *u8)
21
22 // R1: owner-only cam recording is DENIED
23 ok=0; if mpok("/mnt/nas_logging/beanco_/beanco__2025-10-20_22-51-12_681.ts" as *u8)==0 { ok=1 }
24 rows=rows+1; pass=pass+mprow(1, ok, "/mnt/nas_logging (cam recording) DENIED on /media (owner-only)" as *u8)
25
26 // R2: owner-only NSFW is DENIED
27 ok=0; if mpok("/mnt/nas_logging/Redgifs/duke/GiantFlashyJumpingbean.mp4" as *u8)==0 { ok=1 }
28 rows=rows+1; pass=pass+mprow(2, ok, "/mnt/nas_logging/Redgifs (NSFW) DENIED on /media (owner-only)" as *u8)
29
30 // R3: a /volume1 path under a logging share is DENIED (covers the raw-Synology form)
31 ok=0; if mpok("/volume1/homes/elderwesto/logging/cam_2025.ts" as *u8)==0 { ok=1 }
32 rows=rows+1; pass=pass+mprow(3, ok, "/volume1/.../logging/ DENIED on /media (owner-only, raw form)" as *u8)
33
34 // R4: a non-NAS path is DENIED (no traversal/escape)
35 ok=0; if mpok("/etc/passwd" as *u8)==0 { ok=1 }
36 rows=rows+1; pass=pass+mprow(4, ok, "non-NAS path (/etc/passwd) DENIED (no escape)" as *u8)
37
38 // R5: another SFW library item + a /volume1 non-logging item are allowed
39 ok=0; if mpok("/mnt/nas_movies/MrBean/ep1.mkv" as *u8)==1 { if mpok("/volume1/media/film.mkv" as *u8)==1 { ok=1 } }
40 rows=rows+1; pass=pass+mprow(5, ok, "SFW (Mr Bean) + /volume1 non-logging ALLOWED on /media" as *u8)
41
42 mpw("NX-MEDIA-PATH-GATE rows=" as *u8); let rb: *u8=sys_mmap(8); rb[0]=(48+rows) as u8; sys_write(1,rb,1); mpw(" pass=" as *u8); let pb: *u8=sys_mmap(8); pb[0]=(48+pass) as u8; sys_write(1,pb,1); mpw("\n" as *u8)
43 if pass==rows {
44 let line: *u8 = "CMSGATE row=nx_media_path media-sfw-allow-deny-nas_logging rows=6 pass=6 verdict=PASS\n" as *u8
45 let gf: i64 = sys_openat_append("knowledge/status/cms_gate.log" as *u8, 0x1a4)
46 if gf >= 0 { sys_write(gf, line, mpslen(line)); sys_close(gf) }
47 mpw("NX-MEDIA-PATH-GATE GREEN 6/6 (/media serves SFW, denies owner-only nas_logging even by direct path)\n" as *u8)
48 sys_exit(0); return 0
49 }
50 mpw("NX-MEDIA-PATH-GATE RED\n" as *u8)
51 sys_exit(1); return 1
52}