Skip to content

Commit d8b9619

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

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
import javax.ws.rs.core.Response;
112112

113113
import java.util.ArrayList;
114+
import java.util.Collections;
114115
import java.util.HashMap;
115116
import java.util.List;
116117
import java.util.Map;
@@ -457,13 +458,31 @@ public VXUserList searchXUsers(@Context HttpServletRequest request, @QueryParam(
457458
hasRole = !userRolesList.contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR) ? userRolesList.add(RangerConstants.ROLE_KEY_ADMIN_AUDITOR) : hasRole;
458459
hasRole = !userRolesList.contains(RangerConstants.ROLE_USER) ? userRolesList.add(RangerConstants.ROLE_USER) : hasRole;
459460
} else if (loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_USER)) {
461+
if ((CollectionUtils.isNotEmpty(userRolesList) && (userRolesList.size() != 1 || !userRolesList.contains(RangerConstants.ROLE_USER)))
462+
|| (userRole != null && !RangerConstants.ROLE_USER.equals(userRole))) {
463+
throw restErrorUtil.create403RESTException("Logged-In user is not allowed to access requested user data.");
464+
}
465+
460466
logger.info("Logged-In user having user role will be able to fetch his own user details.");
461467

462-
if (!searchCriteria.getParamList().containsKey("name")) {
463-
searchCriteria.addParam("name", loggedInVXUser.getName());
464-
} else if (searchCriteria.getParamList().containsKey("name") && !stringUtil.isEmpty(searchCriteria.getParamValue("name").toString()) && !searchCriteria.getParamValue("name").toString().equalsIgnoreCase(loggedInVXUser.getName())) {
468+
if (searchCriteria.getParamList().containsKey("name") && !stringUtil.isEmpty(searchCriteria.getParamValue("name").toString()) && !searchCriteria.getParamValue("name").toString().equalsIgnoreCase(loggedInVXUser.getName())) {
465469
throw restErrorUtil.create403RESTException("Logged-In user is not allowed to access requested user data.");
466470
}
471+
472+
if (loggedInVXUser != null && !xUserMgr.hasAccessToModule(RangerConstants.MODULE_USER_GROUPS)) {
473+
loggedInVXUser = xUserMgr.getMaskedVXUser(loggedInVXUser);
474+
}
475+
476+
VXUserList vXUserList = new VXUserList();
477+
vXUserList.setVXUsers(Collections.singletonList(loggedInVXUser));
478+
vXUserList.setStartIndex(searchCriteria.getStartIndex());
479+
vXUserList.setResultSize(vXUserList.getVXUsers().size());
480+
vXUserList.setTotalCount(vXUserList.getVXUsers().size());
481+
vXUserList.setPageSize(searchCriteria.getMaxRows());
482+
vXUserList.setSortBy(searchCriteria.getSortBy());
483+
vXUserList.setSortType(searchCriteria.getSortType());
484+
485+
return vXUserList;
467486
}
468487
}
469488
}

0 commit comments

Comments
 (0)