[
https://issues.apache.org/jira/browse/HDDS-16842?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Siyao Meng updated HDDS-16842:
------------------------------
Attachment: CR-7-check-admin-rights-in-om-bootstrap-rpc.patch
> Check admin rights in the OM bootstrap RPC handler, consistent with
> decommission and getOMConfiguration
> -------------------------------------------------------------------------------------------------------
>
> Key: HDDS-16842
> URL: https://issues.apache.org/jira/browse/HDDS-16842
> Project: Apache Ozone
> Issue Type: Bug
> Reporter: Siyao Meng
> Priority: Minor
> Attachments: CR-7-check-admin-rights-in-om-bootstrap-rpc.patch
>
>
> h3. Mechanism
> {{OMAdminProtocolServerSideImpl.decommission}} and
> {{OMAdminProtocolServerSideImpl.getOMConfiguration}} check
> {{isAdminAuthorizationEnabled() && !isAdmin(getRemoteUser())}} before they
> act. {{OMInterServiceProtocolServerSideImpl.bootstrap}}, the other membership
> call of the OM, checks {{OzoneManagerRatisUtils.checkLeaderStatus}} only. The
> attached patch adds the same check to it, so that the three calls are
> consistent.
> h3. Impact
> A consistency gap between the handlers. This is not a report of a reproduced
> failure.
> A new OM sends the bootstrap request as the user that runs the OMs, which is
> an administrator. A normal bootstrap already depends on that, because it
> calls {{getOMConfiguration}} on every existing OM first. A bootstrap that
> works today is therefore not affected (code reading, and
> {{TestAddRemoveOzoneManager.testBootstrap}} with admin authorization
> enabled). With admin authorization disabled the new check does nothing.
> h3. Reproduction
> There is no separate reproduction. The regression test in the patch is the
> evidence.
> h3. Patch
> [^CR-7-check-admin-rights-in-om-bootstrap-rpc.patch], against
> 7fcf31294859d5d31163e016b5a9a63f21c6edd2. It also applies to master at
> 1cc6423590f (not built there).
> {{OMInterServiceProtocolServerSideImpl.bootstrap}} throws {{OMException}}
> with {{PERMISSION_DENIED}} and "Only administrators are authorized to perform
> bootstrap." inside its existing try block when
> {{isAdminAuthorizationEnabled() && !isAdmin(getRemoteUser())}}. The existing
> catch returns it as a {{RATIS_BOOTSTRAP_ERROR}} response. No config, request
> or proto change.
> Covered by {{bootstrapNonAdminIsDenied}} in the existing
> {{TestOMAdminRpcAuthorization}}, which expects that message for a caller
> without admin rights and fails on the unfixed commit.
> {{TestAddRemoveOzoneManager.testBootstrap}} now runs with admin authorization
> enabled, so real OMs join through the new check. With the patch
> {{TestOMAdminRpcAuthorization}} (5 tests),
> {{TestOMAdminProtocolServerSideImpl}} (1 test),
> {{TestOMInstallSnapshotDuringBootstrapping}} (1 test) and
> {{TestAddRemoveOzoneManager}} (8 tests) pass, and checkstyle is clean on both
> modules.
> Found by code review of the OM HA membership change paths (bootstrap,
> decommission and leader transfer), as part of the TLA+ verification effort
> under HDDS-15926, on commit 7fcf31294859d5d31163e016b5a9a63f21c6edd2. Checked
> against HDDS issues and apache/ozone pull requests for duplicates before
> filing. The attached patch is a proposal for review. Generated with Specula
> (Claude Opus 5.5).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]