Hello Ondřej Macháček,

I'd like you to do a code review.  Please visit

    http://gerrit.ovirt.org/35301

to review the following change.

Change subject: mla: deny access to specific ID for users in user level API
......................................................................

mla: deny access to specific ID for users in user level API

User who don't have manipulate_permission action group
should not see users in system, even he shouldn't access
them directly by their ID's.

Change-Id: I90ec94fd0194680548e159f5d9bc010f5c233b91
Bug-Url: https://bugzilla.redhat.com/1160443
Signed-off-by: Ondra Machacek <machacek.on...@gmail.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDbUserByUserIdQuery.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
M packaging/dbscripts/user_sp.sql
4 files changed, 21 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/35301/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDbUserByUserIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDbUserByUserIdQuery.java
index 5291239..2b286a6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDbUserByUserIdQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/aaa/GetDbUserByUserIdQuery.java
@@ -14,6 +14,6 @@
     protected void executeQueryCommand() {
         getQueryReturnValue().setReturnValue(
                 DbFacade.getInstance().getDbUserDao()
-                        .get((getParameters()).getId()));
+                        .get((getParameters()).getId(), 
getParameters().isFiltered()));
     }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
index 4110d0d..03921f8 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
@@ -22,6 +22,15 @@
     DbUser get(Guid id);
 
     /**
+     * Retrieves the suser with the specified id.
+     *
+     * @param id the id of user
+     * @param isFiltered user level / admin level
+     * @return the user, or <code>null</code> if the id was invalid
+     */
+    DbUser get(Guid id, boolean isFiltered);
+
+    /**
      * Retrieves a user by username.
      *
      * @param username
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
index 5680990..30bd069 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
@@ -81,8 +81,14 @@
 
     @Override
     public DbUser get(Guid id) {
+        return get(id, false);
+    }
+
+    @Override
+    public DbUser get(Guid id, boolean isFiltered) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("user_id", id);
+                .addValue("user_id", id)
+                .addValue("is_filtered", isFiltered);
 
         return getCallsHandler().executeRead("GetUserByUserId", 
DbUserRowMapper.instance, parameterSource);
     }
diff --git a/packaging/dbscripts/user_sp.sql b/packaging/dbscripts/user_sp.sql
index c4c8379..61064b2 100644
--- a/packaging/dbscripts/user_sp.sql
+++ b/packaging/dbscripts/user_sp.sql
@@ -161,12 +161,14 @@
 
 
 
-Create or replace FUNCTION GetUserByUserId(v_user_id UUID) RETURNS SETOF users 
STABLE
+Create or replace FUNCTION GetUserByUserId(v_user_id UUID, v_is_filtered 
BOOLEAN) RETURNS SETOF users STABLE
    AS $procedure$
 BEGIN
       RETURN QUERY SELECT users.*
       FROM users
-      WHERE user_id = v_user_id;
+      WHERE user_id = v_user_id AND (NOT v_is_filtered OR
+                                     EXISTS (SELECT 1 FROM  users u, 
user_db_users_permissions_view p
+                                             WHERE  u.user_id = v_user_id AND 
u.user_id = p.ad_element_id));
 END; $procedure$
 LANGUAGE plpgsql;
 


-- 
To view, visit http://gerrit.ovirt.org/35301
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I90ec94fd0194680548e159f5d9bc010f5c233b91
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com>
Gerrit-Reviewer: Ondřej Macháček <machacek.on...@gmail.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to