code wiki / _hdl_build / nx_ssh_put.nx
nx_ssh_put.nx source
↩ module page · 78 lines · 5245 B
1// nx_ssh_put.nx -- SOVEREIGN file-PUT over the team's own SSH client (operator: site-deploy must be a
2// bits-up Nishi capability, NO 3rd party -- the Auditor flagged scp as the gap). It streams a file as
3// client->server CHANNEL_DATA into a remote `cat > path`, then CHANNEL_EOF -- the SSH file-transfer the
4// client lacked. Proven against the LIVE NAS. license_tier: ORIGINAL
5import "nx_syscalls.nx"
6import "nx_ssh_lib.nx"
7const K_MAGIC_1048576: i64 = 1048576
8const K_MAGIC_16384: i64 = 16384
9const K_MAGIC_65536: i64 = 65536
10const K_MAGIC_1024: i64 = 1024
11
12func slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != 0 as u8 { n = n + 1 } return n }
13
14// stream `data[0..datalen)` to the remote, executed as `wcmd` (e.g. "cat > /path"). chunked at 16 KB.
15func ssh_put_file(st: *SshState, wcmd: *u8, wcmdlen: i64, data: *u8, datalen: i64) -> i64 {
16 let co: *u8 = sys_mmap(64); var c: i64 = 0
17 c = ssh_put_byte(co, c, 90); c = ssh_put_str(co, c, "session" as *u8, 7)
18 c = ssh_put_u32(co, c, 0); c = ssh_put_u32(co, c, K_MAGIC_1048576); c = ssh_put_u32(co, c, K_MAGIC_16384)
19 ssh_enc_send(st, co, c)
20 let rep: *u8 = sys_mmap(K_MAGIC_65536); var rcid: i64 = 0 - 1; var guard: i64 = 0
21 while rcid < 0 {
22 if guard > 16 { return 0 - 1 }
23 let rl: i64 = ssh_enc_recv(st, rep); if rl < 0 { return 0 - 1 }
24 if rep[0] == 91 as u8 { rcid = ssh_u32be(rep, 5) }
25 if rep[0] == 92 as u8 { return 0 - 2 }
26 guard = guard + 1
27 }
28 let cr: *u8 = sys_mmap(K_MAGIC_1024); var q: i64 = 0
29 q = ssh_put_byte(cr, q, 98); q = ssh_put_u32(cr, q, rcid); q = ssh_put_str(cr, q, "exec" as *u8, 4); q = ssh_put_byte(cr, q, 1); q = ssh_put_str(cr, q, wcmd, wcmdlen)
30 ssh_enc_send(st, cr, q)
31 var off: i64 = 0
32 while off < datalen {
33 var nn: i64 = datalen - off; if nn > K_MAGIC_16384 { nn = K_MAGIC_16384 }
34 let dp: *u8 = sys_mmap(nn + 64); var p: i64 = 0
35 p = ssh_put_byte(dp, p, 94); p = ssh_put_u32(dp, p, rcid); p = ssh_put_u32(dp, p, nn)
36 var i: i64 = 0; while i < nn { dp[p + i] = data[off + i]; i = i + 1 } p = p + nn
37 ssh_enc_send(st, dp, p)
38 off = off + nn
39 }
40 let eo: *u8 = sys_mmap(16); var e: i64 = 0; e = ssh_put_byte(eo, e, 96); e = ssh_put_u32(eo, e, rcid); ssh_enc_send(st, eo, e)
41 var done: i64 = 0; var loops: i64 = 0
42 while done == 0 {
43 if loops > K_MAGIC_16384 { done = 1 }
44 let rl: i64 = ssh_enc_recv(st, rep); if rl < 0 { done = 1 } else { if rep[0] == 97 as u8 { done = 1 } }
45 loops = loops + 1
46 }
47 let clo: *u8 = sys_mmap(16); var k: i64 = 0; k = ssh_put_byte(clo, k, 97); k = ssh_put_u32(clo, k, rcid); ssh_enc_send(st, clo, k)
48 return 0
49}
50
51func main() -> i64 {
52 let pwbox: *i64 = sys_mmap(16) as *i64
53 let pw: *u8 = sys_read_file("/tmp/nxpw" as *u8, pwbox)
54 if (pw as i64) == 0 { ssh_puts("no /tmp/nxpw\n" as *u8); return 1 }
55 var pwlen: i64 = pwbox[0]
56 while pwlen > 0 { if pw[pwlen-1] == 10 as u8 { pwlen = pwlen - 1 } else { if pw[pwlen-1] == 13 as u8 { pwlen = pwlen - 1 } else { break } } }
57
58 let st: *SshState = sys_mmap(SSH_STATE_BYTES) as *SshState
59 if ssh_open_session(st, (192 << 24) | (168 << 16) | (8 << 8) | 227) != 0 { ssh_puts("session fail\n" as *u8); return 2 }
60 if ssh_userauth_password(st, "elderwesto" as *u8, 10, pw, pwlen) != 1 { ssh_puts("auth fail\n" as *u8); sys_close(st.fd); return 3 }
61 ssh_puts("[auth ok] sovereign file-put proof:\n" as *u8)
62
63 ssh_puts("NISHI SOVEREIGN FILE-PUT PROOF -- deploying the team's live dashboard (no scp, no 3rd party)\n" as *u8)
64 // BACKUP the current file (rollback point), then DEPLOY the team's real dashboard.
65 let bcmd: *u8 = "mkdir -p /volume1/homes/elderwesto/nishihost/web; cp -f /volume1/homes/elderwesto/nishihost/web/team_work.html /volume1/homes/elderwesto/nishihost/web/team_work.html.bak 2>/dev/null; echo backup-done" as *u8
66 ssh_exec(st, bcmd, slen(bcmd))
67 let dbox: *i64 = sys_mmap(16) as *i64
68 let payload: *u8 = sys_read_file("knowledge/team_work.html" as *u8, dbox)
69 let plen: i64 = dbox[0]
70 let wcmd: *u8 = "cat > /volume1/homes/elderwesto/nishihost/web/team_work.html" as *u8
71 ssh_put_file(st, wcmd, slen(wcmd), payload, plen)
72 // ASSIGNMENT A (Librarian): inspect nishi-library-data on the NAS -- almost certainly where the "ingested
73 // datasets" landed. Report contents, sizes, file types so the harvest scope (assignment D) is grounded.
74 let vcmd: *u8 = "echo ---NISHI-LIBRARY-DATA---; echo '[ls]'; ls -la /volume1/nishi-library-data 2>/dev/null | head -30; echo -n 'total-size: '; du -sh /volume1/nishi-library-data 2>/dev/null | cut -f1; echo -n 'files: '; find /volume1/nishi-library-data -type f 2>/dev/null | wc -l; echo -n 'pdf: '; find /volume1/nishi-library-data -name '*.pdf' 2>/dev/null | wc -l; echo -n 'json-jsonl: '; find /volume1/nishi-library-data -name '*.json*' 2>/dev/null | wc -l; echo -n 'txt: '; find /volume1/nishi-library-data -name '*.txt' 2>/dev/null | wc -l; echo -n 'md: '; find /volume1/nishi-library-data -name '*.md' 2>/dev/null | wc -l; echo -n 'epub: '; find /volume1/nishi-library-data -name '*.epub' 2>/dev/null | wc -l; echo ---DONE---" as *u8
75 ssh_exec(st, vcmd, slen(vcmd))
76 sys_close(st.fd)
77 return 0
78}