This is an automated email from the ASF dual-hosted git repository.
errose28 pushed a commit to branch HDDS-14496-zdu
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-14496-zdu by this push:
new 77e82c6182d HDDS-16639. `ozone admin upgrade status` should have an
admin check (#11354)
77e82c6182d is described below
commit 77e82c6182d0fe9e622bed38c3d318639a6802fa
Author: Ethan Rose <[email protected]>
AuthorDate: Tue Sep 29 12:58:30 2026 -0400
HDDS-16639. `ozone admin upgrade status` should have an admin check (#11354)
---
.../java/org/apache/hadoop/ozone/om/OzoneManager.java | 1 +
.../ozone/protocolPB/OzoneManagerRequestHandler.java | 1 +
.../protocolPB/TestOzoneManagerRequestHandler.java | 19 +++++++++++++++++++
3 files changed, 21 insertions(+)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 011c0dcd25a..157eb47452e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -3778,6 +3778,7 @@ public void forceFinalizeUpgrade() throws IOException {
@Override
public QueryUpgradeStatusResponse queryUpgradeStatus() throws IOException {
+ checkAdminUserPrivilege("query upgrade status.");
HddsProtos.UpgradeStatus scmStatus;
try {
scmStatus = scmClient.getBlockClient().queryUpgradeStatus();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index c2b8c33accb..33dfa1c3931 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -440,6 +440,7 @@ public OMResponse handleReadRequest(OMRequest request) {
OzoneManagerProtocolProtos.QueryUpgradeStatusResponse
queryUpgradeStatusResponse =
getOzoneManager().queryUpgradeStatus();
responseBuilder.setQueryUpgradeStatusResponse(queryUpgradeStatusResponse);
+ break;
default:
responseBuilder.setSuccess(false);
responseBuilder.setMessage("Unrecognized Command Type: " + cmdType);
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/protocolPB/TestOzoneManagerRequestHandler.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/protocolPB/TestOzoneManagerRequestHandler.java
index 61a6542e02d..cc2c687b675 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/protocolPB/TestOzoneManagerRequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/protocolPB/TestOzoneManagerRequestHandler.java
@@ -39,6 +39,7 @@
import org.apache.hadoop.ozone.om.OMPerformanceMetrics;
import org.apache.hadoop.ozone.om.OmConfig;
import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.execution.flowcontrol.ExecutionContext;
import org.apache.hadoop.ozone.om.helpers.BasicOmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.ListKeysLightResult;
@@ -504,6 +505,24 @@ public void testQueryUpgradeStatusDispatch() throws
IOException {
Mockito.verify(ozoneManager).queryUpgradeStatus();
}
+ /**
+ * Querying upgrade status is admin-only: {@link
OzoneManager#queryUpgradeStatus()} must reject a
+ * non-admin caller with PERMISSION_DENIED before contacting SCM.
+ */
+ @Test
+ public void testQueryUpgradeStatusRequiresAdmin() throws IOException {
+ OzoneManager ozoneManager = Mockito.mock(OzoneManager.class);
+ Mockito.when(ozoneManager.queryUpgradeStatus()).thenCallRealMethod();
+
Mockito.doCallRealMethod().when(ozoneManager).checkAdminUserPrivilege(Mockito.anyString());
+ Mockito.when(ozoneManager.isAdminAuthorizationEnabled()).thenReturn(true);
+ Mockito.when(ozoneManager.isAdmin(any())).thenReturn(false);
+
+ // The admin check runs before the SCM block client is dereferenced (which
is null on the mock),
+ // so a PERMISSION_DENIED here also confirms the query never reaches SCM.
+ OMException ex = Assertions.assertThrows(OMException.class,
ozoneManager::queryUpgradeStatus);
+ Assertions.assertEquals(OMException.ResultCodes.PERMISSION_DENIED,
ex.getResult());
+ }
+
@Test
public void
testSnapshotDiffRoutingUsesCorrectServerMethodBasedOnOptionalFlags()
throws IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]