From b051ad69216c06ca7c190fb285fa713c6bb75643 Mon Sep 17 00:00:00 2001 From: RakeshGuptaDev Date: Thu, 18 Jul 2024 08:39:42 -0700 Subject: [PATCH] RANGER-4804: fix for NPE while updating user-group associations Signed-off-by: Madhan Neethiraj --- .../java/org/apache/ranger/biz/XUserMgr.java | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java index c16695fb5b..5209168ed9 100755 --- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java @@ -261,7 +261,15 @@ public VXUser createXUser(VXUser vXUser) { createdXUser.setGroupIdList(groupIdList); createdXUser.setGroupNameList(groupNamesList); for (VXGroupUser vXGroupUser : vXGroupUsers) { - trxLogList.addAll(xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT)); + List groupUserTrxLogs = xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT); + + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + if (trxLogList == null) { + trxLogList = new ArrayList<>(); + } + + trxLogList.addAll(groupUserTrxLogs); + } } // xaBizUtil.createTrxLog(trxLogList); @@ -491,7 +499,16 @@ else if (oldUserProfile.getUserSource() == RangerCommonEnums.USER_EXTERNAL) { Long userId = vXUser.getId(); List groupUsersToRemove = new ArrayList(); - trxLogList.addAll(createOrDelGrpUserWithUpdatedGrpId(vXUser, groupIdList,userId, groupUsersToRemove)); + List groupUserTrxLogs = createOrDelGrpUserWithUpdatedGrpId(vXUser, groupIdList,userId, groupUsersToRemove); + + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + if (trxLogList == null) { + trxLogList = new ArrayList<>(); + } + + trxLogList.addAll(groupUserTrxLogs); + } + xaBizUtil.createTrxLog(trxLogList); updateUserStoreVersion("updateXUser(" + vXUser.getName() + ")"); @@ -523,7 +540,10 @@ private List createOrDelGrpUserWithUpdatedGrpId(VXUser vXUser, Colle } if (!found) { VXGroupUser vXGroupUser = createXGroupUser(userId, groupId); - trxLogList.addAll(xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT)); + List groupUserTrxLogs = xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT); + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + trxLogList.addAll(groupUserTrxLogs); + } groupNamesSet.add(vXGroupUser.getName()); } } @@ -533,14 +553,20 @@ private List createOrDelGrpUserWithUpdatedGrpId(VXUser vXUser, Colle boolean found = false; for (Long groupId : groupIdList) { if (groupId.equals(vXGroupUser.getParentGroupId())) { - trxLogList.addAll(xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_UPDATE_CONTEXT)); + List groupUserTrxLogs = xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_UPDATE_CONTEXT); + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + trxLogList.addAll(groupUserTrxLogs); + } found = true; break; } } if (!found) { // TODO I've to get the transaction log from here. - trxLogList.addAll(xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_DELETE_CONTEXT)); + List groupUserTrxLogs = xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_DELETE_CONTEXT); + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + trxLogList.addAll(groupUserTrxLogs); + } groupUsersToRemove.add(vXGroupUser.getId()); // xGroupUserService.deleteResource(vXGroupUser.getId()); groupNamesSet.remove(vXGroupUser.getName()); @@ -550,7 +576,10 @@ private List createOrDelGrpUserWithUpdatedGrpId(VXUser vXUser, Colle } else { for (Long groupId : groupIdList) { VXGroupUser vXGroupUser = createXGroupUser(userId, groupId); - trxLogList.addAll(xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT)); + List groupUserTrxLogs = xGroupUserService.getTransactionLog(vXGroupUser, null, OPERATION_CREATE_CONTEXT); + if (CollectionUtils.isNotEmpty(groupUserTrxLogs)) { + trxLogList.addAll(groupUserTrxLogs); + } groupNamesSet.add(vXGroupUser.getName()); } }