Skip to content

Commit 5da8a43

Browse files
RANGER-5342: USER-role users with names similar to admin or keyadmin can query those admin/keyadmin users.
1 parent f2b3f12 commit 5da8a43

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

security-admin/src/main/java/org/apache/ranger/rest/XUserREST.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Map;
2424
import java.util.List;
2525
import java.util.ArrayList;
26+
import java.util.Collections;
2627
import java.util.HashMap;
2728

2829
import javax.servlet.http.HttpServletRequest;
@@ -437,15 +438,32 @@ else if ((searchCriteria.getParamList().containsKey("name")) && userName!= null
437438
hasRole = !userRolesList.contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR) ? userRolesList.add(RangerConstants.ROLE_KEY_ADMIN_AUDITOR) : hasRole;
438439
hasRole = !userRolesList.contains(RangerConstants.ROLE_USER) ? userRolesList.add(RangerConstants.ROLE_USER) : hasRole;
439440
} else if (loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_USER)) {
441+
if ((CollectionUtils.isNotEmpty(userRolesList) && (userRolesList.size() != 1 || !userRolesList.contains(RangerConstants.ROLE_USER)))
442+
|| (userRole != null && !RangerConstants.ROLE_USER.equals(userRole))) {
443+
throw restErrorUtil.create403RESTException("Logged-In user is not allowed to access requested user data.");
444+
}
445+
440446
logger.info("Logged-In user having user role will be able to fetch his own user details.");
441-
if (!searchCriteria.getParamList().containsKey("name")) {
442-
searchCriteria.addParam("name", loggedInVXUser.getName());
443-
}else if(searchCriteria.getParamList().containsKey("name")
444-
&& !stringUtil.isEmpty(searchCriteria.getParamValue("name").toString())
445-
&& !searchCriteria.getParamValue("name").toString().equalsIgnoreCase(loggedInVXUser.getName())){
447+
448+
if (searchCriteria.getParamList().containsKey("name") && !stringUtil.isEmpty(searchCriteria.getParamValue("name").toString()) && !searchCriteria.getParamValue("name").toString().equalsIgnoreCase(loggedInVXUser.getName())) {
446449
throw restErrorUtil.create403RESTException("Logged-In user is not allowed to access requested user data.");
447450
}
448-
451+
452+
453+
if (loggedInVXUser != null && !xUserMgr.hasAccessToModule(RangerConstants.MODULE_USER_GROUPS)) {
454+
loggedInVXUser = xUserMgr.getMaskedVXUser(loggedInVXUser);
455+
}
456+
457+
VXUserList vXUserList = new VXUserList();
458+
vXUserList.setVXUsers(Collections.singletonList(loggedInVXUser));
459+
vXUserList.setStartIndex(searchCriteria.getStartIndex());
460+
vXUserList.setResultSize(vXUserList.getVXUsers().size());
461+
vXUserList.setTotalCount(vXUserList.getVXUsers().size());
462+
vXUserList.setPageSize(searchCriteria.getMaxRows());
463+
vXUserList.setSortBy(searchCriteria.getSortBy());
464+
vXUserList.setSortType(searchCriteria.getSortType());
465+
466+
return vXUserList;
449467
}
450468
}
451469
}

security-admin/src/test/java/org/apache/ranger/rest/TestXUserREST.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,7 +1890,7 @@ public void test112deleteUsersByUserNameNull() {
18901890
@SuppressWarnings({ "unchecked", "static-access" })
18911891
@Test
18921892
public void test113ErrorWhenRoleUserIsTryingToFetchAnotherUserDetails() {
1893-
1893+
18941894
destroySession();
18951895
String userLoginID = "testuser";
18961896
Long userId = 8L;
@@ -1935,7 +1935,7 @@ public void test113ErrorWhenRoleUserIsTryingToFetchAnotherUserDetails() {
19351935
@SuppressWarnings({ "unchecked", "static-access" })
19361936
@Test
19371937
public void test114RoleUserWillGetOnlyHisOwnUserDetails() {
1938-
1938+
19391939
destroySession();
19401940
String userLoginID = "testuser";
19411941
Long userId = 8L;
@@ -1977,8 +1977,8 @@ public void test114RoleUserWillGetOnlyHisOwnUserDetails() {
19771977
Mockito.when(searchUtil.extractInt(request, testSearchCriteria, "status", "User Status")).thenReturn(1);
19781978
Mockito.when(searchUtil.extractStringList(request, testSearchCriteria, "userRoleList", "User Role List", "userRoleList", null,null)).thenReturn(new ArrayList<String>());
19791979
Mockito.when(searchUtil.extractRoleString(request, testSearchCriteria, "userRole", "Role", null)).thenReturn("");
1980+
Mockito.when(xUserMgr.hasAccessToModule(RangerConstants.MODULE_USER_GROUPS)).thenReturn(true);
19801981
Mockito.when(xUserService.getXUserByUserName("testuser")).thenReturn(loggedInUser);
1981-
Mockito.when(xUserMgr.searchXUsers(testSearchCriteria)).thenReturn(expecteUserList);
19821982
VXUserList gotVXUserList=xUserRest.searchXUsers(request, null, null);
19831983

19841984
assertEquals(gotVXUserList.getList().size(), 1);
@@ -2017,7 +2017,7 @@ public void test116updateXGroupPermissionWithPermissionIdIsNull() {
20172017
assertEquals(retVXGroupPermission.getClass(), testVXGroupPermission.getClass());
20182018

20192019
}
2020-
2020+
20212021
@After
20222022
public void destroySession() {
20232023
RangerSecurityContext context = new RangerSecurityContext();

0 commit comments

Comments
 (0)