Hello Ravi Nori,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/35733
to review the following change.
Change subject: engine : [mla] query execution failed due to insufficient
permissions
......................................................................
engine : [mla] query execution failed due to insufficient permissions
GetTasksStatusesByTasksIDsQuery throws
insufficient permissions when querying for
task ids
Change-Id: I2d036f6a03a5f46342945452340133bd8150ce45
Bug-Url: https://bugzilla.redhat.com/1153043
Signed-off-by: Ravi Nori <[email protected]>
---
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
3 files changed, 31 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/35733/1
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
index 9937105..8cbf97e 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetTasksStatusesByTasksIDsQuery.java
@@ -2,7 +2,9 @@
import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
import
org.ovirt.engine.core.common.queries.GetTasksStatusesByTasksIDsParameters;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.Collection;
public class GetTasksStatusesByTasksIDsQuery<P extends
GetTasksStatusesByTasksIDsParameters>
extends QueriesCommandBase<P> {
@@ -12,9 +14,16 @@
@Override
protected void executeQueryCommand() {
- if (getUser().isAdmin() ||
-
DbFacade.getInstance().getAsyncTaskDao().getVdsmTaskIdsByUser(getUserID()).
- containsAll(getParameters().getTasksIDs())) {
+ boolean userAuthorizedToRunQuery = getUser().isAdmin();
+
+ if (!userAuthorizedToRunQuery) {
+ Collection<Guid> userIds =
CommandCoordinatorUtil.getUserIdsForVdsmTaskIds(getParameters().getTasksIDs());
+ boolean tasksOwnedByUser = userIds.size() == 1 &&
userIds.contains(getUserID());
+ // if user ids is empty the tasks have completed
+ userAuthorizedToRunQuery = userIds.isEmpty() || tasksOwnedByUser;
+ }
+
+ if (userAuthorizedToRunQuery) {
getQueryReturnValue().setReturnValue(CommandCoordinatorUtil.pollTasks(getParameters().getTasksIDs()));
} else {
String errMessage = "Query execution failed due to insufficient
permissions. Users can only query tasks started by them.";
@@ -22,4 +31,5 @@
getQueryReturnValue().setExceptionString(errMessage);
}
}
+
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
index 28a699c..52a9603 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/AsyncTaskManager.java
@@ -1,12 +1,14 @@
package org.ovirt.engine.core.bll.tasks;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CountDownLatch;
@@ -788,4 +790,14 @@
return false;
}
+ public Collection<Guid> getUserIdsForVdsmTaskIds(List<Guid> vdsmTaskIds) {
+ Set<Guid> users = new TreeSet<>();
+ for (Guid id : vdsmTaskIds) {
+ if (_tasks.containsKey(id)) {
+
users.add(_tasks.get(id).getParameters().getDbAsyncTask().getUserId());
+ }
+ }
+ return users;
+ }
+
}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
index f23a173..c928eba 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/tasks/CommandCoordinatorUtil.java
@@ -1,6 +1,7 @@
package org.ovirt.engine.core.bll.tasks;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
@@ -111,6 +112,10 @@
getAsyncTaskManager().logAndFailTaskOfCommandWithEmptyVdsmId(task,
message);
}
+ public static Collection<Guid> getUserIdsForVdsmTaskIds(ArrayList<Guid>
tasksIDs) {
+ return getAsyncTaskManager().getUserIdsForVdsmTaskIds(tasksIDs);
+ }
+
public static void removeTaskFromDbByTaskId(Guid taskId) {
AsyncTaskManager.removeTaskFromDbByTaskId(taskId);
}
--
To view, visit http://gerrit.ovirt.org/35733
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d036f6a03a5f46342945452340133bd8150ce45
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Oved Ourfali <[email protected]>
Gerrit-Reviewer: Ravi Nori <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches