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]

Reply via email to