v1.2.0 — Correctness & Hardening Release
Note: v1.1.0 was tagged against an older commit and is superseded by this release.
This release audits and corrects the previous build's scripts, build system, and CI. No new features; every change below is a fix.
Security
- OpenSSL 3.3.7 → 3.5.7 (LTS). The 3.3.x branch left upstream support in April 2026. 3.5 is the current LTS branch, supported until April 2030, and keeps the same
libssl.so.3ABI — a drop-in replacement. 3.5.7 additionally fixes CVE-2026-45447 (heap use-after-free inPKCS7_verify()), CVE-2026-34182, CVE-2026-34183, CVE-2026-42764, and others. - Update checker no longer disables TLS verification.
check_update.shpreviously usedwget --no-check-certificate. It now prefers the bundled curl (linked against the patched OpenSSL) with certificate verification, and it now checks this repository's releases instead of the upstream fork's — previously it would report "updates" from a different project entirely. - CGI input validation tightened.
validate.shgains the missingvalidateDT()—set_configs.shhas been calling it since the fork, soTIMELAPSE_DTchanges were silently rejected.validateDir()andeventsfile.shnow use an allowlist (record directories are machine-generated alphanumeric names) instead of a character blocklist.- The remaining blocklists (
eventsfiledel.sh,eventsdirdel.sh,validate.sh) now also reject backticks,|,<,>,&, and — where filenames permit —/. The previous lists allowed slashes. - Fixed the
if ! $(validateX ...)anti-pattern (executes the function's output rather than checking its status) inproxy.sh,preset.sh,service.sh, andset_configs.sh.
Bug fixes
- README restored. A prior commit truncated
README.mdmid-code-block, deleting the final deploy steps, the config-hardening instructions, and the entire build guide. service.sh: mismatched[[ ... ]bracket broke the watermark check in ONVIF profile setup.snapshot.sh:OUTPUT_FILE=$(validateFile ...)captured the function's empty output and wiped the filename, silently breaking snapshot-to-file.record.sh: invalidtimevalues were never rejected — the script compared the variable against a string the validator never produces. Now checks the validator's return status.ptz_presets.sh: removed a redundant--*case pattern shadowed by-*.system.sh:~inside quotes never expands, so the.ash_history → /dev/nullsymlink check always re-ran; now uses$HOME.launch.sh: self-unquotingdebug_flag="-d "$debug_level""assignments (×3) fixed..gitattributeswas namedgitattributes(no dot), so the line-ending rules were never applied.
Build & CI
- ShellCheck lint now gates the build. The step previously ended in
|| true(could never fail) and excluded codes from an outdated shellcheck, flooding logs with 553 findings. The job now uses a documented busybox-ash exclusion list, and the tree is lint-clean under it. - Mosquitto build target uses the same extract guard as other packages instead of wiping and re-extracting each run.
scripts/renamed totoolchain/(it only contains cross-compile definition files);MakefileandDockerfilereferences