From a83b5c585c5df63e6254dc62a88d1752fbcfa88e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 19 Aug 2016 22:03:15 -0700 Subject: [PATCH] GUACAMOLE-76: Query child object identifiers directly. --- .../auth/jdbc/connection/ConnectionModel.java | 34 +++++++++ .../jdbc/connection/ModeledConnection.java | 9 +-- .../connectiongroup/ConnectionGroupModel.java | 70 +++++++++++++++++++ .../ModeledConnectionGroup.java | 11 +-- .../sharingprofile/SharingProfileMapper.java | 39 ----------- .../sharingprofile/SharingProfileService.java | 38 ---------- .../auth/jdbc/connection/ConnectionMapper.xml | 38 ++++++++-- .../connectiongroup/ConnectionGroupMapper.xml | 63 +++++++++++++++-- .../sharingprofile/SharingProfileMapper.xml | 19 ----- .../auth/jdbc/connection/ConnectionMapper.xml | 38 ++++++++-- .../connectiongroup/ConnectionGroupMapper.xml | 63 +++++++++++++++-- .../sharingprofile/SharingProfileMapper.xml | 19 ----- 12 files changed, 293 insertions(+), 148 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java index 6d7b28b76..0a1a475b4 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java @@ -19,6 +19,8 @@ package org.apache.guacamole.auth.jdbc.connection; +import java.util.HashSet; +import java.util.Set; import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel; /** @@ -53,6 +55,12 @@ public class ConnectionModel extends GroupedObjectModel { */ private Integer maxConnectionsPerUser; + /** + * The identifiers of all readable sharing profiles associated with this + * connection. + */ + private Set sharingProfileIdentifiers = new HashSet(); + /** * Creates a new, empty connection. */ @@ -152,6 +160,32 @@ public class ConnectionModel extends GroupedObjectModel { this.maxConnectionsPerUser = maxConnectionsPerUser; } + /** + * Returns the identifiers of all readable sharing profiles associated with + * this connection. This is set only when the connection is queried, and has + * no effect when a connection is inserted, updated, or deleted. + * + * @return + * The identifiers of all readable sharing profiles associated with + * this connection. + */ + public Set getSharingProfileIdentifiers() { + return sharingProfileIdentifiers; + } + + /** + * Sets the identifiers of all readable sharing profiles associated with + * this connection. This should be set only when the connection is queried, + * as it has no effect when a connection is inserted, updated, or deleted. + * + * @param sharingProfileIdentifiers + * The identifiers of all readable sharing profiles associated with + * this connection. + */ + public void setSharingProfileIdentifiers(Set sharingProfileIdentifiers) { + this.sharingProfileIdentifiers = sharingProfileIdentifiers; + } + @Override public String getIdentifier() { diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java index f605a90e2..1ee896a03 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java @@ -32,7 +32,6 @@ import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.auth.jdbc.JDBCEnvironment; import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject; -import org.apache.guacamole.auth.jdbc.sharingprofile.SharingProfileService; import org.apache.guacamole.form.Field; import org.apache.guacamole.form.Form; import org.apache.guacamole.form.NumericField; @@ -100,12 +99,6 @@ public class ModeledConnection extends ModeledGroupedDirectoryObject getSharingProfileIdentifiers() throws GuacamoleException { - return sharingProfileService.getIdentifiersWithin(getCurrentUser(), getIdentifier()); + return getModel().getSharingProfileIdentifiers(); } @Override diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupModel.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupModel.java index 6805ef2a5..1d938c963 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupModel.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupModel.java @@ -19,6 +19,8 @@ package org.apache.guacamole.auth.jdbc.connectiongroup; +import java.util.HashSet; +import java.util.Set; import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel; import org.apache.guacamole.net.auth.ConnectionGroup; @@ -60,6 +62,18 @@ public class ConnectionGroupModel extends GroupedObjectModel { */ private boolean sessionAffinityEnabled; + /** + * The identifiers of all readable child connections within this connection + * group. + */ + private Set connectionIdentifiers = new HashSet(); + + /** + * The identifiers of all readable child connection groups within this + * connection group. + */ + private Set connectionGroupIdentifiers = new HashSet(); + /** * Creates a new, empty connection group. */ @@ -186,6 +200,62 @@ public class ConnectionGroupModel extends GroupedObjectModel { this.sessionAffinityEnabled = sessionAffinityEnabled; } + /** + * Returns the identifiers of all readable child connections within this + * connection group. This is set only when the parent connection group is + * queried, and has no effect when a connection group is inserted, updated, + * or deleted. + * + * @return + * The identifiers of all readable child connections within this + * connection group. + */ + public Set getConnectionIdentifiers() { + return connectionIdentifiers; + } + + /** + * Sets the identifiers of all readable child connections within this + * connection group. This should be set only when the parent connection + * group is queried, as it has no effect when a connection group is + * inserted, updated, or deleted. + * + * @param connectionIdentifiers + * The identifiers of all readable child connections within this + * connection group. + */ + public void setConnectionIdentifiers(Set connectionIdentifiers) { + this.connectionIdentifiers = connectionIdentifiers; + } + + /** + * Returns the identifiers of all readable child connection groups within + * this connection group. This is set only when the parent connection group + * is queried, and has no effect when a connection group is inserted, + * updated, or deleted. + * + * @return + * The identifiers of all readable child connection groups within this + * connection group. + */ + public Set getConnectionGroupIdentifiers() { + return connectionGroupIdentifiers; + } + + /** + * Sets the identifiers of all readable child connection groups within this + * connection group. This should be set only when the parent connection + * group is queried, as it has no effect when a connection group is + * inserted, updated, or deleted. + * + * @param connectionGroupIdentifiers + * The identifiers of all readable child connection groups within this + * connection group. + */ + public void setConnectionGroupIdentifiers(Set connectionGroupIdentifiers) { + this.connectionGroupIdentifiers = connectionGroupIdentifiers; + } + @Override public String getIdentifier() { diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ModeledConnectionGroup.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ModeledConnectionGroup.java index a0675f48d..59a93ec68 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ModeledConnectionGroup.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connectiongroup/ModeledConnectionGroup.java @@ -29,7 +29,6 @@ import java.util.Set; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.auth.jdbc.JDBCEnvironment; import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject; -import org.apache.guacamole.auth.jdbc.connection.ConnectionService; import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService; import org.apache.guacamole.form.BooleanField; import org.apache.guacamole.form.Field; @@ -99,12 +98,6 @@ public class ModeledConnectionGroup extends ModeledGroupedDirectoryObject getConnectionIdentifiers() throws GuacamoleException { - return connectionService.getIdentifiersWithin(getCurrentUser(), getIdentifier()); + return getModel().getConnectionIdentifiers(); } @Override public Set getConnectionGroupIdentifiers() throws GuacamoleException { - return connectionGroupService.getIdentifiersWithin(getCurrentUser(), getIdentifier()); + return getModel().getConnectionGroupIdentifiers(); } @Override diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.java index 113cb90e1..7cd962e61 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.java @@ -19,9 +19,7 @@ package org.apache.guacamole.auth.jdbc.sharingprofile; -import java.util.Set; import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper; -import org.apache.guacamole.auth.jdbc.user.UserModel; import org.apache.ibatis.annotations.Param; /** @@ -32,43 +30,6 @@ import org.apache.ibatis.annotations.Param; public interface SharingProfileMapper extends ModeledDirectoryObjectMapper { - /** - * Selects the identifiers of all sharing profiles associated with the given - * primary connection, regardless of whether they are readable by any - * particular user. This should only be called on behalf of a system - * administrator. If identifiers are needed by a non-administrative user who - * must have explicit read rights, use selectReadableIdentifiersWithin() - * instead. - * - * @param primaryConnectionIdentifier - * The identifier of the primary connection. - * - * @return - * A Set containing all identifiers of all objects. - */ - Set selectIdentifiersWithin( - @Param("primaryConnectionIdentifier") String primaryConnectionIdentifier); - - /** - * Selects the identifiers of all sharing profiles associated with the given - * primary connection that are explicitly readable by the given user. If - * identifiers are needed by a system administrator (who, by definition, - * does not need explicit read rights), use selectIdentifiersWithin() - * instead. - * - * @param user - * The user whose permissions should determine whether an identifier - * is returned. - * - * @param primaryConnectionIdentifier - * The identifier of the primary connection. - * - * @return - * A Set containing all identifiers of all readable objects. - */ - Set selectReadableIdentifiersWithin(@Param("user") UserModel user, - @Param("primaryConnectionIdentifier") String primaryConnectionIdentifier); - /** * Selects the sharing profile associated with the given primary connection * and having the given name. If no such sharing profile exists, null is diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileService.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileService.java index ec12929a1..907a3a945 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileService.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileService.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import org.apache.guacamole.auth.jdbc.user.ModeledAuthenticatedUser; import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper; import org.apache.guacamole.GuacamoleClientException; @@ -244,43 +243,6 @@ public class SharingProfileService } - /** - * Returns the set of all identifiers for all sharing profiles associated - * with the given primary connection. Only sharing profiles that the user - * has read access to will be returned. - * - * Permission to read the primary connection having the given identifier is - * NOT checked. - * - * @param user - * The user retrieving the identifiers. - * - * @param identifier - * The identifier of the primary connection. - * - * @return - * The set of all identifiers for all sharing profiles associated with - * the primary connection having the given identifier that the user has - * read access to. - * - * @throws GuacamoleException - * If an error occurs while reading identifiers. - */ - public Set getIdentifiersWithin(ModeledAuthenticatedUser user, - String identifier) - throws GuacamoleException { - - // Bypass permission checks if the user is a system admin - if (user.getUser().isAdministrator()) - return sharingProfileMapper.selectIdentifiersWithin(identifier); - - // Otherwise only return explicitly readable identifiers - else - return sharingProfileMapper.selectReadableIdentifiersWithin( - user.getUser().getModel(), identifier); - - } - /** * Retrieves all parameters visible to the given user and associated with * the sharing profile having the given identifier. If the given user has no diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml index b5b844921..0fd026579 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -25,12 +25,21 @@ + + + + + + + + @@ -70,7 +79,8 @@ - SELECT connection_id, @@ -84,12 +94,21 @@ #{identifier,jdbcType=VARCHAR} - + ; + + SELECT primary_connection_id, sharing_profile_id + FROM guacamole_sharing_profile + WHERE primary_connection_id IN + + #{identifier,jdbcType=VARCHAR} + ; - SELECT guacamole_connection.connection_id, @@ -106,7 +125,18 @@ #{identifier,jdbcType=VARCHAR} AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ' + AND permission = 'READ'; + + SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id + FROM guacamole_sharing_profile + JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id + WHERE primary_connection_id IN + + #{identifier,jdbcType=VARCHAR} + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml index e8cecf120..f2ef3c297 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml @@ -25,6 +25,8 @@ + + @@ -33,6 +35,19 @@ + + + + + + + + + + + @@ -72,7 +87,8 @@ - SELECT connection_group_id, @@ -87,12 +103,29 @@ #{identifier,jdbcType=VARCHAR} - + ; + + SELECT parent_id, connection_group_id + FROM guacamole_connection_group + WHERE parent_id IN + + #{identifier,jdbcType=VARCHAR} + ; + + SELECT parent_id, connection_id + FROM guacamole_connection + WHERE parent_id IN + + #{identifier,jdbcType=VARCHAR} + ; - SELECT guacamole_connection_group.connection_group_id, @@ -110,7 +143,29 @@ #{identifier,jdbcType=VARCHAR} AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ' + AND permission = 'READ'; + + SELECT parent_id, guacamole_connection_group.connection_group_id + FROM guacamole_connection_group + JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id + WHERE parent_id IN + + #{identifier,jdbcType=VARCHAR} + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; + + SELECT parent_id, guacamole_connection.connection_id + FROM guacamole_connection + JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id + WHERE parent_id IN + + #{identifier,jdbcType=VARCHAR} + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml index 0045daf99..7614574c8 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml @@ -45,25 +45,6 @@ AND permission = 'READ' - - - - - - - SELECT connection_id, @@ -84,12 +94,21 @@ #{identifier,jdbcType=INTEGER}::integer - + ; + + SELECT primary_connection_id, sharing_profile_id + FROM guacamole_sharing_profile + WHERE primary_connection_id IN + + #{identifier,jdbcType=INTEGER}::integer + ; - SELECT guacamole_connection.connection_id, @@ -106,7 +125,18 @@ #{identifier,jdbcType=INTEGER}::integer AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ' + AND permission = 'READ'; + + SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id + FROM guacamole_sharing_profile + JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id + WHERE primary_connection_id IN + + #{identifier,jdbcType=INTEGER}::integer + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml index b55c01592..0a41b3d6b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connectiongroup/ConnectionGroupMapper.xml @@ -25,6 +25,8 @@ + + @@ -33,6 +35,19 @@ + + + + + + + + + + + @@ -72,7 +87,8 @@ - SELECT connection_group_id, @@ -87,12 +103,29 @@ #{identifier,jdbcType=INTEGER}::integer - + ; + + SELECT parent_id, connection_group_id + FROM guacamole_connection_group + WHERE parent_id IN + + #{identifier,jdbcType=INTEGER}::integer + ; + + SELECT parent_id, connection_id + FROM guacamole_connection + WHERE parent_id IN + + #{identifier,jdbcType=INTEGER}::integer + ; - SELECT guacamole_connection_group.connection_group_id, @@ -110,7 +143,29 @@ #{identifier,jdbcType=INTEGER}::integer AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ' + AND permission = 'READ'; + + SELECT parent_id, guacamole_connection_group.connection_group_id + FROM guacamole_connection_group + JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id + WHERE parent_id IN + + #{identifier,jdbcType=INTEGER}::integer + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; + + SELECT parent_id, guacamole_connection.connection_id + FROM guacamole_connection + JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id + WHERE parent_id IN + + #{identifier,jdbcType=INTEGER}::integer + + AND user_id = #{user.objectID,jdbcType=INTEGER} + AND permission = 'READ'; diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml index 6720f5dbb..36a3beb5d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/sharingprofile/SharingProfileMapper.xml @@ -45,25 +45,6 @@ AND permission = 'READ' - - - - - -