Skip to content

fix(core): hybrid licenses and the audit bind fixes - #2114

Merged
FabioLeitao merged 7 commits into
mainfrom
epic/boar-1.8.0-pr-b
Oct 20, 2026
Merged

FabioLeitao merged 7 commits into
mainfrom
epic/boar-1.8.0-pr-b

Conversation

@FabioLeitao

Copy link
Copy Markdown
Collaborator

Summary

  • Enforced licenses require dbmldsa_sig, verified against the packaged ML-DSA anchor. Open mode stays the default.
  • The dev issuer emits that claim from a dev ML-DSA key and refuses the packaged-anchor private key.
  • A scanned SQLite file opens through a SQLAlchemy URL that keeps the filename literal.
  • POST /scan and POST /start require Content-Type: application/json and reject a cross-site Sec-Fetch-Site.
  • --web serves the --config the bind gate validated. A non-loopback bind exits when CONFIG_PATH names a different file.
  • Configured RBAC stays fail-closed when the license tier is below Pro.
  • The main.py --web CLI tests drop the shell CONFIG_PATH so the non-loopback cases reach the auth refusal. Production behavior is unchanged.

Test plan

  • ./scripts/check-all.sh with XDG_CONFIG_HOME set to a temp dir (not the operator config): exit 0. Pytest: 3325 passed, 83 skipped, 2 deselected, 2 xfailed.

Closes #2042
Closes #2043
Closes #2091
Closes #2092
Closes #2095
Closes #2096

Ed25519-only tokens no longer verify in enforced mode, and a missing
ML-DSA anchor fails closed. Reissue 1.7.4 licenses before an enforced
1.8 deployment.

Refs #2042
QA tokens need the hybrid claim now that enforced mode requires it.
The signer is a DEV ML-DSA-65 key, and the script refuses the packaged
anchor private key.

Refs #2043
SQLAlchemy 2.1 percent-decodes a sqlite URL built from the filename.
URL.create keeps the path that was scanned.

Refs #2095
A body without application/json is rejected, and a cross-site
Sec-Fetch-Site header is rejected. The dashboard already sends JSON.

Refs #2096
The API follows --config. A different CONFIG_PATH on a non-loopback
bind is refused so the process cannot load a second YAML.

Refs #2091
api.rbac.enabled no longer turns off when the enforced tier drops.
Unauthenticated calls stay denied.

Refs #2092
The non-loopback bind tests inherit the shell environment. Drop
CONFIG_PATH so they reach the auth refusal instead of the config
mismatch exit.

Refs #2091
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment