aboutsummaryrefslogtreecommitdiff
path: root/rsh
AgeCommit message (Collapse)AuthorFilesLines
7 daysdoc: correct drift and move the build notes to the rootLena2-2/+5
The Rsync comment about draining a hostile remote's pipe sat on the Tally type, where it means nothing; it describes boundedLines. Scheduler explained itself with what happened during development instead of the constraint that WorkManager persists unique names across upgrades, and MainActivity and SyncLog did the same. Keys pointed at a pin() that does not exist. The App header restated the class name and omitted half of what onCreate does. OUT_FORMAT had no caller outside its file. The README layout list omitted fastlane. The e2e test hardcodes a copy of the app's rsync vector with nothing saying so. useradd already writes a locked password field, so "skip passwd -l" does not leave a non-locked one and key auth is still refused; verified against sshd with UsePAM no. The CI file also runs verify-repro on a tag, and the NDK and build-tools are pinned by revision and verified against Google's manifest rather than a checksum this repository owns, which the reproducibility notes claimed for every input. metadata/ held one document and nothing else, and reads as a store metadata directory beside fastlane/metadata. Root, extensionless, beside THIRD_PARTY.
7 daysbuild: pin the build host and the shipped ABIsLena1-14/+11
The native scripts picked an NDK host tag for macOS as well, but ci/setup-toolchain.sh provisions nothing outside Linux x86_64 and no pipeline exercises the other branch. Fail with the message setup already gives instead of naming a toolchain nobody can obtain here. The armeabi-v7a and x86 cases were never reachable either: ABIS ships arm64-v8a and x86_64, and ci/verify-apk.sh has no machine check for the other two, so adding one to ABIS failed the build it was meant to enable. Record what a new ABI actually costs instead of inviting a one-line edit that cannot work.
7 daysrsh: pass the resolved port to dialLena1-7/+3
Both callers already read and used RSH_PORT before dialling. Reading it a third time inside dial hid the data flow and duplicated the error path.
14 daysnative: harden rsync and SSH transportLena7-69/+618
Update rsync to 3.5.0 and Go to 1.26.6. Bound SSH handshakes, pin host-key types, and build 16 KB-aligned hardened executables.
2026-07-13ci: pin toolchains and verify release artifactsLena1-1/+1
Checksum-pin every downloaded toolchain archive. Before publishing, verify the APK was built from HEAD, the tag matches versionName, apksigner passes, and the tree is clean; publish a sha256 sidecar and treat published assets as immutable. Compare full unsigned APKs in verify-repro and run the Android unit tests in CI.
2026-07-01rsh: bound the SSH handshakeLena1-1/+18
ssh.Dial applies its Timeout only to the TCP connect, so a host that accepts the connection and then stalls the SSH handshake hangs the sync forever. Dial with a timeout, run the handshake under a deadline, and clear the deadline once the connection is established.
2026-07-01native: pick the NDK host toolchain tag by build hostjsvk1-1/+13
The NDK names its prebuilt toolchain directory after the build host, not the target. Hardcoding linux-x86_64 broke rsync/build.sh and rsh/build.sh on macOS, which ships the toolchain under darwin-x86_64 (x86_64 binaries, run under Rosetta on Apple Silicon). Detect the host with uname and fail loud on anything else. Link: https://codeberg.org/0xlena/rsend/pulls/1
2026-07-01rsh: reject an invalid RSH_PORTLena1-8/+19
A garbage or out-of-range port silently fell back to 22 and connected to the wrong place; fail loud instead.
2026-07-01keys: never write the plaintext private key to diskLena2-31/+18
rsh -keygen printed the pubkey but wrote the key pair into a directory, so generating a key briefly left the plaintext private key on flash, contradicting the documented invariant that it only ever exists in memory. -keygen now emits the private key PEM on stdout and nothing else; the app encrypts it immediately and derives the public key via -pubkey, reusing the validated import path. Keygen failures now surface as an error dialog instead of crashing the app from a bare thread.
2026-01-01rsend: push phone folders to a home SSH host over rsyncLena7-0/+784
A small Android app for one-way folder backup, a KISS alternative to Syncthing. It bundles rsync (built from pinned source via the NDK) and a pure-Go SSH transport, both shipped in the APK as lib*.so and run from the native library directory. rsend pins the host key, stores the ed25519 identity Keystore-encrypted, pushes each folder additively or as a mirror, and runs on demand or on a WiFi-only schedule. The build is self-contained and reproducible: make setup provisions the toolchain, make builds rsync, rsh, and the APK.