Skip to content

Authorize signed plaintext remote admin in licensed mode - #10972

Open
RCGV1 wants to merge 11 commits into
meshtastic:developfrom
RCGV1:codex/ham-signed-admin
Open

Authorize signed plaintext remote admin in licensed mode#10972
RCGV1 wants to merge 11 commits into
meshtastic:developfrom
RCGV1:codex/ham-signed-admin

Conversation

@RCGV1

@RCGV1 RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member

Closes #10971

Design: meshtastic/design#123

Stack dependencies

This is a stacked draft that combines and depends on:

Review and merge the prerequisite drafts first. This PR intentionally targets develop because both prerequisite heads are contributor branches, so its current diff contains their changes as merge parents.

Summary

  • authorize licensed-mode remote Admin requests and mutations only when the packet is directed to this node, plaintext, Router-verified XEdDSA, and the exact verified signer key matches a populated security.admin_key[] entry;
  • carry the exact verified signer key as packet-local authenticated state, after clearing serialized authentication metadata at every untrusted ingress;
  • require signed directed licensed responses without applying the administrator allowlist in the reverse direction;
  • retain the existing Admin session challenge for mutations and add explicit initialized state so an all-zero passkey cannot authorize shortly after boot;
  • keep decoded MQTT Admin injection blocked while allowing binary ingress only through the ordinary Router verification gate;
  • reject licensed Admin origination with TOO_LARGE when the packet cannot carry its required signature;
  • preserve normal-mode PKI/admin-channel authorization and the existing XEdDSA from | id | portnum | payload tuple.

This does not introduce an authentication version, new signature format, certificate system, new protobuf field, or encryption in licensed mode.

Security properties

  • MeshPacket.public_key and xeddsa_signed are cleared at untrusted ingress and become authoritative only after successful Router verification for that packet.
  • AdminModule does not re-read NodeDB identity after verification and does not trust serialized key/signature flags.
  • Unknown, non-allowlisted, unsigned, malformed, invalid, oversized-unsigned, broadcast, wrong-destination, decoded-MQTT, and stale-session Admin traffic fails closed.
  • Reboot/new AdminModule construction invalidates the session challenge.
  • Signatures authenticate the key that emitted the payload; they do not validate a callsign/licence, provide confidentiality, or permanently prevent replay.

Validation

  • RAK3172 production build: success
    • RAM: 25,852 / 65,536 (39.4%)
    • flash: 202,360 / 247,808 (81.7%)
  • focused packet-signing, Admin, and MQTT test translation units compile with the exact protobufs#983 draft bindings;n- regression coverage re-verifies the exact signer after a simulated routing-auth cache handoff loss and rejects forged serialized signer metadata;
  • Trunk formatting/checks: clean;
  • git diff --check: clean;
  • independent dedicated security review approved exact commit 4cd335d03fd9498cc3c8fa12cfc51b5834d65e5a.

Local full native execution is host-blocked by existing macOS/Linux build incompatibilities: NotificationRenderer initialized VLAs, Linux input headers, and the coverage environment's GCC-only -fprofile-abs-path under Apple Clang. GitHub Linux CI is the executable validation source for this stacked draft.

Draft / hardware status

No RF hardware validation has been performed. Before this leaves draft:

  • verify two licensed nodes can exchange readable plaintext Admin getter, session, mutation, and reply packets over RF;
  • confirm signatures interoperate across representative devices and no PKI/PSK encryption is used;
  • verify reboot invalidates the Admin session and unauthorized/replayed mutations fail;
  • verify first-contact signed NodeInfo followed by Admin authorization and warm-key retention;
  • verify binary MQTT ingress traverses Router verification and decoded MQTT Admin remains blocked;
  • coordinate client changes so licensed remote Admin sends with pki_encrypted=false and uses verified-signature shield semantics rather than an encryption lock.

Operators remain responsible for their licence conditions, jurisdiction, permitted modes, and station-identification requirements.

Summary by CodeRabbit

  • New Features

    • Added routing authentication checks for received and relayed packets, improving handling of invalid or opaque traffic.
    • Added licensed-identity migration detection, warnings, and automatic credential updates.
    • Licensed-device configuration restores now sanitize restricted channel settings and persist the corrected state.
  • Bug Fixes

    • Prevented rebroadcasting packets that cannot be successfully decoded or authorized.
    • Improved licensed packet signing across broadcast and direct destinations.
    • Preserved licensed owner public keys in node information responses.

🤝 Attestations

  • I have tested that my proposed changes behave as described within the local validation limits documented above.
  • I have tested that my proposed changes do not cause any obvious regressions on the following devices:
    • Heltec (Lora32) V3
    • LilyGo T-Deck
    • LilyGo T-Beam
    • RAK WisBlock 4631
    • Seeed Studio T-1000E tracker card
    • Other (RAK3172 build-only validation; RF hardware testing remains outstanding)

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Licensed-mode routing authentication, identity migration, remote admin authorization, channel sanitization, persistence, and related tests are updated across radio, MQTT, boot, and configuration flows.

Changes

Licensed authentication flow

Layer / File(s) Summary
Routing authentication and relay
src/mesh/Router.*, src/mesh/FloodingRouter.cpp, src/mqtt/MQTT.cpp
Adds routing-auth verdict evaluation and caching, enforces authentication on radio ingress, gates retransmission rebroadcasts, updates licensed signing, and accepts authenticated decoded MQTT packets.
Licensed identity and channel persistence
src/mesh/NodeDB.*, src/mesh/Channels.cpp, src/main.cpp, src/modules/NodeInfoModule.cpp
Tracks licensed identity migration, notifies clients during boot, sanitizes licensed channels during load and restore, tightens key retention, and preserves licensed public keys in NodeInfo replies.
Licensed admin authorization and transitions
src/modules/AdminModule.*
Authorizes directed signed plaintext licensed admin traffic, detects identity migration, regenerates keys during licensed configuration transitions, and conditionally persists changed segments.
Licensed behavior validation
test/support/*, test/test_admin_radio/test_main.cpp, test/test_packet_signing/test_main.cpp
Adds channel-sanitization persistence and idempotence tests, notification and save-state test seams, and licensed signing coverage for broadcast and unicast destinations.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

  • meshtastic/design issue 123 — Defines the signed plaintext licensed remote-administration behavior implemented here.
  • meshtastic/firmware issue 10966 — Covers related licensed plaintext signing and identity-migration behavior.
  • meshtastic/design issue 122 — Covers licensed identity-key migration and plaintext XEdDSA signing.

Possibly related PRs

Suggested labels: enhancement, needs-review

Suggested reviewers: thebentern, jp-bennett

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Several changes add licensed-identity migration, channel sanitization, and packet-signing test coverage that are not required by #10971. Split prerequisite/licensed-migration work into separate PRs or mark it as parent-context only, and keep this PR focused on signed plaintext remote admin.
Docstring Coverage ⚠️ Warning Docstring coverage is 30.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and matches the main change: authorized plaintext remote admin in licensed mode.
Description check ✅ Passed The PR description is detailed and includes summary, validation, hardware status, and the required attestation section.
Linked Issues check ✅ Passed The changes implement directed, plaintext, Router-verified signed licensed admin, preserve normal PKI, and block decoded MQTT as required by #10971.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

⚡ Try this PR in the Web Flasher

Flash this PR in the Web Flasher

firmware commit boards expires

Warning

This is an automated, unreviewed CI test build. Back up your device configuration
before flashing, and only flash devices you are able to recover.

Supported boards built by this PR (27)
Device Board Platform
Crowpanel Adv 3.5 TFT elecrow-adv-35-tft esp32-s3
Heltec HT62 heltec-ht62-esp32c3-sx1262 esp32-c3
Heltec Mesh Node 096 heltec-mesh-node-t096 nrf52840
Heltec Mesh Node T1 heltec-mesh-node-t1 nrf52840
Heltec Mesh Node T114 heltec-mesh-node-t114 nrf52840
Heltec V3 heltec-v3 esp32-s3
Heltec V4 heltec-v4 esp32-s3
Meshnology W10 meshnology_w10 esp32-s3
Raspberry Pi Pico pico rp2040
Raspberry Pi Pico W picow rp2040
RAK WisMesh Tag rak_wismeshtag nrf52840
RAK WisBlock 11200 rak11200 esp32
RAK WisBlock 11310 rak11310 rp2040
RAK3312 rak3312 esp32-s3
RAK WisBlock 4631 rak4631 nrf52840
Seeed SenseCAP Mesh-Tracker-X1 seeed_mesh_tracker_X1 nrf52840
Seeed Wio Tracker L1 seeed_wio_tracker_L1 nrf52840
Seeed Xiao NRF52840 Kit seeed_xiao_nrf52840_kit nrf52840
Seeed Xiao ESP32-S3 seeed-xiao-s3 esp32-s3
Station G2 station-g2 esp32-s3
Station G3 station-g3 esp32-s3
LILYGO T-Deck t-deck-tft esp32-s3
LILYGO T-Echo t-echo nrf52840
LILYGO T-Echo Plus t-echo-plus nrf52840
LILYGO T-Impulse Plus t-impulse-plus nrf52840
LilyGo T3-C6 tlora-c6 esp32-c6
Seeed SenseCAP T1000-E tracker-t1000-e nrf52840

Build artifacts expire on 2026-08-10. Updated for dcf6e25.

@RCGV1

RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@RCGV1

RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

CI label check requires an enhancement (or equivalent allowed) label. This contributor account cannot add repository labels; a maintainer will need to apply it before the check can pass.

@RCGV1

RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@RCGV1

RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

CI dependency status: the current Native Simulator, WASM, and Docker failures stop at DeviceMetadata.has_xeddsa being absent from the upstream protobuf submodule. That field is supplied by the linked draft dependency meshtastic/protobufs#983; the later lcov: command not found line is cascading cleanup. The independent cppcheck findings were addressed in 84689b0. No signed-Admin compile failure appears before the missing schema field.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
src/mesh/FloodingRouter.cpp (1)

71-73: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Keep this rationale to two lines.

This three-line comment exceeds the repository’s comment limit.

Proposed cleanup
-        // Verify the replacement before deleting the valid lower-hop copy waiting in the TX queue.
-        // This is intentionally redundant with ReliableRouter's ingress gate: it keeps this helper
-        // safe if another caller is introduced later.
+        // Re-authenticate before replacing the queued lower-hop copy so future callers remain safe.

As per coding guidelines, “Keep code comments minimal: one or two lines maximum.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/mesh/FloodingRouter.cpp` around lines 71 - 73, Shorten the explanatory
comment above the replacement verification in FloodingRouter to no more than two
lines while preserving its key rationale: verify the replacement before deleting
the valid lower-hop TX-queued copy, even though ReliableRouter already enforces
this at ingress.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/mesh/Router.cpp`:
- Around line 98-105: Guard storeRoutingAuthCache with an early return when
routingAuthCacheLock is null, matching routingAuthCacheMatches,
applyRoutingAuthCache, and clearRoutingAuthCache, before constructing the
LockGuard.
- Around line 655-671: Sanitize the already-decoded fallback packet before
returning from perhapsDecode(), because the routing-auth cache may be clobbered
between passesRoutingAuthGate() and handleReceived(). In the
authCandidate.which_payload_variant == meshtastic_MeshPacket_decoded_tag path,
clear serialized authentication fields directly on *p (including xeddsa_signed,
public_key, and pki_encrypted) before copying or caching the packet, or
otherwise make the gate-to-handle handoff atomic.

In `@test/test_admin_radio/test_main.cpp`:
- Around line 1029-1066: Restore all modified global test state before each test
returns. In test_bootDefense_sanitizesStaleLicensedChannelsOnce and
test_restorePreferences_sanitizesLicensedBackupBeforeReturn, save the original
owner and relevant channel state at the start, then restore them on every exit
path; ensure the restore test also cleans up its temporary NodeDB and backup
resources. Use the existing test setup/cleanup patterns so later tests do not
inherit licensed or sanitized state.

---

Nitpick comments:
In `@src/mesh/FloodingRouter.cpp`:
- Around line 71-73: Shorten the explanatory comment above the replacement
verification in FloodingRouter to no more than two lines while preserving its
key rationale: verify the replacement before deleting the valid lower-hop
TX-queued copy, even though ReliableRouter already enforces this at ingress.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ec360569-c027-4563-9843-1875992d71d6

📥 Commits

Reviewing files that changed from the base of the PR and between 91043fa and 6c63898.

📒 Files selected for processing (24)
  • src/main.cpp
  • src/mesh/Channels.cpp
  • src/mesh/FloodingRouter.cpp
  • src/mesh/FloodingRouter.h
  • src/mesh/NextHopRouter.cpp
  • src/mesh/NextHopRouter.h
  • src/mesh/NodeDB.cpp
  • src/mesh/NodeDB.h
  • src/mesh/Router.cpp
  • src/mesh/Router.h
  • src/mesh/WarmNodeStore.h
  • src/mesh/udp/UdpMulticastHandler.h
  • src/modules/AdminModule.cpp
  • src/modules/AdminModule.h
  • src/modules/NodeInfoModule.cpp
  • src/mqtt/MQTT.cpp
  • test/support/AdminModuleTestShim.h
  • test/support/MockMeshService.h
  • test/test_admin_radio/test_main.cpp
  • test/test_mqtt/MQTT.cpp
  • test/test_packet_signing/test_main.cpp
  • variants/stm32/CDEBYTE_E77-MBL/platformio.ini
  • variants/stm32/rak3172/platformio.ini
  • variants/stm32/stm32.ini

Comment thread src/mesh/Router.cpp
Comment thread src/mesh/Router.cpp Outdated
Comment thread test/test_admin_radio/test_main.cpp Outdated
@RCGV1

RCGV1 commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@RCGV1

RCGV1 commented Jul 12, 2026

Copy link
Copy Markdown
Member Author

Native simulation fixes are now pushed for MQTT ingress ownership and signed-packet metadata handling, with companion test-fixture stabilization. Validation completed with the targeted native suites passing 141/141 and the full coverage suite passing 618/618.

@RCGV1

RCGV1 commented Jul 23, 2026

Copy link
Copy Markdown
Member Author

Hardware validation: PASS

Validated the exact PR head 65db823 on a live licensed (KO6CNT) cross-architecture bench:

  • Source: T-Beam S3 Core (ESP32-S3)
  • Target: Muzi Base (nRF52840)
  • Firmware: 2.8.0.65db823 on both nodes

Results over RF using directed ADMIN_APP packets with pkiEncrypted=false:

  1. Before allowlisting the source public key, Muzi rejected a signed plaintext metadata request with ADMIN_PUBLIC_KEY_UNAUTHORIZED.
  2. After temporarily allowlisting T-Beam's public key on Muzi, signed plaintext metadata admin succeeded. Both endpoints logged verified XEdDSA signatures for the peer.
  3. A signed config mutation without a session passkey was rejected with ADMIN_BAD_SESSION_KEY.
  4. SESSIONKEY_CONFIG returned an 8-byte session key; a signed plaintext remote config write changed Muzi device.node_info_broadcast_secs from 10800 to 10807.
  5. A second signed remote-admin request restored the value to 10800, verified through Muzi's local serial config.

Cleanup completed: the temporary Muzi allowlist entry was removed, diagnostic streaming disabled, and both devices passed final serial liveness checks.

Note: current meshtastic-python remote admin defaults to PKI encryption, so this validation intentionally used the new required plaintext signed transport path directly (pkiEncrypted=false).

@RCGV1
RCGV1 marked this pull request as ready for review July 24, 2026 00:01

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
test/test_mqtt/MQTT.cpp (1)

58-60: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Keep the teardown comment within two lines.

The rationale is useful, but this three-line comment exceeds the project limit.

Proposed fix
-        // handleFromRadio queues packet copies for the phone. There is no phone poller in this
-        // unit test, so release any queued copies before LeakSanitizer checks process shutdown.
+        // This test has no phone poller; drain queued copies so LeakSanitizer sees no leak.

As per coding guidelines, comments must be minimal—one or two lines—and only explain non-obvious reasons.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/test_mqtt/MQTT.cpp` around lines 58 - 60, Shorten the teardown comment
above the getForPhone() loop to no more than two lines while preserving its
explanation that queued packet copies must be released because the unit test has
no phone poller before LeakSanitizer shutdown checks. Leave the getForPhone()
cleanup loop unchanged.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@protobufs`:
- Line 1: Update the protobufs submodule reference in the .gitmodules
configuration to a reachable commit that contains the
meshtastic_DeviceMetadata.has_xeddsa field, ensuring downstream builds can
resolve the submodule and regenerate the matching protobuf.

In `@src/mqtt/MQTT.cpp`:
- Around line 95-97: Shorten the comments near the local MQTT acknowledgement
handling and the authentication logic to no more than two lines each, retaining
only the non-obvious ownership or authentication rationale. Remove explanatory
details about otherwise obvious code behavior while preserving the
implementation unchanged.

---

Nitpick comments:
In `@test/test_mqtt/MQTT.cpp`:
- Around line 58-60: Shorten the teardown comment above the getForPhone() loop
to no more than two lines while preserving its explanation that queued packet
copies must be released because the unit test has no phone poller before
LeakSanitizer shutdown checks. Leave the getForPhone() cleanup loop unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 459dbfd4-6a98-4444-85e5-1bcdd26cbfce

📥 Commits

Reviewing files that changed from the base of the PR and between 4cd335d and 65db823.

⛔ Files ignored due to path filters (5)
  • src/mesh/generated/meshtastic/config.pb.cpp is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/config.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/deviceonly.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/localonly.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/mesh.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
📒 Files selected for processing (7)
  • protobufs
  • src/modules/AdminModule.cpp
  • src/mqtt/MQTT.cpp
  • test/test_admin_radio/test_main.cpp
  • test/test_fuzz_packets/test_main.cpp
  • test/test_mqtt/MQTT.cpp
  • test/test_packet_signing/test_main.cpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • test/test_admin_radio/test_main.cpp
  • src/modules/AdminModule.cpp

Comment thread protobufs Outdated
Comment thread src/mqtt/MQTT.cpp Outdated
RCGV1 added 9 commits July 23, 2026 17:10
Preserve and publish identity keys in licensed mode so existing XEdDSA signatures can authenticate plaintext traffic. Sign licensed broadcasts and direct messages when they fit, while keeping PKI encryption disabled and normal routing behavior unchanged.
Remove the process-global signer context and carry only the exact Router-verified key on the authenticated packet. Clear serialized authentication metadata before every untrusted decode, require both the verified-signature marker and packet-local key in licensed Admin authorization, and expand authorization/session/isolation coverage while cleaning routing test ownership.
Make the routing authentication gate input const and collapse licensed Admin authorization into a single branch so legacy response, local, channel, and PKI checks run only for non-licensed-remote traffic.
@RCGV1
RCGV1 force-pushed the codex/ham-signed-admin branch from 65db823 to ba1be30 Compare July 24, 2026 00:17

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/modules/AdminModule.cpp`:
- Around line 147-170: Update handleReceivedProtobuf’s accept-chain logic to
treat an authorized licensed signer as an accepted admin payload, allowing
directed plaintext allowlisted mutations to reach the existing passkey/handler
path instead of the final NOT_AUTHORIZED branch. Reuse authorizedLicensedSigner
from the licensed-signer validation and preserve the existing response,
local-admin, admin-channel, and PKI-encrypted acceptance behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2e2ffc8b-8c35-44ca-b395-753fab340c72

📥 Commits

Reviewing files that changed from the base of the PR and between 65db823 and ba1be30.

📒 Files selected for processing (15)
  • src/main.cpp
  • src/mesh/Channels.cpp
  • src/mesh/FloodingRouter.cpp
  • src/mesh/NodeDB.cpp
  • src/mesh/NodeDB.h
  • src/mesh/Router.cpp
  • src/mesh/Router.h
  • src/modules/AdminModule.cpp
  • src/modules/AdminModule.h
  • src/modules/NodeInfoModule.cpp
  • src/mqtt/MQTT.cpp
  • test/support/AdminModuleTestShim.h
  • test/support/MockMeshService.h
  • test/test_admin_radio/test_main.cpp
  • test/test_packet_signing/test_main.cpp
🚧 Files skipped from review as they are similar to previous changes (4)
  • test/support/MockMeshService.h
  • src/mesh/Channels.cpp
  • test/test_packet_signing/test_main.cpp
  • src/mesh/FloodingRouter.cpp

Comment thread src/modules/AdminModule.cpp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[2.8.0] Authorize signed plaintext remote admin in licensed mode

1 participant