Skip to content

Honor RECA_NO_ACCESS in record lookup RPC encoder#13141

Open
brbzull0 wants to merge 1 commit into
apache:masterfrom
brbzull0:rec_record_yaml_no_access_apache
Open

Honor RECA_NO_ACCESS in record lookup RPC encoder#13141
brbzull0 wants to merge 1 commit into
apache:masterfrom
brbzull0:rec_record_yaml_no_access_apache

Conversation

@brbzull0
Copy link
Copy Markdown
Contributor

@brbzull0 brbzull0 commented May 7, 2026

The JSONRPC record-lookup handler serialized RecRecord values unconditionally, leaking current and default values for config records registered with RECA_NO_ACCESS to any caller able to reach the JSONRPC socket.

Suppress the value fields in the YAML encoder for CONFIG records whose access_type is RECA_NO_ACCESS, while still emitting the type label and metadata so callers can see the record exists. Gate the check on REC_TYPE_IS_CONFIG since access_type lives in a union shared with stat_meta and must not be read for STAT records.

Add a Catch2 unit test covering the default-access, no-access, and STAT union-safety cases.

The JSONRPC record-lookup handler serialized RecRecord values
unconditionally, leaking current and default values for config
records registered with RECA_NO_ACCESS to any caller able to
reach the JSONRPC socket.

Suppress the value fields in the YAML encoder for CONFIG records
whose access_type is RECA_NO_ACCESS, while still emitting the
type label and metadata so callers can see the record exists.
Gate the check on REC_TYPE_IS_CONFIG since access_type lives in
a union shared with stat_meta and must not be read for STAT
records.

Add a Catch2 unit test covering the default-access, no-access,
and STAT union-safety cases.
@brbzull0 brbzull0 added this to the 11.0.0 milestone May 7, 2026
@brbzull0 brbzull0 self-assigned this May 7, 2026
@brbzull0 brbzull0 added the JSONRPC JSONRPC 2.0 related work. label May 7, 2026
@cmcfarlen cmcfarlen self-requested a review May 11, 2026 22:17
@bryancall bryancall requested a review from Copilot May 11, 2026 22:17
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR tightens the management RPC record-lookup serialization path to honor RECA_NO_ACCESS for CONFIG/LOCAL records by omitting the value fields from the YAML encoding, preventing unintended disclosure of current/default config values to JSONRPC callers.

Changes:

  • Update YAML::convert<RecRecord>::encode() to suppress current_value / default_value when REC_TYPE_IS_CONFIG(rec_type) and access_type == RECA_NO_ACCESS.
  • Add a Catch2 unit test suite covering default-access config, no-access config (string/int), and STAT union-safety behavior.
  • Wire the new unit test into src/mgmt/rpc CMake testing targets.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
src/mgmt/rpc/handlers/common/convert.h Adds RECA_NO_ACCESS gating to omit record value fields for CONFIG/LOCAL records while still emitting type/metadata.
src/mgmt/rpc/handlers/common/unit_tests/test_record_yaml.cc New Catch2 tests validating value suppression for no-access config records and ensuring STAT records aren’t filtered via union misuse.
src/mgmt/rpc/CMakeLists.txt Adds test_record_yaml test executable and registers it with CTest.

Comment on lines +118 to +121
// The protected value fields must not appear in the encoded output.
REQUIRE_FALSE(node[constants_rec::CURRENT_VALUE]);
REQUIRE_FALSE(node[constants_rec::DEFAULT_VALUE]);
}
Comment on lines +120 to +131
REQUIRE_FALSE(node[constants_rec::DEFAULT_VALUE]);
}

TEST_CASE("Record YAML encoder withholds values for RECA_NO_ACCESS int records", "[mgmt][rpc][record_yaml][no_access]")
{
RecRecord rec{};
fill_int_config(rec, "proxy.config.example.token", 42, 0, RECA_NO_ACCESS);
YAML::Node node = encode_record_node(rec);

REQUIRE(node[constants_rec::DATA_TYPE].as<std::string>() == "INT");
REQUIRE_FALSE(node[constants_rec::CURRENT_VALUE]);
REQUIRE_FALSE(node[constants_rec::DEFAULT_VALUE]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

JSONRPC JSONRPC 2.0 related work.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants