Ravi Nori has uploaded a new change for review. Change subject: tools : manage-domains messages should be more clear ......................................................................
tools : manage-domains messages should be more clear When user adds a domain with no "-addPermissions" the message should show the option of -action=edit with -addPermissions option. When the user edits a domain to change the password of a user who has been granted permissions with -addPermissions, the message to grant permissions should not be displayed. Change-Id: I04bd16bebfcd9e5390444c525fc45363acff835c Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=908246 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/dbscripts/multi_level_administration_sp.sql M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAO.java M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAOImpl.java 4 files changed, 78 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/12035/1 diff --git a/backend/manager/dbscripts/multi_level_administration_sp.sql b/backend/manager/dbscripts/multi_level_administration_sp.sql index a80174a..3dd08e2 100644 --- a/backend/manager/dbscripts/multi_level_administration_sp.sql +++ b/backend/manager/dbscripts/multi_level_administration_sp.sql @@ -57,6 +57,37 @@ END; $procedure$ LANGUAGE plpgsql; + + + +CREATE OR REPLACE FUNCTION get_user_permissions_for_domain(v_name VARCHAR(255), v_domain VARCHAR(255)) +RETURNS SETOF permissions_view + AS $procedure$ + DECLARE + v_user_name VARCHAR(255); + v_index INTEGER; +BEGIN +-- find if name already includes domain (@) + v_index := POSITION('@' IN v_name); + + if (v_index > 0) then + v_user_name := substr(v_name, 0, v_index); + else + v_user_name := v_name; + end if; + RETURN QUERY SELECT * + FROM permissions_view + WHERE permissions_view.ad_element_id in ( + SELECT users.user_id + FROM users + WHERE users.domain = v_domain + AND users.name = v_user_name); + +END; $procedure$ +LANGUAGE plpgsql; + + + Create or replace FUNCTION GetConsumedPermissionsForQuotaId(v_quota_id UUID) RETURNS SETOF permissions_view AS $procedure$ diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java index 2fe3b7a..14c1b40 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java @@ -44,7 +44,8 @@ private final String WARNING_ABOUT_TO_DELETE_LAST_DOMAIN = "WARNING: Domain %1$s is the last domain in the configuration. After deleting it you will have to either add another domain, or to use the internal admin user in order to login."; private final String INFO_ABOUT_NOT_ADDING_PERMISSIONS = - "The domain %1$s has been added to the engine as an authentication source but no users from that domain have been granted permissions within the oVirt Manager.\nUsers from this domain can be granted permissions from the Web administration interface."; + "The domain %1$s has been added to the engine as an authentication source but no users from that domain have been granted permissions within the oVirt Manager.\n"+ + "Users from this domain can be granted permissions from the Web administration interface or by editing the domain using -action=edit and specifying -addPermissions."; private final String SERVICE_RESTART_MESSAGE = "oVirt Engine restart is required in order for the changes to take place (service ovirt-engine restart)."; @@ -542,7 +543,8 @@ private void handleAddPermissions(String domainName,DomainsConfigurationEntry adUserNameEntry, DomainsConfigurationEntry adUserIdEntry) { if (addPermissions) { updatePermissionsTable(adUserNameEntry, adUserIdEntry); - } else { + } else + if (!userHasPermissions(adUserNameEntry, adUserIdEntry)) { System.out.println(String.format(INFO_ABOUT_NOT_ADDING_PERMISSIONS, domainName)); } } @@ -566,6 +568,23 @@ } } + private boolean userHasPermissions(DomainsConfigurationEntry adUserNameEntry, + DomainsConfigurationEntry adUseridEntry) { + try { + Set<Entry<String, String>> userNameValues = adUserNameEntry.getValues(); + for (Entry<String, String> currUserEntry : userNameValues) { + String currDomain = currUserEntry.getKey(); + String currUser = currUserEntry.getValue(); + if (daoImpl.getUserHasPermissions(currUser, currDomain)) { + return true; + } + } + } catch (SQLException e) { + log.error(e); + } + return false; + } + public void editDomain(CLIParser parser) throws ManageDomainsResult { String authMode; String domainName = parser.getArg(Arguments.domain.toString()).toLowerCase(); diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAO.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAO.java index 69663d2..9b6a9f6 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAO.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAO.java @@ -4,5 +4,6 @@ public interface ManageDomainsDAO { boolean updatePermissionsTable(String uuid, String username, String domain) throws SQLException; + boolean getUserHasPermissions(String userName, String domain) throws SQLException; } diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAOImpl.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAOImpl.java index d5a1969..404bad1 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAOImpl.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsDAOImpl.java @@ -2,6 +2,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.util.UUID; @@ -10,11 +11,13 @@ import org.apache.log4j.Logger; import org.ovirt.engine.core.tools.common.db.StandaloneDataSource; +import org.ovirt.engine.core.utils.db.DbUtils; public class ManageDomainsDAOImpl implements ManageDomainsDAO { private DataSource ds; private String actionQuery = "select attach_user_to_su_role(?,?,?,?)"; + private String selectQuery = "select get_user_permissions_for_domain(?,?)"; private final static Logger log = Logger.getLogger(ManageDomainsDAOImpl.class); public ManageDomainsDAOImpl() throws SQLException { @@ -37,13 +40,29 @@ prepareStatement.setString(4, domain); result = prepareStatement.execute(); } finally { - if (prepareStatement != null) { - prepareStatement.close(); - } - if (connection != null) { - connection.close(); - } + DbUtils.closeQuietly(prepareStatement, connection); } return result; } + + @Override + public boolean getUserHasPermissions(String userName, String domain) throws SQLException { + Connection connection = null; + PreparedStatement prepareStatement = null; + ResultSet resultSet = null; + try { + log.info("getPermissionsForUser username: " + userName + " domain: " + domain); + connection = ds.getConnection(); + prepareStatement = connection.prepareStatement(selectQuery); + prepareStatement.setString(1, userName); + prepareStatement.setString(2, domain); + resultSet = prepareStatement.executeQuery(); + if (resultSet.next()) { + return true; + } + } finally { + DbUtils.closeQuietly(resultSet, prepareStatement, connection); + } + return false; + } } -- To view, visit http://gerrit.ovirt.org/12035 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I04bd16bebfcd9e5390444c525fc45363acff835c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <rn...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches