This is an automated email from the ASF dual-hosted git repository.

ramackri pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 7e2af7a0e RANGER-5709: Fix KMS secure download for roles, tags, and 
userstore (#1114)
7e2af7a0e is described below

commit 7e2af7a0eabde62a49ed09e8a39fe1fdecdc2a91
Author: Ramachandran Krishnan <[email protected]>
AuthorDate: Wed Jul 29 10:54:55 2026 +0530

    RANGER-5709: Fix KMS secure download for roles, tags, and userstore (#1114)
    
    * RANGER-5709: Fix KMS secure download for roles, tags, and userstore
    
    Use getServiceByNameForDP() for KMS services in RoleREST, TagREST, and
    XUserREST secure download paths, matching policy download behavior.
    
    * RANGER-5709: Add KMS secure roles download unit test
    
    Assert RoleREST uses getServiceByNameForDP() for KMS services.
    
    ---------
    
    Co-authored-by: ramk <[email protected]>
---
 .../main/java/org/apache/ranger/rest/RoleREST.java | 12 ++++--
 .../main/java/org/apache/ranger/rest/TagREST.java  | 12 ++++--
 .../java/org/apache/ranger/rest/XUserREST.java     | 12 ++++--
 .../java/org/apache/ranger/rest/TestRoleREST.java  | 44 ++++++++++++++++++++++
 .../java/org/apache/ranger/rest/TestTagREST.java   |  8 ++--
 5 files changed, 72 insertions(+), 16 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
index 1011f6d71..1790cc1ca 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
@@ -1085,7 +1085,7 @@ public RangerRoles 
getSecureRangerRolesIfUpdated(@PathParam("serviceName") Strin
         boolean     isKeyAdmin        = bizUtil.isKeyAdmin();
         Long        downloadedVersion = null;
         boolean     isValid           = false;
-        boolean     isAllowed;
+        boolean     isAllowed         = false;
 
         request.setAttribute("downloadPolicy", "secure");
 
@@ -1110,18 +1110,22 @@ public RangerRoles 
getSecureRangerRolesIfUpdated(@PathParam("serviceName") Strin
                 }
 
                 XXServiceDef  xServiceDef   = 
daoManager.getXXServiceDef().getById(xService.getType());
-                RangerService rangerService = 
svcStore.getServiceByName(serviceName);
+                RangerService rangerService;
 
                 if (StringUtils.equals(xServiceDef.getImplclassname(), 
EmbeddedServiceDefsUtil.KMS_IMPL_CLASS_NAME)) {
+                    rangerService = 
svcStore.getServiceByNameForDP(serviceName);
+
                     if (isKeyAdmin) {
                         isAllowed = true;
-                    } else {
+                    } else if (rangerService != null) {
                         isAllowed = bizUtil.isUserAllowed(rangerService, 
POLICY_DOWNLOAD_USERS);
                     }
                 } else {
+                    rangerService = svcStore.getServiceByName(serviceName);
+
                     if (isAdmin) {
                         isAllowed = true;
-                    } else {
+                    } else if (rangerService != null) {
                         isAllowed = bizUtil.isUserAllowed(rangerService, 
POLICY_DOWNLOAD_USERS);
                     }
                 }
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
index c314e2f4d..03094f0b1 100755
--- a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java
@@ -1316,7 +1316,7 @@ public ServiceTags 
getSecureServiceTagsIfUpdated(@PathParam("serviceName") Strin
         Long        downloadedVersion = null;
         String      clusterName       = null;
         String      logMsg;
-        boolean     isAllowed;
+        boolean     isAllowed         = false;
 
         if (request != null) {
             clusterName = 
!StringUtils.isEmpty(request.getParameter(SearchFilter.CLUSTER_NAME)) ? 
request.getParameter(SearchFilter.CLUSTER_NAME) : "";
@@ -1332,18 +1332,22 @@ public ServiceTags 
getSecureServiceTagsIfUpdated(@PathParam("serviceName") Strin
             }
 
             XXServiceDef  xServiceDef   = 
daoManager.getXXServiceDef().getById(xService.getType());
-            RangerService rangerService = 
svcStore.getServiceByName(serviceName);
+            RangerService rangerService;
 
             if (StringUtils.equals(xServiceDef.getImplclassname(), 
EmbeddedServiceDefsUtil.KMS_IMPL_CLASS_NAME)) {
+                rangerService = svcStore.getServiceByNameForDP(serviceName);
+
                 if (isKeyAdmin) {
                     isAllowed = true;
-                } else {
+                } else if (rangerService != null) {
                     isAllowed = bizUtil.isUserAllowed(rangerService, 
Allowed_User_List_For_Tag_Download);
                 }
             } else {
+                rangerService = svcStore.getServiceByName(serviceName);
+
                 if (isAdmin) {
                     isAllowed = true;
-                } else {
+                } else if (rangerService != null) {
                     isAllowed = bizUtil.isUserAllowed(rangerService, 
Allowed_User_List_For_Tag_Download);
                 }
             }
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
index ced8b4227..1e8d24d0a 100755
--- a/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java
@@ -1444,7 +1444,7 @@ public RangerUserStore 
getSecureRangerUserStoreIfUpdated(@PathParam("serviceName
         boolean         isKeyAdmin        = bizUtil.isKeyAdmin();
         Long            downloadedVersion = null;
         boolean         isValid           = false;
-        boolean         isAllowed;
+        boolean         isAllowed         = false;
 
         try {
             isValid = serviceUtil.isValidService(serviceName, request);
@@ -1465,18 +1465,22 @@ public RangerUserStore 
getSecureRangerUserStoreIfUpdated(@PathParam("serviceName
 
             if (isValid && xService != null) {
                 XXServiceDef  xServiceDef   = 
rangerDaoManager.getXXServiceDef().getById(xService.getType());
-                RangerService rangerService = 
svcStore.getServiceByName(serviceName);
+                RangerService rangerService;
 
                 if (StringUtils.equals(xServiceDef.getImplclassname(), 
EmbeddedServiceDefsUtil.KMS_IMPL_CLASS_NAME)) {
+                    rangerService = 
svcStore.getServiceByNameForDP(serviceName);
+
                     if (isKeyAdmin) {
                         isAllowed = true;
-                    } else {
+                    } else if (rangerService != null) {
                         isAllowed = bizUtil.isUserAllowed(rangerService, 
USERSTORE_DOWNLOAD_USERS);
                     }
                 } else {
+                    rangerService = svcStore.getServiceByName(serviceName);
+
                     if (isAdmin) {
                         isAllowed = true;
-                    } else {
+                    } else if (rangerService != null) {
                         isAllowed = bizUtil.isUserAllowed(rangerService, 
USERSTORE_DOWNLOAD_USERS);
                     }
                 }
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
index 876dadad6..64a90dc43 100644
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestRoleREST.java
@@ -35,14 +35,17 @@
 import org.apache.ranger.db.XXRoleRefGroupDao;
 import org.apache.ranger.db.XXRoleRefRoleDao;
 import org.apache.ranger.db.XXRoleRefUserDao;
+import org.apache.ranger.db.XXServiceDefDao;
 import org.apache.ranger.entity.XXPortalUser;
 import org.apache.ranger.entity.XXRoleRefGroup;
 import org.apache.ranger.entity.XXRoleRefUser;
 import org.apache.ranger.entity.XXService;
+import org.apache.ranger.entity.XXServiceDef;
 import org.apache.ranger.plugin.model.RangerPolicy;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
 import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
 import org.apache.ranger.plugin.model.RangerRole;
+import org.apache.ranger.plugin.model.RangerService;
 import org.apache.ranger.plugin.model.validation.RangerRoleValidator;
 import org.apache.ranger.plugin.util.GrantRevokeRoleRequest;
 import org.apache.ranger.plugin.util.RangerRoles;
@@ -879,6 +882,47 @@ public void test17dGetSecureRangerRolesIfUpdated() {
         });
     }
 
+    @Test
+    public void 
test17eGetSecureRangerRolesIfUpdatedKmsUsesServiceByNameForDP() throws 
Exception {
+        RangerRoles rangerRoles        = createRangerRoles();
+        String      serviceName        = "dev_kms";
+        String      pluginId           = "kms-plugin";
+        String      clusterName        = "";
+        String      pluginCapabilities = "";
+
+        XXService xService = createXXService();
+        xService.setName(serviceName);
+        xService.setType(Id);
+
+        XXServiceDef xServiceDef = new XXServiceDef();
+        xServiceDef.setId(Id);
+        
xServiceDef.setImplclassname("org.apache.ranger.services.kms.RangerServiceKMS");
+
+        RangerService rangerService = new RangerService();
+        rangerService.setId(Id);
+        rangerService.setName(serviceName);
+
+        XXServiceDefDao xServiceDefDao = Mockito.mock(XXServiceDefDao.class);
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+
+        Mockito.when(serviceUtil.isValidService(serviceName, 
request)).thenReturn(true);
+        
Mockito.when(daoMgr.getXXService().findByName(serviceName)).thenReturn(xService);
+        Mockito.when(daoMgr.getXXServiceDef()).thenReturn(xServiceDefDao);
+        
Mockito.when(xServiceDefDao.getById(xService.getType())).thenReturn(xServiceDef);
+        Mockito.when(bizUtil.isAdmin()).thenReturn(false);
+        Mockito.when(bizUtil.isKeyAdmin()).thenReturn(false);
+        
Mockito.when(svcStore.getServiceByNameForDP(serviceName)).thenReturn(rangerService);
+        Mockito.when(bizUtil.isUserAllowed(rangerService, 
RoleREST.POLICY_DOWNLOAD_USERS)).thenReturn(true);
+        Mockito.when(roleStore.getRoles(serviceName, 
-1L)).thenReturn(rangerRoles);
+
+        RangerRoles result = 
roleRest.getSecureRangerRolesIfUpdated(serviceName, -1L, 0L, pluginId, 
clusterName, pluginCapabilities, request);
+
+        Assertions.assertNotNull(result);
+        Assertions.assertEquals(rangerRoles.getRangerRoles().size(), 
result.getRangerRoles().size());
+        Mockito.verify(svcStore).getServiceByNameForDP(serviceName);
+        Mockito.verify(bizUtil).isUserAllowed(rangerService, 
RoleREST.POLICY_DOWNLOAD_USERS);
+    }
+
     // empty request roles (requestParamRoles = 0, dbRoles = 5, return = all 
dbRoles)
     @Test
     public void test18GetRolesInJson() throws Exception {
diff --git 
a/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java 
b/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
index ce5ddc3e1..c92a7200a 100755
--- a/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
+++ b/security-admin/src/test/java/org/apache/ranger/rest/TestTagREST.java
@@ -1604,7 +1604,7 @@ public void 
test52getSecureServiceTagsIfUpdatedIsKeyAdminTrue() {
         Mockito.when(daoManager.getXXServiceDef()).thenReturn(xXServiceDefDao);
         
Mockito.when(xXServiceDefDao.getById(xService.getType())).thenReturn(xServiceDef);
         try {
-            
Mockito.when(svcStore.getServiceByName(serviceName)).thenReturn(rangerService);
+            
Mockito.when(svcStore.getServiceByNameForDP(serviceName)).thenReturn(rangerService);
         } catch (Exception e) {
         }
 
@@ -1625,7 +1625,7 @@ public void 
test52getSecureServiceTagsIfUpdatedIsKeyAdminTrue() {
         Mockito.verify(daoManager).getXXServiceDef();
         Mockito.verify(xXServiceDefDao).getById(xService.getType());
         try {
-            Mockito.verify(svcStore).getServiceByName(serviceName);
+            Mockito.verify(svcStore).getServiceByNameForDP(serviceName);
         } catch (Exception e) {
         }
         try {
@@ -1730,7 +1730,7 @@ public void 
test54getSecureServiceTagsIfUpdatedIsKeyAdminFalse() {
         Mockito.when(daoManager.getXXServiceDef()).thenReturn(xXServiceDefDao);
         
Mockito.when(xXServiceDefDao.getById(xService.getType())).thenReturn(xServiceDef);
         try {
-            
Mockito.when(svcStore.getServiceByName(serviceName)).thenReturn(rangerService);
+            
Mockito.when(svcStore.getServiceByNameForDP(serviceName)).thenReturn(rangerService);
         } catch (Exception e) {
         }
 
@@ -1752,7 +1752,7 @@ public void 
test54getSecureServiceTagsIfUpdatedIsKeyAdminFalse() {
         Mockito.verify(daoManager).getXXServiceDef();
         Mockito.verify(xXServiceDefDao).getById(xService.getType());
         try {
-            Mockito.verify(svcStore).getServiceByName(serviceName);
+            Mockito.verify(svcStore).getServiceByNameForDP(serviceName);
         } catch (Exception e) {
         }
         Mockito.verify(bizUtil).isUserAllowed(rangerService, 
Allowed_User_List_For_Tag_Download);

Reply via email to